搭建 WireGuard 核心分为 “服务端(VPN 节点)” 和 “客户端(设备连接)” 两步,最常用的服务端环境是 Linux(推荐 Ubuntu 20.04+/Debian 11+)(轻量、稳定、部署简单),以下是 完整实操教程,包含自动脚本(新手友好)和手动配置(进阶可控)两种方式,客户端覆盖 Windows/macOS/iOS/Android 主流系统。

一、前置准备

  1. 服务端要求
    • 一台具备公网 IP 的服务器(云服务器如阿里云、腾讯云、Vultr 等,系统推荐 Ubuntu 20.04 LTS)。
    • 开放端口:默认 UDP 51820(可自定义,需在服务器防火墙 / 安全组放行该端口)。
  2. 客户端要求

二、服务端搭建(新手首选:自动脚本)

用成熟脚本可一键完成配置,避免手动操作出错,推荐 WireGuard Easy 或 wg-easy(可视化管理,支持多用户)。

方式 1:wg-easy(Docker 部署,可视化界面)

1. 服务器安装 Docker(已安装可跳过)

# Ubuntu/Debian 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER  # 普通用户免 sudo 使用 Docker
newgrp docker  # 生效权限

2. 一键启动 wg-easy 服务端

docker run -d \
  --name=wg-easy \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  -e WG_HOST=你的服务器公网IP \  # 必须替换为你的服务器公网IP
  -e WG_PORT=51820 \  # 端口(需在防火墙放行)
  -e WG_PASSWORD=你的管理密码 \  # 登录可视化界面的密码(自定义)
  -p 51820:51820/udp \
  -p 51821:51821/tcp \  # 可视化界面端口(默认 51821)
  -v ~/.wg-easy:/etc/wireguard \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --sysctl="net.ipv4.ip_forward=1" \
  --restart unless-stopped \
  weejewel/wg-easy

3. 访问可视化管理界面

  • 浏览器打开:http://服务器公网IP:51821
  • 输入步骤 2 设定的密码登录,即可:
    • 点击 Add Client 创建客户端配置(自动生成 .conf 文件)。
    • 一键下载客户端配置文件,或生成二维码(手机客户端可扫码导入)。
    • 管理客户端(启用 / 禁用、删除、查看流量)。

方式 2:手动配置(进阶,无 Docker 依赖)

适合不想用 Docker 的场景,步骤清晰可控:

1. 服务器安装 WireGuard

# Ubuntu/Debian
sudo apt update && sudo apt install -y wireguard

# CentOS/RHEL
sudo dnf install -y epel-release
sudo dnf install -y wireguard-tools

2. 生成服务端密钥对

# 生成私钥(保存到 /etc/wireguard/privatekey)
wg genkey | sudo tee /etc/wireguard/privatekey > /dev/null
# 生成公钥(从私钥推导)
sudo cat /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey > /dev/null
# 限制密钥文件权限(安全要求)
sudo chmod 600 /etc/wireguard/privatekey /etc/wireguard/publickey

3. 创建服务端配置文件(/etc/wireguard/wg0.conf)

sudo nano /etc/wireguard/wg0.conf

粘贴以下内容(替换括号中的参数):

[Interface]
PrivateKey = 服务端私钥  # 执行 sudo cat /etc/wireguard/privatekey 获取
Address = 10.0.0.1/24  # VPN 内网网段(自定义,如 192.168.3.1/24)
ListenPort = 51820  # 监听端口(需防火墙放行 UDP 51820)
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# 后续添加客户端时,在此处追加 [Peer] 配置(见步骤 6)
  • 说明:eth0 是服务器的外网网卡名,若不确定,执行 ip addr 查看(通常是 eth0 或 ens33)。

4. 启用 IP 转发(让 VPN 流量正常转发)

# 临时生效(重启服务器后失效)
sudo sysctl -w net.ipv4.ip_forward=1
# 永久生效(编辑配置文件)
sudo nano /etc/sysctl.conf

找到 net.ipv4.ip_forward = 0,改为 net.ipv4.ip_forward = 1,保存后执行:

sudo sysctl -p  # 生效配置

5. 启动 WireGuard 服务端

# 启动 wg0 接口(配置文件名为 wg0,对应命令中的 wg-quick up wg0)
sudo wg-quick up wg0
# 设置开机自启
sudo systemctl enable wg-quick@wg0
# 查看运行状态
sudo wg  # 显示服务端信息和已连接客户端
sudo systemctl status wg-quick@wg0  # 查看服务状态

三、客户端配置(所有设备通用逻辑)

客户端需生成自己的密钥对,并将 “客户端公钥” 添加到服务端,再导入配置文件连接。

