自建 WireGuard VPN:5分钟搭建专属高速隧道

概述

你用过 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

看到 doneServer 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 再也不敢随便连了。

这篇文章对你有帮助吗?