Skip to content

WireGuard 快速入门

WireGuard 是一种高性能、低延迟的现代 VPN 协议,以其极简的配置和内核级集成著称。本教程将指导你完成一个典型的星型拓扑组网:一台 Linux 服务端 + 一台 Linux 客户端 + 一台 Windows 客户端。

📌 网络规划示例

角色公网地址内网 IP备注
服务端203.0.113.10:5182010.0.0.1/24中转与汇聚节点
Linux 客户端NAT / 动态IP10.0.0.2/32远程服务器/设备
Windows 客户端NAT / 动态IP10.0.0.3/32本地办公/管理终端

🖥️ 一、Linux 服务端部署

1. 安装 WireGuard

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

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

2. 生成密钥对

bash
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
sudo chmod 600 /etc/wireguard/private.key

⚠️ 注意:请妥善记录并保管生成的私钥和公钥,后续配置需要用到。私钥泄露等同于隧道被完全接管。

3. 编写服务端配置

bash
sudo nano /etc/wireguard/wg0.conf
ini
[Interface]
PrivateKey = <服务端私钥>
Address = 10.0.0.1/24
ListenPort = 51820

# 如需为客户端提供 NAT 上网,取消下面两行注释(假设出口网卡为 eth0)
# PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Linux 客户端 Peer
[Peer]
PublicKey = <Linux客户端公钥>
AllowedIPs = 10.0.0.2/32

# Windows 客户端 Peer
[Peer]
PublicKey = <Windows客户端公钥>
AllowedIPs = 10.0.0.3/32

4. 开启内核转发 & 启动服务

bash
# 永久开启 IP 转发
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 启动并设置开机自启
sudo systemctl enable --now wg-quick@wg0.service

5. 放行防火墙端口

bash
# ufw
sudo ufw allow 51820/udp

# firewalld
sudo firewall-cmd --permanent --add-port=51820/udp && sudo firewall-cmd --reload

⚠️ 云服务器用户必读 除了系统防火墙,务必同时在云服务商控制台的安全组中放行 UDP 51820 端口,否则外网无法建立连接。

🐧 二、Linux 客户端部署

1. 安装与生成密钥

与服务端步骤 1、2 完全相同,生成该客户端独立的密钥对。

2. 编写客户端配置

bash
sudo nano /etc/wireguard/wg0.conf
ini
[Interface]
PrivateKey = <Linux客户端私钥>
Address = 10.0.0.2/32
MTU = 1360

[Peer]
PublicKey = <服务端公钥>
Endpoint = 203.0.113.10:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

💡 提示PersistentKeepalive = 25 表示每 25 秒发送一次心跳包,可有效防止 NAT 网关因超时断开隧道映射。建议所有处于 NAT 环境后的客户端都加上此参数。

3. 启动连接

bash
sudo systemctl enable --now wg-quick@wg0.service

4. 验证连通性

bash
sudo wg show          # 确认 latest handshake 时间不为 "never"
ping 10.0.0.1         # 测试与服务端连通
ping 10.0.0.3         # 测试与 Windows 客户端互通(需服务端已开启 IP 转发)

🪟 三、Windows 客户端部署

1. 安装官方客户端

wireguard.com/install 下载 Windows 版安装包并完成安装。

2. 生成密钥

打开 WireGuard GUI → 点击左下角 「添加隧道」 → 选择 「添加空隧道」,软件会自动生成一对密钥。

3. 填写配置

在弹出的编辑窗口中填入以下内容(替换对应密钥):

ini
[Interface]
PrivateKey = <Windows自动生成的私钥>
Address = 10.0.0.3/32
MTU = 1360

[Peer]
PublicKey = <服务端公钥>
Endpoint = 203.0.113.10:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

点击 「保存」

4. 激活隧道

点击 「激活」 按钮,状态指示灯变为绿色即表示连接成功。

5. 验证连通性

打开 CMD 或 PowerShell:

powershell
ping 10.0.0.1    # 测试服务端
ping 10.0.0.2    # 测试 Linux 客户端

🔧 常用运维速查

bash
# 查看隧道实时状态(含流量、握手时间等)
sudo wg show

# 查看服务日志排查问题
journalctl -u wg-quick@wg0 -f

# 修改配置文件后热重载(无需中断现有连接)
sudo wg syncconf wg0 <(wg-quick strip wg0)