ByteNoteByteNote

字节笔记本

2026年7月20日

用 wg-easy + Docker 部署 WireGuard VPN:从服务端到多平台客户端

API中转
¥120

用 wg-easy + Docker 部署 WireGuard VPN:从服务端到多平台客户端

WireGuard 是一种现代的 VPN 协议,代码量少、性能高、配置简单。wg-easy 是一个带 Web 管理界面的 WireGuard Docker 镜像,几行配置就能搭建好 VPN 服务。

服务端部署

docker-compose.yml

yaml
version: '3'
services:
  wg-easy:
    image: weejewel/wg-easy
    container_name: wg-easy
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - WG_HOST=your_server_public_ip
      - WG_PASSWORD_HASH=your_password_hash
      - WG_DEFAULT_ADDRESS=10.10.10.x
      - WG_DEFAULT_DNS=114.114.114.114
      - WG_ALLOWED_IPS=10.10.10.0/24
      - WG_PERSISTENT_KEEPALIVE=25
    ports:
      - "51820:51820/udp"   # VPN 流量
      - "51821:51821/tcp"   # Web 管理界面
    restart: unless-stopped
    volumes:
      - ./config:/etc/wireguard
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1

关键参数说明

参数说明示例
WG_HOST服务器公网 IP 或域名43.139.113.195
WG_DEFAULT_ADDRESS客户端 IP 分配范围10.10.10.x
WG_DEFAULT_DNS推送的 DNS 服务器114.114.114.1148.8.8.8
WG_ALLOWED_IPSVPN 路由的 IP 范围10.10.10.0/24 表示仅 VPN 内网
WG_PERSISTENT_KEEPALIVE保活间隔(秒)25(NAT 穿透需要)

WG_ALLOWED_IPS 设为 0.0.0.0/0 则所有流量走 VPN(全局代理),设为 10.10.10.0/24 则仅 VPN 内部通信走隧道。

密码设置

推荐用 bcrypt hash 设置管理密码,而不是明文:

bash
# 生成密码 hash
docker run -it ghcr.io/wg-easy/wg-easy wgpw 'your-password'
# 输出类似:$2b$12$xxxxx...

# 填入配置
- WG_PASSWORD_HASH=$2b$12$xxxxx...

启动服务

bash
mkdir -p ~/wireguard/config
cd ~/wireguard
# 写入上面的 docker-compose.yml
docker-compose up -d

启动后访问 http://your_server_ip:51821 打开 Web 管理界面。

防火墙放行

bash
# Ubuntu/Debian
ufw allow 51820/udp
ufw allow 51821/tcp

# CentOS/RHEL
firewall-cmd --permanent --add-port=51820/udp
firewall-cmd --permanent --add-port=51821/tcp
firewall-cmd --reload

如果用的是云服务器,还需要在安全组/防火墙规则中放行这两个端口。

客户端配置

在 Web 管理界面点击「New Client」创建客户端,然后下载配置文件或扫描二维码。

Mac

bash
# 安装 WireGuard
brew install wireguard-tools

# 导入配置文件(从 Web 界面下载的 .conf 文件)
cp client.conf /usr/local/etc/wireguard/wg0.conf

# 启动连接
sudo wg-quick up wg0

# 查看状态
sudo wg show

# 断开连接
sudo wg-quick down wg0

也可以直接从 App Store 安装 WireGuard GUI 客户端,导入配置文件即可。

Mac 自动重连

用 LaunchDaemon 实现 WireGuard 开机自动连接:

bash
sudo tee /Library/LaunchDaemons/com.wireguard.wg0.plist << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.wireguard.wg0</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/wg-quick</string>
        <string>up</string>
        <string>wg0</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>
EOF

sudo chown root:wheel /Library/LaunchDaemons/com.wireguard.wg0.plist
sudo chmod 644 /Library/LaunchDaemons/com.wireguard.wg0.plist
sudo launchctl load /Library/LaunchDaemons/com.wireguard.wg0.plist

Linux

bash
# Ubuntu/Debian
apt install wireguard resolvconf

# CentOS/RHEL
yum install epel-release
yum install wireguard-tools

# 导入配置
cp client.conf /etc/wireguard/wg0.conf

# 启动
wg-quick up wg0

# 开机自启
systemctl enable wg-quick@wg0

# 查看日志
journalctl -u wg-quick@wg0 -f

Windows

  1. wireguard.com 下载安装包
  2. 打开 WireGuard 应用
  3. 点击「Import tunnel(s) from file」选择 .conf 文件
  4. 点击「Activate」连接

iOS / Android

  1. 在 App Store / Google Play 搜索「WireGuard」安装
  2. 打开应用,通过摄像头扫描 Web 界面上的二维码
  3. 或通过 AirDrop / 文件传输导入 .conf 文件
  4. 点击连接

运维与故障排查

查看连接状态

bash
# 服务端
docker exec wg-easy wg show

# 或在宿主机
sudo wg show

输出会显示每个客户端的公钥、IP 地址、最近握手时间、收发字节数。

客户端无法连接检查清单

  1. 服务器端口是否放行:确认 51820/udp 在云平台安全组和系统防火墙都已放行
  2. 服务器 IP 是否正确WG_HOST 必须是服务器的公网 IP
  3. 配置文件是否匹配:客户端的 Endpoint 地址和端口要正确
  4. NAT 穿透:如果客户端在 NAT 后面,确保 WG_PERSISTENT_KEEPALIVE=25 已设置
  5. Docker 容器是否正常运行docker ps 确认容器状态

常用运维命令

bash
# 重启服务
docker-compose restart

# 查看日志
docker-compose logs -f

# 更新镜像
docker-compose pull
docker-compose up -d

安全建议

  1. 设置管理密码:不要裸奔 51821 端口的 Web 界面
  2. 定期轮换密钥:WireGuard 的密钥对可以随时重新生成
  3. 限制路由范围:如果只需要访问内网,WG_ALLOWED_IPS 不要设成 0.0.0.0/0
  4. 关闭不必要的端口:Web 管理界面可以只在需要时开放
  5. 备份配置./config 目录包含所有密钥和配置,定期备份

总结

wg-easy 把 WireGuard 的部署简化到了极致:一个 docker-compose 文件、两个端口放行、客户端扫码导入就能用。适合个人或小团队搭建私有 VPN 网络,用于安全访问远程服务、跨区域组网等场景。

分享: