
搭建 WireGuard 核心分为 “服务端(VPN 节点)” 和 “客户端(设备连接)” 两步,最常用的服务端环境是 Linux(推荐 Ubuntu 20.04+/Debian 11+)(轻量、稳定、部署简单),以下是 完整实操教程,包含自动脚本(新手友好)和手动配置(进阶可控)两种方式,客户端覆盖 Windows/macOS/iOS/Android 主流系统。
一、前置准备
- 服务端要求:
- 一台具备公网 IP 的服务器(云服务器如阿里云、腾讯云、Vultr 等,系统推荐 Ubuntu 20.04 LTS)。
- 开放端口:默认 UDP 51820(可自定义,需在服务器防火墙 / 安全组放行该端口)。
- 客户端要求:
- 设备安装 WireGuard 客户端(官网下载:wireguard.com/install https://github.com/WireGuard)。
二、服务端搭建(新手首选:自动脚本)
用成熟脚本可一键完成配置,避免手动操作出错,推荐 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文件)。 - 一键下载客户端配置文件,或生成二维码(手机客户端可扫码导入)。
- 管理客户端(启用 / 禁用、删除、查看流量)。
- 点击 Add Client 创建客户端配置(自动生成
方式 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 客户端生成
- 安装 WireGuard 客户端(官网下载)。
- 打开客户端,点击 “添加隧道” → “空白隧道”,自动生成密钥对(私钥、公钥会显示在配置文件中)。
方式 B:Linux 客户端生成(命令行)
wg genkey | tee privatekey > /dev/null
cat privatekey | wg pubkey | tee publickey > /dev/null
步骤 2:服务端添加客户端(手动配置时需执行)
如果用 wg-easy 自动脚本,这一步会自动完成;如果是手动配置,需手动添加:
- 编辑服务端配置文件:bash
sudo nano /etc/wireguard/wg0.conf - 在文件末尾追加客户端配置(每个客户端一个 [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 超时断开,建议添加) - 重启服务端生效: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. 常见问题排查
- 无法连接:
- 服务器防火墙 / 安全组是否放行 UDP 51820 端口(重点!)。
- 服务端
Endpoint配置是否正确(公网 IP + 端口)。 - 服务端 IP 转发是否启用(
sudo sysctl net.ipv4.ip_forward应返回 1)。
- 能连接但无法上网:
- 服务端
wg0.conf中的PostUp规则是否正确(网卡名是否为 eth0)。 - 客户端
AllowedIPs是否设为0.0.0.0/0(所有流量走 VPN)。 - 检查 DNS 配置(客户端
DNS改为 8.8.8.8 重试)。
- 服务端
- 连接不稳定:
- 客户端添加
PersistentKeepalive = 25(保持 NAT 会话)。 - 更换服务器端口(如 51821),避免端口被屏蔽。
- 客户端添加
五、优化建议
- 自定义端口:将默认 51820 改为其他端口(如 12345),降低被检测风险。
- 限制客户端数量:手动配置时,每个客户端分配唯一的
AllowedIPs,避免冲突。 - 定期更换密钥:执行
wg genkey重新生成密钥对,更新服务端和客户端配置。 - 开启 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),我会帮你针对性排查!
