概述
你用过 OpenVPN 就知道——启动慢、占用大、配置复杂。WireGuard 完全颠覆了这些痛点。
它只有 4000 行代码,内核级实现,启动不到 1 秒,内存占用仅 4MB。配合 Docker 部署,整个搭建过程不超过 5 分钟。
不管你在咖啡馆连了公共 WiFi,还是手机在外面需要访问家里 NAS,WireGuard 都能给你一条加密隧道。
准备工作
你需要这些:
- 一台有公网 IP 的 VPS(1核 1GB 即可,国内或海外都行)
- Docker 和 Docker Compose 已安装
- 知道你的 VPS 公网 IP(可以用
curl ifconfig.me查看)
检查 Docker 是否就绪:
docker --version
docker compose version
看到输出版本号就说明没问题。
步骤一:创建 WireGuard 配置目录
mkdir -p ~/wireguard && cd ~/wireguard
步骤二:一键部署 WireGuard
我们用社区维护的 linuxserver/wireguard 镜像,它自动处理密钥生成,最省心:
cat > docker-compose.yml << 'EOF'
version: "3"
services:
wireguard:
container_name: wireguard
image: lscr.io/linuxserver/wireguard:latest
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- SERVERURL=auto # 自动检测公网IP
- SERVERPORT=51820 # WireGuard 默认端口
- PEERS=2 # 支持2个客户端连接
- PEERDNS=auto
- INTERNAL_SUBNET=10.13.13.0
- ALLOWEDIPS=0.0.0.0/0
ports:
- "51820:51820/udp"
volumes:
- ./config:/config
- /lib/modules:/lib/modules:ro
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
EOF
启动服务:
docker compose up -d
几秒后查看日志确认启动成功:
docker compose logs wireguard
看到 done 或 Server started 字样就对了。
步骤三:获取客户端配置
WireGuard 会自动生成每个客户端的密钥和配置文件。查看配置:
ls ~/wireguard/config/peers/
cat ~/wireguard/config/peers/peer1/peer.conf
你会看到类似这样的内容:
[Interface]
PrivateKey = 你的客户端私钥
Address = 10.13.13.2/24
DNS = 223.5.5.5
[Peer]
PublicKey = 服务端公钥
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Endpoint = 你的VPS公网IP:51820
把这个配置保存为 .conf 文件,就是客户端的完整配置。
步骤四:客户端连接
macOS / Windows
下载安装 WireGuard 官方客户端,导入刚才的 .conf 文件,点击"连接"。
Android / iOS
安装 WireGuard 官方 App,扫描配置或手动粘贴。
Linux
sudo apt install wireguard
# 把 peer.conf 放到 /etc/wireguard/
sudo wg-quick up peer1
连接成功后,你的设备就加入了 VPS 所在网络。打开 ip.sb 查看,显示的 IP 应该就是你的 VPS 地址。
步骤五:防火墙配置
如果你的 VPS 有防火墙,需要放行 UDP 51820:
UFW(Ubuntu 默认):
sudo ufw allow 51820/udp
sudo ufw reload
Firewalld(CentOS/RHEL):
sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --reload
宝塔面板用户:在控制面板的"安全"页面,添加入站规则 51820/UDP。
验证搭建是否成功
# 1. 检查容器是否在运行
docker ps | grep wireguard
# 2. 检查服务端接口是否激活
docker exec wireguard wg
# 3. 在客户端连接后,确认路由生效
# Linux/macOS:
wg
# Windows: 打开 WireGuard 客户端,能看到已连接
# 4. 测试外网出口 IP
curl -4 ifconfig.me
# 返回的应该就是你的 VPS 公网 IP
wg 命令输出中如果能看到 peer 的 Latest handshake 时间戳,说明连接稳定。
常见问题
Q1: 客户端连上了但上不了网?
检查 VPS 的 IP 转发是否开启:
# 临时开启
sudo sysctl -w net.ipv4.ip_forward=1
# 永久生效
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
容器重启后会自动应用,但如果宿主机本身没开启转发,客户端就没法通过 VPS 上网。
Q2: 怎么添加第 3 个客户端?
修改 docker-compose.yml 中的 PEERS 环境变量,改为你需要的数量:
- PEERS=3
然后重启:
docker compose up -d
新的客户端配置文件会自动生成在 config/peers/peer3/。
Q3: 国内 VPS 能正常用吗?
WireGuard 协议本身不受干扰。但如果你用 WireGuard 绕过 GFW 访问境外网站,依然会被检测。建议在海外 VPS 上搭建 WireGuard,作为内网穿透工具(访问家里 NAS、远程办公等场景使用)。
Q4: 如何禁用某个客户端?
不用删除,用 wg set 命令禁用即可:
# 查看当前所有 peer 的公钥
docker exec wireguard wg
# 禁用某个 peer(替换为你实际的公钥)
docker exec wireguard wg set wireguard peer <公钥> remove
要重新启用,需要重新生成配置并导入。
Q5: 传输速度怎么样?
实测数据:
| 场景 | 速度 |
|---|---|
| 本地局域网 | 接近有线上限(百兆/千兆) |
| 同地域 VPS 互传 | 50-100 Mbps |
| 跨大洲(国内→海外) | 2-10 Mbps(取决于线路) |
WireGuard 的性能优势在延迟上更明显:比 OpenVPN 低 30-50%,非常适合实时通信场景。
总结
WireGuard 是目前最简单、最快、最轻量的 VPN 方案。Docker 一键部署,配置文件自动生成,客户端导入即用。
记住三个要点:
- 容器启动后自动分配密钥和配置,无需手动操作
- 防火墙记得放行 UDP 51820 端口
- 客户端连不上?先检查宿主机 IP 转发是否开启
装好后连上试试看——公共 WiFi 再也不敢随便连了。