Wireguard 异地组网

1. 服务端环境配置

开启服务器端内核转发

Copy
sysctl net.ipv4.ip_forward=1
sysctl net.ipv6.conf.all.forwarding=1
sysctl -p

安装 Wireguard 程序

Copy
apt install wireguard

2. 服务器端 Wireguard 接口配置

生成服务端密钥对

Copy
wg genkey | tee /dev/stderr | wg pubkey

在 /etc/wireguard 文件夹下新建文件 ifs0.conf
wireguard 服务监听 10203/udp
组网使用 192.168.3.0/24 私有网段
服务器分配 192.168.3.1/32
客户端分配 192.168.3.2/32
此处 eth0 应替换为实际出口接口名称
Peer 的 AllowedIPs 用于匹配入站流量的 IP 地址，匹配成功时被 wireguard 接管

Copy
[Interface]
PrivateKey = 服务端私钥
Address = 192.168.3.1/32
PostUp = iptables -A FORWARD -i ifs0 -j ACCEPT; iptables -A FORWARD -o ifs0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i ifs0 -j ACCEPT; iptables -D FORWARD -o ifs0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 10203

[Peer]
PublicKey = 客户端公钥
AllowedIPs = 192.168.3.2/32

启动 wireguard 的 ifs0 配置，同时执行 PostUp 中的设定

Copy
wg-quick up ifs0

关闭 wireguard 的 ifs0 配置，同时执行 PostDown 中的设定

Copy
wg-quick down ifs0

3. 客户端配置

安装 Wireguard 程序

Copy
apt install wireguard

生成客户端密钥对

Copy
wg genkey | tee /dev/stderr | wg pubkey

在 /etc/wireguard 文件夹下新建文件 ifc0.conf
该客户端分配先前服务器待处理的 IP 地址 192.168.3.2/32
Peer 终结点填写服务器 wireguard 进程 (假设客户端可以通过 114.51.41.91 访问该服务器)
此时 Peer 的 AllowedIPs 用于匹配出站流量的 IP 地址，匹配成功时将会通过 wireguard 使用隧道访问，实例配置为处理全部 IPv4 流量，当然也可以使用 192.168.3.0/24 来仅处理组网 IPv4 流量

Copy
[Interface]
PrivateKey = 客户端私钥
Address = 192.168.3.2/32

[Peer]
PublicKey = 服务端公钥
AllowedIPs = 0.0.0.0/0
Endpoint = 114.51.41.91:10203

启动 wireguard 的 ifs0 配置，同时执行 PostUp 中的设定

Copy
wg-quick up ifs0

关闭 wireguard 的 ifs0 配置，同时执行 PostDown 中的设定

Copy
wg-quick down ifs0

4.1 多客户端 (服务器抽象为网关)

仅需要在服务器添加多 Peer 匹配即可

Copy
[Interface]
###略###

[Peer]
PublicKey = 客户端192.168.3.2公钥
AllowedIPs = 192.168.3.2/32

[Peer]
PublicKey = 客户端192.168.3.3公钥
AllowedIPs = 192.168.3.3/32

4.2 IPv6 支持 / IPv6 分配