wg-easy 安装
找目录添加 yml 文件 (nano /home/ljw/docker/wg-easy/docker-compose.yml)
# https://github.com/WeeJeWel/wg-easy
services:
wg-easy:
image: weejewel/wg-easy
container_name: wg-easy
restart: unless-stopped
environment:
- WG_HOST=8.134.xx.xx # 自动填入的公网 IP
- PASSWORD=xxxx # 修改为你自己的管理密码
- WG_DEFAULT_DNS=1.1.1.1
- AllowedIPs=0.0.0.0/0
- WG_PERSISTENT_KEEPALIVE=25
ports:
- "51820:51820/udp" # WireGuard VPN 端口
- "51821:51821/tcp" # Web 管理面板端口
volumes:
- .:/etc/wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
启动容器
docker compose up -d # -d 后台运行
# docker compose down # 停止容器
# docker logs -f wg-easy # 查看 wg-easy 日志
发现容器外,服务器无法 ping 通客户端
方法1
network_mode: host # ✅ 使用宿主机网络
方法2 (默认 bridge 网络)
然后在宿主机创建添加路由的脚本:
在 /usr/local/bin/ 下创建一个名为 add-vpn-route.sh 的脚本文件:
sudo nano /usr/local/bin/add-vpn-route.sh脚本内容:
#!/bin/bash # 等待容器启动最多 60 秒 for i in {1..30}; do CONTAINER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' wg-easy 2>/dev/null) if [[ "$CONTAINER_IP" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then break fi sleep 2 done # 如果没获取到 IP,退出并报错 if [[ -z "$CONTAINER_IP" ]]; then echo "Failed to get wg-easy container IP" exit 2 fi # 添加路由(忽略“已存在”的错误) # 这告诉宿主机:“如果你想访问 10.8.0.0/24 网段(VPN 客户端),请发给容器 wg-easy。” sudo ip route add 10.8.0.0/24 via "$CONTAINER_IP" 2>/dev/null || true # 打印确认 echo "Route added to 10.8.0.0/24 via $CONTAINER_IP"
赋予脚本执行权限:
sudo chmod +x /usr/local/bin/add-vpn-route.sh添加到 systemd:
创建一个新的 systemd 服务文件:
sudo nano /etc/systemd/system/add-vpn-route.service在文件中添加以下内容:
[Unit] Description=Add VPN route on startup After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/add-vpn-route.sh RemainAfterExit=true [Install] WantedBy=multi-user.target
启用和启动服务:(启用并启动这个服务,以确保它会在每次启动时运行)
sudo systemctl enable add-vpn-route.service sudo systemctl start add-vpn-route.service检查是否生效:(可以重启系统,看看是否成功添加了路由)
sudo systemctl status add-vpn-route.service ip route show