WireGuard部署
官网教程
https://www.wireguard.com/quickstart/
案例
WireGuard 实现三台位于不同地区局域网内的电脑与一台公网服务器打通
离线下载
apt download wireguard
离线安装
dpkg -i wireguard_1.0.20210914-3_all.deb
安装 WireGuard
apt install wireguard
生成密钥
cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
查看内容
cat server_privatekey
cat server_publickey
查看默认出口接口:
ip route show default
创建 /etc/wireguard/wg0.conf
vim /etc/wireguard/wg0.conf
编写 /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <服务器私钥>
Address = 10.8.0.1/24
ListenPort = 51820
# DNS = 10.0.0.1
# 配置 NAT,让客户端的流量可以通过服务器转发到互联网
# 注意:将 eth0 修改为你实际的主网卡名称
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 A
[Peer]
PublicKey = <客户端A公钥>
AllowedIPs = 10.8.0.2/32, 192.168.10.0/24
# Peer B
[Peer]
PublicKey = <客户端B公钥>
AllowedIPs = 10.8.0.3/32, 192.168.20.0/24
# Peer C
[Peer]
PublicKey = <客户端C公钥>
AllowedIPs = 10.8.0.4/32, 192.168.30.0/24
讲解下规则
iptables -A FORWARD -i wg0 -j ACCEPT; # 允许从wg0进入的流量转发(入向)
iptables -A FORWARD -o wg0 -j ACCEPT; # 允许转发到wg0的流量(出向)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; # NAT伪装
#用%i动态指代当前 WireGuard 接口(比如 wg0、wg1),是 “适配性写法”接口指定方式
iptables -A FORWARD -i %i -j ACCEPT; # 入向转发(动态接口)允许从wg0进入的流量转发(入向)
iptables -A FORWARD -o %i -j ACCEPT; # 出向转发(动态接口)允许转发到wg0的流量(出向)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; # NAT伪装
启动服务 & 开机自启
wg-quick up wg0
systemctl enable wg-quick@wg0
开启 IP 转发(/etc/sysctl.conf)
vim /etc/sysctl.conf
#写入
net.ipv4.ip_forward=1
#执行
sysctl -p
#检查是否开启,若输出 net.ipv4.ip_forward = 1,则表示配置成功。
sysctl net.ipv4.ip_forward
永久开启转发
vim /etc/sysctl.d/99-ipforward.conf
#写入
net.ipv4.ip_forward=1
#配置
sysctl --system
#检查当前值
cat /proc/sys/net/ipv4/ip_forward
重启服务
wg-quick down wg0 && wg-quick up wg0
配置客户端
生成密钥
wg genkey | tee clientA_private | wg pubkey > clientA_public
户端 A配置
[Interface]
PrivateKey = <客户端A私钥>
Address = 10.8.0.2/24
DNS = 8.8.8.8
[Peer]
PublicKey = <服务器公钥>
Endpoint = your.public.server:51820
AllowedIPs = 10.8.0.0/24, 192.168.10.0/24, 192.168.20.0/24, 192.168.30.0/24
PersistentKeepalive = 25
启动客户端
wg-quick up clientA
整个局域网互通 → 需在客户端所在路由器部署 WireGuard(推荐 OpenWRT)
- 将 WireGuard 隧道接口加入 LAN 防火墙区域;
- 添加静态路由:
192.168.20.0/24 via 10.8.0.1
让对方局域网设备能回访 → 配置 SNAT
在公网服务器上,添加 iptables 规则,使去往某局域网的流量伪装成来自该局域网的网关:
# 举例:让 A 能访问 B 的局域网,且 B 的设备能回包
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -d 192.168.20.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -d 192.168.10.0/24 -j MASQUERADE
# 同理添加 C 的规则...
防火墙配置
ufw allow 51820/udp
# 或 iptables
iptables -I INPUT -p udp --dport 51820 -j ACCEPT
windows部署
开机服务启动
配置文件名字:Q-01
开启服务(加密配置)
"C:\Program Files\WireGuard\wireguard.exe" /installtunnelservice "C:\Program Files\WireGuard\Data\Configurations\Q-01.conf.dpapi"
开启服务(明文配置)
"C:\Program Files\WireGuard\wireguard.exe" /installtunnelservice "C:\Program Files\WireGuard\Q-01.conf"
卸载服务
"C:\Program Files\WireGuard\wireguard.exe" /uninstalltunnelservice Q-01
预共享密钥
WireGuard的PresharedKey是通过对称加密算法生成的32字节随机密钥
wg genpsk > peer1_psk # 生成peer1的预共享密钥
wg genpsk > peer2_psk # 生成peer2的预共享密钥
客户端、服务端配置
[Peer]
PublicKey = <服务端公钥>
PresharedKey = <共享密钥> # 必须与服务端一致
UDP端口测试
A机器发送
echo "hello" | nc -u 192.168.8.11 7474
B机器监听7474端口
nc -u -l -p 7474