跳转至

WireGuard — 极简高性能 VPN 隧道协议

安装与配置

# === Ubuntu/Debian 安装 ===
sudo apt update && sudo apt install -y wireguard     # 安装 WireGuard(内核 5.6+ 已内置模块)

# === CentOS/RHEL 安装 ===
sudo yum install -y epel-release elrepo-release      # 添加 EPEL 和 ELRepo 仓库
sudo yum install -y kmod-wireguard wireguard-tools    # 安装内核模块和管理工具

# === macOS 安装 ===
brew install wireguard-tools                          # 安装命令行工具

# === 验证安装 ===
wg --version                                          # 查看版本(最新 wireguard-tools 1.0.20260223)
sudo modprobe wireguard                               # 加载内核模块(5.6 以下内核需要)

核心用法

# --- 第1步:生成服务端密钥对 ---
wg genkey | sudo tee /etc/wireguard/server_private.key  # 生成私钥并保存
sudo chmod 600 /etc/wireguard/server_private.key         # 设置私钥权限(仅 root 可读)
sudo cat /etc/wireguard/server_private.key | wg pubkey | \
  sudo tee /etc/wireguard/server_public.key              # 从私钥导出公钥

# --- 第2步:创建服务端配置 /etc/wireguard/wg0.conf ---
sudo cat > /etc/wireguard/wg0.conf << 'EOF'
[Interface]
PrivateKey = <服务端私钥>                     # 填入服务端私钥
Address = 10.0.0.1/24                         # VPN 内网地址(服务端)
ListenPort = 51820                            # 监听端口(默认 51820)
SaveConfig = true                             # 退出时自动保存配置
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE    # 启动后开启 NAT
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE  # 关闭前清除 NAT

[Peer]
PublicKey = <客户端公钥>                      # 填入客户端的公钥
AllowedIPs = 10.0.0.2/32                      # 客户端的 VPN 内网 IP
EOF

# --- 第3步:启动 VPN 隧道 ---
sudo wg-quick up wg0                          # 启动 wg0 接口
sudo systemctl enable wg-quick@wg0            # 设置开机自启

# --- 第4步:开启 IP 转发(服务端必须)---
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf  # 写入配置
sudo sysctl -p                                # 立即生效

# --- 查看 VPN 状态 ---
sudo wg show                                  # 显示所有 WireGuard 接口状态
sudo wg show wg0                              # 显示 wg0 接口的详细信息

参数详解

参数位置说明
PrivateKey[Interface]本机的私钥
Address[Interface]本机的 VPN 内网地址(CIDR 格式)
ListenPort[Interface]服务端监听的 UDP 端口(默认 51820)
DNS[Interface]客户端使用的 DNS 服务器
PostUp/PreDown[Interface]接口启动/关闭时执行的命令
PublicKey[Peer]对端的公钥
AllowedIPs[Peer]允许通过隧道的 IP 范围
Endpoint[Peer]对端的公网 IP:端口(客户端填服务端地址)
PersistentKeepalive[Peer]NAT 保活间隔(秒),建议 25

实战案例

# === 完整场景:搭建一个 WireGuard VPN(服务端+客户端)===

# ===== 服务端操作(公网服务器)=====
sudo apt install -y wireguard                  # 安装 WireGuard

# 生成服务端密钥
wg genkey | sudo tee /etc/wireguard/server.key # 生成私钥
sudo cat /etc/wireguard/server.key | wg pubkey | \
  sudo tee /etc/wireguard/server.pub           # 导出公钥

# 开启 IP 转发
sudo sysctl -w net.ipv4.ip_forward=1           # 临时开启

# 创建配置文件(先不加 Peer,后面动态添加)
sudo bash -c 'cat > /etc/wireguard/wg0.conf << EOF
[Interface]
PrivateKey = $(cat /etc/wireguard/server.key)
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
EOF'

sudo wg-quick up wg0                          # 启动 VPN

# ===== 客户端操作(笔记本/手机)=====
sudo apt install -y wireguard                  # 安装

# 生成客户端密钥
wg genkey | sudo tee /etc/wireguard/client.key
sudo cat /etc/wireguard/client.key | wg pubkey | \
  sudo tee /etc/wireguard/client.pub           # 导出公钥

# 创建客户端配置
sudo bash -c 'cat > /etc/wireguard/wg0.conf << EOF
[Interface]
PrivateKey = $(cat /etc/wireguard/client.key)
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <服务端公钥>
AllowedIPs = 0.0.0.0/0
Endpoint = <服务端公网IP>:51820
PersistentKeepalive = 25
EOF'

# ===== 回到服务端:添加客户端为 Peer =====
sudo wg set wg0 peer $(cat /path/to/client.pub) \
  allowed-ips 10.0.0.2/32                     # 动态添加客户端

# ===== 客户端连接 =====
sudo wg-quick up wg0                          # 启动连接
sudo wg show                                  # 验证连接状态

常见报错与解决

报错原因解决方案
RTNETLINK: Operation not supported内核未加载 WireGuard 模块sudo modprobe wireguard 或升级内核到 5.6+
Unable to access interface权限不足使用 sudo 运行
Peer has no endpoint客户端配置缺少 Endpoint添加服务端的公网 IP:端口
Key is not the correct length密钥格式错误重新用 wg genkey 生成
Address already in usewg0 接口已存在wg-quick down wg0 再重新启动

速查表

操作命令
生成私钥wg genkey > private.key
导出公钥cat private.key \| wg pubkey > public.key
启动隧道sudo wg-quick up wg0
关闭隧道sudo wg-quick down wg0
查看状态sudo wg show
开机自启sudo systemctl enable wg-quick@wg0
添加 Peersudo wg set wg0 peer <pubkey> allowed-ips <ip>
删除 Peersudo wg set wg0 peer <pubkey> remove
生成预共享密钥wg genpsk