openwisp.wireguard_openwisp

ansible-wireguard-openwisp

构建状态

Gitter

这是一个 Ansible 角色,用于安装 WireGuard 和 OpenWISP 的管理脚本。一旦正确安装并与 OpenWISP 配置,WireGuard 节点可以通过 OpenWISP 自动管理,无需手动干预。

该角色还可以配置脚本,允许 OpenWISP 管理 通过 WireGuard 的 VXLAN 隧道。

已在 DebianUbuntu 系统上测试。

注意: 强烈建议在干净的虚拟机或 Linux 容器上使用此过程。

支持的最低 Ansible 版本: 2.10。

安装与使用说明

为了简便起见,最好在 本地机器 上通过 ansible-galaxy 安装这个角色:

ansible-galaxy install openwisp.wireguard_openwisp

请参考本文档中"带 SSL 证书的完整示例剧本"部分以快速开始使用此角色。

注意: 此角色 不会在您的服务器上配置转发数据包或添加静态或动态路由

由于数据包的路由方式可能因各种因素而异,而且需求差异可能很大,因此由用户根据需求自行配置。 如果您对此感兴趣,我们可能在将来添加默认的路由/转发配置,请告知我们

带 SSL 证书的完整示例剧本

默认情况下,此剧本会为 VPN 端点创建自签名(不受信任)SSL 证书。如果您保留不受信任的证书,您还需要在 OpenWISP 中禁用 SSL 验证,不过我们建议在生产环境中不要使用这种设置。您可以按照本节中的步骤安装您自己的受信任证书。

您首先需要为您的 WireGuard VPN 设置一个有效的域名,这意味着您的清单文件(hosts)应如下所示:

[openwisp2_wireguard]
wireguard.yourdomain.com

您必须能够为 wireguard.yourdomain.com 添加 DNS 记录,不能用 IP 地址替代 wireguard.yourdomain.com

一旦您的域名设置完成并且 DNS 记录已传播,接下来安装 Ansible 角色 geerlingguy.certbot

ansible-galaxy install geerlingguy.certbot

然后创建您的 playbook.yml,使其看起来类似于以下示例:

- hosts: openwisp2_wireguard
  become: "{{ become | default('yes') }}"
  roles:
    - geerlingguy.certbot
    - openwisp.wireguard_openwisp
  vars:
    openwisp2_wireguard_controller_url: "https://openwisp.yourdomain.com"
    openwisp2_wireguard_vpn_uuid: "paste-vpn-uuid-here"
    openwisp2_wireguard_vpn_key: "paste_vpn-key-here"
    openwisp2_wireguard_flask_key: "paste-endpoint-auth-token"

    # SSL 证书
    openwisp2_wireguard_ssl_cert: "/etc/letsencrypt/live/{{ ansible_fqdn }}/fullchain.pem"
    openwisp2_wireguard_ssl_key: "/etc/letsencrypt/live/{{ ansible_fqdn }}/privkey.pem"

    # certbot 配置
    certbot_auto_renew_user: "privileged-user-to-renew-certs"
    certbot_auto_renew_minute: "20"
    certbot_auto_renew_hour: "5"
    certbot_create_if_missing: true
    certbot_create_standalone_stop_services: []
    certbot_certs:
      - email: "paste-your-email"
        domains:
          - wireguard.yourdomain.com

阅读 geerlingguy.certbot 的文档 以了解更多有关 certbot 角色配置的信息。

要了解 openwisp.wireguard_openwisp 提供的所有 Ansible 变量,请查看本文档的"角色变量"部分

设置多个 WireGuard 接口

使用此角色,您可以在同一台机器上设置多个由 OpenWISP 独立管理的 WireGuard 接口。您需要确保以下角色变量在每个剧本中是唯一的:

  • openwisp2_wireguard_path
  • openwisp2_wireguard_flask_port

以下是一个包含两个剧本的示例,用于设置多个 WireGuard 接口。

- name: 设置第一个 WireGuard 接口
  hosts:
    - wireguard
  become: "{{ become | default('yes') }}"
  roles:
    - openwisp.wireguard_openwisp
  vars:
    openwisp2_wireguard_controller_url: "https://openwisp.yourdomain.com"
    openwisp2_wireguard_path: "/opt/wireguard-openwisp/wireguard-1"
    openwisp2_wireguard_vpn_uuid: "paste-vpn1-uuid-here"
    openwisp2_wireguard_vpn_key: "paste-vpn1-key-here"
    openwisp2_wireguard_flask_key: "paste-vpn1-endpoint-auth-token"
    openwisp2_wireguard_flask_port: 8081

- name: 设置第二个 WireGuard 接口
  hosts:
    - wireguard
  become: "{{ become | default('yes') }}"
  roles:
    - openwisp.wireguard_openwisp
  vars:
    openwisp2_wireguard_controller_url: "https://openwisp.yourdomain.com"
    openwisp2_wireguard_path: "/opt/wireguard-openwisp/wireguard-2"
    openwisp2_wireguard_vpn_uuid: "paste-vpn-2-uuid-here"
    openwisp2_wireguard_vpn_key: "paste-vpn-2-key-here"
    openwisp2_wireguard_flask_key: "paste-vpn-2-endpoint-auth-token"
    openwisp2_wireguard_flask_port: 8082

