openwisp.wireguard_openwisp
ansible-wireguard-openwisp
这是一个 Ansible 角色,用于安装 WireGuard 和 OpenWISP 的管理脚本。一旦正确安装并与 OpenWISP 配置,WireGuard 节点可以通过 OpenWISP 自动管理,无需手动干预。
该角色还可以配置脚本,允许 OpenWISP 管理 通过 WireGuard 的 VXLAN 隧道。
已在 Debian 和 Ubuntu 系统上测试。
注意: 强烈建议在干净的虚拟机或 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 支持渠道。