openwisp.wireguard_openwisp

ansible-wireguard-openwisp

Estado de Construcción

Gitter

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 el puerto 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.

Acerca del proyecto

Role to install OpenWISP's Wireguard Updater

Instalar
ansible-galaxy install openwisp.wireguard_openwisp
Licencia
bsd-3-clause
Descargas
505
Propietario
Modular and Programmable Open Source Network Management System for Linux OpenWrt.