注意事项

  • 在 OpenWISP 中创建 VPN 服务器对象时,确保每个 VPN 的 接口名称端口 是唯一的。否则,更新脚本将由于冲突而无法正常工作。

角色变量

此角色有许多可根据您的需求进行更改的变量值。

下面列出了您可以自定义的所有变量 (您也可以查看 这些变量的默认值)。

- hosts: openwisp2_wireguard
  become: "{{ become | default('yes') }}"
  roles:
    - openwisp.wireguard_openwisp
  vars:
    # OpenWISP 实例的 URL,如果 WireGuard 安装在与 OpenWISP 运行于同一主机上,则可以省略(删除)。
    # 如果您使用两个独立主机(一个用于 OpenWISP,一个用于 WireGuard),
    # 这是个好主意,您需要在此处指定您的 OpenWISP 实例的 URL(运行 OpenWISP 控制器 >= 1.0.0)
    openwisp2_wireguard_controller_url: "https://openwisp.yourdomain.com"
    # 安装升级脚本的目录
    openwisp2_wireguard_path: "/opt/wireguard-openwisp"
    # 允许通过“非安全”SSL连接下载VPN配置。
    # 建议保持为 false。
    openwisp2_wireguard_curl_insecure: false
    # 在 OpenWISP 中创建 VPN 服务器对象后生成的 VPN UUID
    openwisp2_wireguard_vpn_uuid: "paste-vpn-uuid-here"
    # 在 OpenWISP 中创建 VPN 服务器对象后生成的 VPN 密钥
    openwisp2_wireguard_vpn_key: "paste_vpn-key-here"
    # 用于触发更新的 Flask 端点
    openwisp2_wireguard_flask_endpoint: "/trigger-update"
    # 更新点授权密钥
    openwisp2_wireguard_flask_key: "paste-endpoint-auth-token"
    # Flask 端点运行的端口
    openwisp2_wireguard_flask_port: 8081
    # Flask 端点运行的主机
    openwisp2_wireguard_flask_host: 0.0.0.0
    # 设置 Flask 日志记录的日志级别。
    # 允许的值是 “INFO”、“WARNING”和 “ERROR”
    openwisp2_wireguard_logging_level: "WARNING"
    # 从 supervisor 运行的 uwsgi 使用的命令
    openwisp2_wireguard_uwsgi_command: "{{ openwisp2_wireguard_path }}/env/bin/uwsgi uwsgi.ini"

    # 指定有效 SSL 证书和密钥的路径
    # (如果省略,将生成自签名 SSL 证书)
    openwisp2_wireguard_ssl_cert: "/opt/wireguard-openwisp/ssl/server.crt"
    openwisp2_wireguard_ssl_key: "/opt/wireguard-openwisp/ssl/server.key"
    # 如果需要,自定义自签名 SSL 证书信息
    openwisp2_wireguard_ssl_country: "US"
    openwisp2_wireguard_ssl_state: "California"
    openwisp2_wireguard_ssl_locality: "San Francisco"
    openwisp2_wireguard_ssl_organization: "IT dep."

    # 默认使用 python3,如果您使用的是旧系统,可能需要将其设置为 python2.7
    openwisp2_wireguard_python: python2.7
    # 您的远程发行版的 virtualenv 命令,通常自动设置
    openwisp2_wireguard_virtualenv_command: "virtualenv"

    # 设置 VXLAN 连接的 ipv4.method,默认为 "link-local"
    openwisp2_wireguard_vxlan_ipv4_method: disabled
    openwisp2_wireguard_vxlan_ipv6_method: disabled

疑难排解

如果需要,手动触发配置检查的方法如下:

sudo -u openwisp /opt/wireguard-openwisp/update_wireguard.sh check_config

负责从 OpenWISP 服务器更新 WireGuard 配置的应用日志可以在 /opt/wireguard-openwisp/vpn_updater.log 中找到。

贡献

请阅读 OpenWISP 贡献指南

如何运行测试

如果您想为 ansible-wireguard-openwisp 贡献代码,您应该在开发环境中运行测试以确保您的更改不会破坏任何东西。

要做到这一点,请按以下步骤操作:

步骤 1: 克隆 ansible-wireguard-openwisp

通过以下命令克隆仓库:

git clone https://github.com/<your_fork>/ansible-wireguard-openwisp.git

步骤 2: 安装 Docker

如果您还没有安装 Docker,则需要安装它(以 Linux Debian/Ubuntu 系统为例):

sudo apt-get install docker.io

步骤 3: 安装 Molecule 和依赖项

pip install molecule[docker,ansible] yamllint ansible-lint docker

步骤 4: 下载 Docker 镜像

docker pull geerlingguy/docker-ubuntu2204-ansible:latest
docker pull geerlingguy/docker-ubuntu2004-ansible:latest
docker pull geerlingguy/docker-debian11-ansible:latest

步骤 5: 运行 Molecule 测试

molecule test -s local

如果没有错误消息,意味着测试成功运行且没有错误。

提示: 使用 molecule test -s local --destroy=never 来加速后续测试运行。

许可证

查看 许可证

支持

查看 OpenWISP 支持渠道

关于项目

Role to install OpenWISP's Wireguard Updater

安装
ansible-galaxy install openwisp.wireguard_openwisp
许可证
bsd-3-clause
下载
505
拥有者
Modular and Programmable Open Source Network Management System for Linux OpenWrt.