openwisp.wireguard_openwisp
ansible-wireguard-openwisp
Rol de Ansible que instala WireGuard y scripts de gestión para OpenWISP. Una vez instalado y configurado correctamente con OpenWISP, los pares de WireGuard son gestionados automáticamente por OpenWISP sin necesidad de intervención manual.
Este rol también puede configurar scripts para permitir que OpenWISP gestione túneles de VXLAN sobre WireGuard.
Probado en Debian y Ubuntu.
NOTA: se sugiere encarecidamente usar este procedimiento en máquinas virtuales limpias o contenedores de Linux.
Versión mínima de Ansible soportada: 2.10.
Instrucciones de Instalación y Uso
Para mayor simplicidad, lo más fácil es instalar este
rol en tu máquina local a través de ansible-galaxy
:
ansible-galaxy install openwisp.wireguard_openwisp
Consulta el ejemplo de playbook en "Sección de Ejemplo Completo de Playbook con Certificado SSL" para comenzar rápidamente con este rol.
NOTA: Este rol no configurará el reenvío de paquetes ni agregará rutas estáticas o dinámicas en tu servidor.
Dado que la forma exacta en que se pueden enrutar los paquetes varía según diferentes factores y necesidades que pueden diferir mucho de una organización a otra, se deja al usuario configurarlo de acuerdo con sus necesidades. Podemos añadir una configuración predeterminada de enrutamiento/reenvío en el futuro, una vez que tengamos más datos de uso. Si estás interesado en esto, háznoslo saber.
Ejemplo Completo de Playbook con Certificado SSL
Por defecto, el playbook crea un certificado SSL autofirmado (no confiable) para el punto final de VPN. Si mantienes el certificado no confiable, también necesitarás desactivar la verificación SSL en OpenWISP, aunque desaconsejamos utilizar este tipo de configuración en un entorno de producción. Puedes instalar tu propio certificado confiable siguiendo los pasos en esta sección.
Lo primero que debes hacer es configurar un dominio válido para tu VPN de WireGuard, esto significa que tu archivo de inventario (hosts) debería verse de la siguiente manera:
[openwisp2_wireguard]
wireguard.tudominio.com
Debes poder agregar un registro DNS para wireguard.tudominio.com
, no puedes
usar una dirección IP en lugar de wireguard.tudominio.com
.
Una vez que tu dominio esté configurado y el registro DNS se haya propagado, procede a instalar el rol de ansible geerlingguy.certbot
ansible-galaxy install geerlingguy.certbot
Luego procede a crear tu archivo playbook.yml para que se vea similar al siguiente ejemplo:
- hosts: openwisp2_wireguard
become: "{{ become | default('yes') }}"
roles:
- geerlingguy.certbot
- openwisp.wireguard_openwisp
vars:
openwisp2_wireguard_controller_url: "https://openwisp.tudominio.com"
openwisp2_wireguard_vpn_uuid: "pegar-uuid-vpn-aqui"
openwisp2_wireguard_vpn_key: "pegar-clave-vpn-aqui"
openwisp2_wireguard_flask_key: "pegar-token-autenticación-punto-final"
# Certificados SSL
openwisp2_wireguard_ssl_cert: "/etc/letsencrypt/live/{{ ansible_fqdn }}/fullchain.pem"
openwisp2_wireguard_ssl_key: "/etc/letsencrypt/live/{{ ansible_fqdn }}/privkey.pem"
# Configuración de certbot
certbot_auto_renew_user: "usuario-privilegiado-para-renovar-certificados"
certbot_auto_renew_minute: "20"
certbot_auto_renew_hour: "5"
certbot_create_if_missing: true
certbot_create_standalone_stop_services: []
certbot_certs:
- email: "pegar-tu-email"
domains:
- wireguard.tudominio.com
Lee la documentación de geerlingguy.certbot
para aprender más sobre la configuración del rol de certbot.
Para conocer todas las variables de Ansible proporcionadas por openwisp.wireguard_openwisp
,
lee la "Sección de Variables del Rol" de esta documentación.
Configuración de Múltiples Interfaces de WireGuard
Usando este rol, puedes configurar múltiples interfaces de WireGuard en la misma máquina que son gestionadas por OpenWISP de manera independiente. Debes asegurarte de que las siguientes variables de rol sean únicas para cada playbook:
openwisp2_wireguard_path
openwisp2_wireguard_flask_port
A continuación se presenta un ejemplo de playbook que contiene dos plays para configurar múltiples interfaces de WireGuard.
- name: Configurar la primera interfaz de WireGuard
hosts:
- wireguard
become: "{{ become | default('yes') }}"
roles:
- openwisp.wireguard_openwisp
vars:
openwisp2_wireguard_controller_url: "https://openwisp.tudominio.com"
openwisp2_wireguard_path: "/opt/wireguard-openwisp/wireguard-1"
openwisp2_wireguard_vpn_uuid: "pegar-uuid-vpn1-aqui"
openwisp2_wireguard_vpn_key: "pegar-clave-vpn1-aqui"
openwisp2_wireguard_flask_key: "pegar-token-autenticación-punto-final-vpn1"
openwisp2_wireguard_flask_port: 8081
- name: Configurar la segunda interfaz de WireGuard
hosts:
- wireguard
become: "{{ become | default('yes') }}"
roles:
- openwisp.wireguard_openwisp
vars:
openwisp2_wireguard_controller_url: "https://openwisp.tudominio.com"
openwisp2_wireguard_path: "/opt/wireguard-openwisp/wireguard-2"
openwisp2_wireguard_vpn_uuid: "pegar-uuid-vpn-2-aqui"
openwisp2_wireguard_vpn_key: "pegar-clave-vpn-2-aqui"
openwisp2_wireguard_flask_key: "pegar-token-autenticación-punto-final-vpn-2"
openwisp2_wireguard_flask_port: 8082
Consideraciones
- Al crear objetos de servidor VPN en OpenWISP, asegúrate de que el
nombre de la interfaz
y elpuerto
sean únicos para cada VPN. De lo contrario, los scripts de actualización no funcionarán correctamente debido a conflictos.
Variables del Rol
Este rol tiene muchos valores de variables que pueden ser cambiados para adaptarse mejor a tus necesidades.
A continuación se enumeran todas las variables que puedes personalizar (también puede que desees consultar los valores predeterminados de estas variables).
- hosts: openwisp2_wireguard
become: "{{ become | default('yes') }}"
roles:
- openwisp.wireguard_openwisp
vars:
# URL de la instancia de OpenWISP, puedes omitir esto (borrarlo) si WireGuard
# se instala en el mismo host en el que se está ejecutando OpenWISP.
# Si estás utilizando dos hosts separados (uno para OpenWISP y otro para WireGuard),
# lo que es una buena idea, necesitarás especificar la URL de tu
# instancia de OpenWISP (ejecutando OpenWISP Controller >= 1.0.0) aquí
openwisp2_wireguard_controller_url: "https://openwisp.tudominio.com"
# Directorio donde instalar scripts de actualización
openwisp2_wireguard_path: "/opt/wireguard-openwisp"
# Permite descargar la configuración de VPN usando conexiones SSL "inseguras".
# Se recomienda dejarlo como falso.
openwisp2_wireguard_curl_insecure: false
# UUID de la VPN generado después de crear el objeto del servidor VPN en OpenWISP
openwisp2_wireguard_vpn_uuid: "pegar-uuid-vpn-aqui"
# Clave de la VPN generada después de crear el objeto del servidor VPN en OpenWISP
openwisp2_wireguard_vpn_key: "pegar-clave-vpn-aqui"
# Punto final de Flask que se usará para activar actualizaciones
openwisp2_wireguard_flask_endpoint: "/trigger-update"
# Clave de autorización del punto de actualización
openwisp2_wireguard_flask_key: "pegar-token-autenticación-punto-final"
# Puerto donde se ejecuta el punto final de Flask
openwisp2_wireguard_flask_port: 8081
# Host donde se ejecuta el punto final de Flask
openwisp2_wireguard_flask_host: 0.0.0.0
# Establece el nivel de registro para la duración de Flask.
# Los valores permitidos son "INFO", "WARNING" y "ERROR"
openwisp2_wireguard_logging_level: "WARNING"
# Comando utilizado para ejecutar uwsgi desde supervisor
openwisp2_wireguard_uwsgi_command: "{{ openwisp2_wireguard_path }}/env/bin/uwsgi uwsgi.ini"
# especifica la ruta a un certificado SSL y clave válidos
# (se generará un certificado SSL autofirmado si se omite)
openwisp2_wireguard_ssl_cert: "/opt/wireguard-openwisp/ssl/server.crt"
openwisp2_wireguard_ssl_key: "/opt/wireguard-openwisp/ssl/server.key"
# personaliza la información del certificado SSL autofirmado si es necesario
openwisp2_wireguard_ssl_country: "US"
openwisp2_wireguard_ssl_state: "California"
openwisp2_wireguard_ssl_locality: "San Francisco"
openwisp2_wireguard_ssl_organization: "Departamento de IT"
# por defecto se usa python3, puede que debas configurar esto a python2.7 para sistemas más antiguos
openwisp2_wireguard_python: python2.7
# comando de virtualenv para tu distribución remota, generalmente se configura automáticamente
openwisp2_wireguard_virtualenv_command: "virtualenv"
# Establece el método ipv4.method de la conexión VXLAN, por defecto es "link-local"
openwisp2_wireguard_vxlan_ipv4_method: disabled
openwisp2_wireguard_vxlan_ipv6_method: disabled
Solución de Problemas
Aquí te explicamos cómo activar manualmente la verificación de la configuración si es necesario:
sudo -u openwisp /opt/wireguard-openwisp/update_wireguard.sh check_config
Los registros de la aplicación que es responsable de actualizar la
configuración de WireGuard descargada del servidor OpenWISP se pueden encontrar
en /opt/wireguard-openwisp/vpn_updater.log
.
Contribuciones
Por favor, lee las directrices de contribución de OpenWISP.
Cómo ejecutar pruebas
Si deseas contribuir a ansible-wireguard-openwisp
, debes ejecutar pruebas
en tu entorno de desarrollo para asegurar que tus cambios no rompen nada.
Para hacerlo, procede de la siguiente manera:
Paso 1: Clona ansible-wireguard-openwisp
Clona el repositorio usando:
git clone https://github.com/<tu_fork>/ansible-wireguard-openwisp.git
Paso 2: Instalar Docker
Si aún no has instalado Docker, debes instalarlo (ejemplo para sistemas Debian/Ubuntu):
sudo apt-get install docker.io
Paso 3: Instalar molecule y dependencias
pip install molecule[docker,ansible] yamllint ansible-lint docker
Paso 4: Descargar imágenes de Docker
docker pull geerlingguy/docker-ubuntu2204-ansible:latest
docker pull geerlingguy/docker-ubuntu2004-ansible:latest
docker pull geerlingguy/docker-debian11-ansible:latest
Paso 5: Ejecutar prueba de molecule
molecule test -s local
Si no recibes ningún mensaje de error significa que las pruebas se ejecutaron con éxito sin errores.
Consejo: Usa molecule test -s local --destroy=never
para acelerar ejecuciones de prueba posteriores.
Licencia
Consulta LICENCIA.
Soporte
Consulta los Canales de Soporte de OpenWISP.
Role to install OpenWISP's Wireguard Updater
ansible-galaxy install openwisp.wireguard_openwisp