1、docker 安装 wg-gen-web
docker-compose.yaml
version: '3.6'
services:
wg-gen-web:
image: vx3r/wg-gen-web:latest
container_name: wg-gen-web
restart: always
expose:
- "8080/tcp"
ports:
- 80:8080
environment:
- WG_CONF_DIR=/data
- WG_INTERFACE_NAME=wg0.conf
- OAUTH2_PROVIDER_NAME=fake
- WG_STATS_API=http://<API_LISTEN_IP>:8182
volumes:
- /etc/wireguard:/data
network_mode: bridge
wg-json-api:
image: james/wg-api:latest
container_name: wg-json-api
restart: always
cap_add:
- NET_ADMIN
network_mode: "host"
command: wg-api --device wg0 --listen <API_LISTEN_IP>:8182
这里还用到了另外一个项目 wg-api,该项目提供了一个 JSON-RPC 接口,用来暴露 WireGuard 的网络状态信息。其中 <API_LISTEN_IP> 可以直接替换成 docker0 的 IP。
查看 docker0 的 IP,ip addr

即实际 docker-compose.yaml 如下:
version: '3.6'
services:
wg-gen-web:
image: vx3r/wg-gen-web:latest
container_name: wg-gen-web
restart: always
expose:
- "8080/tcp"
ports:
- 8080:8080
environment:
- WG_CONF_DIR=/data
- WG_INTERFACE_NAME=wg0.conf
- OAUTH2_PROVIDER_NAME=fake # 此处表示 web 端不开启账号密码验证
#
- WG_STATS_API=http://172.17.0.1:8182
volumes:
- /etc/wireguard:/data
network_mode: bridge
wg-json-api:
image: james/wg-api:latest
container_name: wg-json-api
restart: always
cap_add:
- NET_ADMIN
network_mode: "host"
command: wg-api --device wg0 --listen 172.17.0.1:8182
执行以下命令运行 wg-gen-web:
docker-compose up -d

注意:如果 wg 没有启动可能
wg-api安装不成功,此时 先执行 启动systemctl start wg-quick@wg0再安装 wg-gen-web
2、配置 SERVER 端
在浏览器中输入 URL <hostIP> 打开图形管理界面,点击 “SERVER” 开始填写服务端和客户端的配置信息:

填写好配置信息后,直接点击 UPDATE SERVER CONFIGURATION 保存,同时会生成配置文件 wg0.conf:
使用命令:cat /etc/wireguard/wg0.conf 查看配置

3、添加 client 配置
接下来点击 CLIENTS,然后点击 ADD NEW CLIENT 开始新增客户端配置:


点击 SUBMIT,就会在 /etc/wireguard 目录下生成客户端的 json 配置文件:

如果勾选了 Enable client after creation,还会将 peer 的配置加入 wg0.conf:

最后直接启动 wg-quick 服务就行了:
systemctl start wg-quick@wg0
如果你之前已经启动过该服务,现在只需要重启就行了:
systemctl restart wg-quick@wg0
4、配置 在不中断活跃连接的情况下重新加载配置文件
重启之后 WireGuard 会断开重连,体验不太好。
事实上 WireGuard 可以做到在不中断活跃连接的情况下重新加载配置文件,命令如下:
wg syncconf wg0 <(wg-quick strip wg0)
我们可以将这个命令作为 systemd 服务的 reload 命令:
# /usr/lib/systemd/system/wg-quick@.service
[Unit]
Description=WireGuard via wg-quick(8) for %I
After=network-online.target nss-lookup.target
Wants=network-online.target nss-lookup.target
PartOf=wg-quick.target
Documentation=man:wg-quick(8)
Documentation=man:wg(8)
Documentation=https://www.wireguard.com/
Documentation=https://www.wireguard.com/quickstart/
Documentation=https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
Documentation=https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/wg-quick up %i
ExecStop=/usr/bin/wg-quick down %i
ExecReload=/bin/bash -c 'exec /usr/bin/wg syncconf %i <(exec /usr/bin/wg-quick strip %i)'
Environment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity
[Install]
WantedBy=multi-user.target
后面再更新配置文件时,直接 reload 就行了:
systemctl reload wg-quick@wg0
5、配置 更新 配置后 自动 reload
每次更新配置后都要手动 reload 还是很麻烦的,我们可以通过 systemd 来监听配置文件的实时变化,一但配置文件有所改动,就立即触发 reload。
方法也很简单,先创建一个 wg-gen-web.service 用来 reload:
# /etc/systemd/system/wg-gen-web.service
[Unit]
Description=Restart WireGuard
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl reload wg-quick@wg0.service
[Install]
WantedBy=multi-user.target
然后再创建一个同名的 wg-gen-web.path 用来监听文件变化:
# /etc/systemd/system/wg-gen-web.path
[Unit]
Description=Watch /etc/wireguard for changes
[Path]
PathModified=/etc/wireguard
[Install]
WantedBy=multi-user.target
后面如果再到 Web 页面上更新配置信息,会立即触发 reload,不需要再自己手动 reload 了。
参考教程:
https://icloudnative.io/posts/configure-wireguard-using-wg-gen-web/
https://github.com/vx3r/wg-gen-web
最后编辑:admin 更新时间:2023-02-27 11:56