Initiate wireguard tunnel between routers

This commit is contained in:
Théophile Bastian 2025-03-05 20:13:17 +01:00
parent 3b6521415b
commit cd609d01e0
5 changed files with 30 additions and 2 deletions
roles
wireguard
README.md
defaults
templates/wireguard
wireguard_edge_tunnels

View file

@ -14,6 +14,10 @@ Définit un réseau Wireguard avec les pairs définis.
`false`.
* `wg_peers`: liste des pairs wireguard à configurer (également configurés par
ce rôle). Chaque entrée de cette liste est le nom du pair dans l'inventaire ;
* `wg_peers_addr_var`: hostvar ansible définissant l'adresse d'un pair de
`wg_peers`. Utile lorsque ce rôle est importé avec la variable `wg_addr`
définie à l'import, par exemple pour créer plus d'un tunnel par machine. Par
défaut, vaut `wg_addr`.
* `wg_extra_hosts`: liste des pairs wireguard à configurer qui ne sont pas
gérés par ce rôle ansible. Chaque entrée de cette liste est un dictionnaire
contenant :
@ -23,5 +27,6 @@ Définit un réseau Wireguard avec les pairs définis.
* `endpoint`: optionnel. Adresse à laquelle cette machine peut être jointe
pour initier la connexion wireguard.
* `allowed_ips`: list of further IP ranges to allow
* `wg_globally_allowed_ips`: list of further IP ranges to allow for all peers
* `wg_add_routes`: whether routes should be added by wg-quick to the kernel
routing table. Defaults to true.

View file

@ -3,3 +3,5 @@ wg_port: 51810
wg_keepalive: false
wg_extra_hosts: []
wg_add_routes: true
wg_globally_allowed_ips: []
wg_peers_addr_var: wg_addr

View file

@ -10,7 +10,8 @@ Table = {% if wg_add_routes %}auto{% else %}off{% endif %}
[Peer]
PublicKey = {{ hostvars[peer].wg_public_key }}
Endpoint = {{ hostvars[peer].inventory_hostname}}:{{ wg_port }}
AllowedIPs = {{ hostvars[peer].wg_addr | ipaddr('address') }}/128
AllowedIPs = {{ hostvars[peer][wg_peers_addr_var] | ipaddr('address') }}/128
{%- for range in wg_globally_allowed_ips %}, {{ range }}{% endfor %}
{% if wg_keepalive -%}
PersistentKeepalive = 25
{%- endif %}
@ -21,7 +22,9 @@ PersistentKeepalive = 25
# {{ peer['host'] }}
[Peer]
PublicKey = {{ peer['pk'] }}
AllowedIPs = {{ peer['hostaddr'] }}/128{% for range in peer['allowed_ips'] %}, {{ range }}{% endfor %}
AllowedIPs = {{ peer['hostaddr'] }}/128
{%- for range in peer['allowed_ips'] %}, {{ range }}{% endfor %}
{%- for range in wg_globally_allowed_ips %}, {{ range }}{% endfor %}
{% if 'endpoint' in peer %}
Endpoint = {{ peer['endpoint'] }}

View file

@ -6,3 +6,7 @@ Establish tunnels towards BGP peers at edge routers.
* `bgp_peers`: list of the BGP peers of this router. See README of role
`bgp_edge`.
* `edge_neighbours`: list of ansible hostname of peers (within our AS) that
are edge neighbours. This definition MUST be symmetric, double check that.
* `edge_ll_ip6`: link-local IPv6 address to use for this host across the
edge-neighbouring tunnel.

View file

@ -11,6 +11,20 @@
owner: root
mode: 0700
- name: Create edge neighbours tunnels
include_role:
name: wireguard
vars:
wg_if_name: "wg-dn42-edge"
wg_port: "20000"
wg_addr: "{{ edge_ll_ip6 }}/64"
wg_peers: "{{ edge_neighbours }}"
wg_peers_addr_var: edge_ll_ip6
wg_extra_hosts: []
wg_globally_allowed_ips:
- 'fd00::/8'
wg_add_routes: false
- name: Create Wireguard peering keypair
block:
- name: Generate keypair