步骤 1:生成客户端密钥对(以 Windows 为例,其他系统类似)

方式 A:Windows/macOS 客户端生成

  1. 安装 WireGuard 客户端(官网下载)。
  2. 打开客户端,点击 “添加隧道” → “空白隧道”,自动生成密钥对(私钥、公钥会显示在配置文件中)。

方式 B:Linux 客户端生成(命令行)

wg genkey | tee privatekey > /dev/null
cat privatekey | wg pubkey | tee publickey > /dev/null

步骤 2:服务端添加客户端(手动配置时需执行)

如果用 wg-easy 自动脚本,这一步会自动完成;如果是手动配置,需手动添加:

  1. 编辑服务端配置文件:bashsudo nano /etc/wireguard/wg0.conf
  2. 在文件末尾追加客户端配置(每个客户端一个 [Peer] 块):ini[Peer] PublicKey = 客户端公钥 # 客户端生成的公钥(复制过来) AllowedIPs = 10.0.0.2/32 # 给该客户端分配的 VPN 内网 IP(需在服务端网段内,且唯一,如 10.0.0.3/32、10.0.0.4/32) PersistentKeepalive = 25 # 保持连接(防止 NAT 超时断开,建议添加)
  3. 重启服务端生效:sudo wg-quick down wg0 && sudo wg-quick up wg0

步骤 3:客户端导入配置文件

客户端配置文件格式如下(可直接复制修改,或从 wg-easy 下载):

[Interface]
PrivateKey = 客户端私钥  # 客户端自己的私钥
Address = 10.0.0.2/32  # 与服务端 [Peer] 中 AllowedIPs 一致
DNS = 8.8.8.8  # DNS 服务器(可选,推荐谷歌 DNS 或 223.5.5.5)

[Peer]
PublicKey = 服务端公钥  # 服务端的公钥(sudo cat /etc/wireguard/publickey 获取)
Endpoint = 服务器公网IP:51820  # 服务端 IP + 端口(必须正确)
AllowedIPs = 0.0.0.0/0, ::/0  # 0.0.0.0/0 表示所有流量走 VPN;若只让特定网段走 VPN,可改为目标网段(如 192.168.1.0/24)
PersistentKeepalive = 25  # 保持连接

不同客户端导入方式:

  • Windows/macOS:打开客户端 → 点击 “添加隧道” → “导入隧道文件” → 选择 .conf 文件 → 点击 “激活” 即可连接。
  • iOS/Android:打开客户端 → 扫描 wg-easy 生成的二维码(或手动输入配置) → 启用隧道。

四、连接测试与问题排查

1. 测试是否连接成功

  • 客户端激活隧道后,访问 ip138.com,若显示 服务器公网 IP,则连接成功。
  • 服务端执行 sudo wg,查看 peer 列表是否有客户端的公钥,且 latest handshake 显示最近时间(说明连接正常)。

2. 常见问题排查

  • 无法连接
    1. 服务器防火墙 / 安全组是否放行 UDP 51820 端口(重点!)。
    2. 服务端 Endpoint 配置是否正确(公网 IP + 端口)。
    3. 服务端 IP 转发是否启用(sudo sysctl net.ipv4.ip_forward 应返回 1)。
  • 能连接但无法上网
    1. 服务端 wg0.conf 中的 PostUp 规则是否正确(网卡名是否为 eth0)。
    2. 客户端 AllowedIPs 是否设为 0.0.0.0/0(所有流量走 VPN)。
    3. 检查 DNS 配置(客户端 DNS 改为 8.8.8.8 重试)。
  • 连接不稳定
    1. 客户端添加 PersistentKeepalive = 25(保持 NAT 会话)。
    2. 更换服务器端口(如 51821),避免端口被屏蔽。

五、优化建议

  1. 自定义端口:将默认 51820 改为其他端口(如 12345),降低被检测风险。
  2. 限制客户端数量:手动配置时,每个客户端分配唯一的 AllowedIPs,避免冲突。
  3. 定期更换密钥:执行 wg genkey 重新生成密钥对,更新服务端和客户端配置。
  4. 开启 BBR 加速(服务器):提升 VPN 连接速度(适合云服务器):core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf sudo sysctl -p

通过以上步骤,即可完成 WireGuard 搭建,客户端连接后可实现加密上网、远程访问内网等功能。如果是新手,优先选择 wg-easy 脚本,可视化操作更简单;如果需要更灵活的配置,可选择手动部署。

若遇到具体报错(如 Docker 启动失败、端口放行问题),可以告诉我你的服务器系统、公网 IP 类型(IPv4/IPv6),我会帮你针对性排查!