oukooveu.wireguard
rol de ansible para wireguard
Este es un rol simple para instalar wireguard y configurar conectividad en malla completa (por defecto) entre todos los hosts de la tarea.
El rol se inspiró en esta implementación, pero dado que se encuentra en un estado no mantenido y no se aceptan PRs, se decidió reescribirlo desde cero.
Requisitos
No hay requisitos especiales. No hay un valor predeterminado para wireguard_vpn_ip
, esta variable debe definirse para cada host.
Variables del Rol
Variable | Descripción | Valor predeterminado |
---|---|---|
wireguard_vpn_ip | dirección privada | N/A, debe proporcionarse a través de variables del host |
wireguard_port | puerto para escuchar | 51820 |
wireguard_path | ruta a los archivos de configuración | /etc/wireguard |
wireguard_public_ip | dirección pública | {{ ansible_default_ipv4.address }} |
wireguard_post_up | script post up | N/A |
wireguard_post_down | script post down | N/A |
wireguard_network | topología de red, ver ejemplos abajo | {} |
wireguard_network_name | nombre de la interfaz | wg0 |
wireguard_additional_peers | pares adicionales | [] |
wireguard_mtu_enabled | gestionar la opción MTU |
false |
wireguard_mtu | valor de la opción MTU |
N/A |
wireguard_fw_mark_enabled | gestionar la opción FwMark |
false |
wireguard_fw_mark | valor de la opción FwMark |
{{ wireguard_port }} |
wireguard_hosts_enabled | agregar a sí mismo y a los pares de wireguard en /etc/hosts | false |
wireguard_hosts_domain | dominio para los registros de /etc/hosts | wg.internal |
La opción FwMark
de wireguard puede ser útil cuando necesitas filtrar todo el tráfico no encriptado, por ejemplo:
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
Ejemplos de Playbooks
red en malla completa
- name: configurar red en malla completa con wireguard
hosts: cluster
roles:
- role: oukooveu.wireguard
topología de red personalizada con un par adicional
- name: configurar red personalizada con wireguard
hosts: cluster
vars:
wireguard_network:
node1:
- node2
- node3
- node4
node2:
- node1
- node4
node3:
- node1
- node4
node4:
- node1
- node2
- node3
wireguard_additional_peers:
- ip: 192.168.100.1
key: s3cr3t
endpoint: 10.0.100.1
keepalive: 15
comment: 'comentario'
roles:
- role: oukooveu.wireguard
En el ejemplo anterior, los hosts node1
y node4
tienen acceso a todos los hosts y los hosts node2
y node3
no tienen acceso entre sí. La configuración debe ser simétrica (si la conectividad para un nodo está definida, debe definirse para el otro nodo también) y no hay comprobaciones adicionales para esto, ten cuidado.
Pruebas de Molecule
Para ejecutar pruebas localmente:
python -m venv .venv
. .venv/bin/activate
pip install -r molecule/default/requirements.txt
molecule test
Para ejecutar pruebas para una imagen no predeterminada (debian:11
), establece la variable de entorno MOLECULE_IMAGE
a un valor apropiado, por ejemplo:
export MOLECULE_IMAGE=rockylinux:9
Para limpiar el entorno de prueba ejecuta molecule destroy
.
Licencia
Apache 2.0
ansible-galaxy install oukooveu.wireguard