搭建 wireguard 中继服务器连通两个没有公网IP的局域网

前置信息

之前两个局域网是靠 zerotier 连接的,但是 zerotier 在国内的网络环境实在是太糟糕了,即使我用了黑科技在国内服务器上搭建两 planet ,依旧是不稳定。

于是放弃 zerotier ,转而使用 wireguard 组建我的工作 VPN。

网络信息如下:

  • 局域网A: 192.168.196.0/22, 做节点的机器A的 IP: 192.168.199.81
  • 局域网B: 192.168.31.0/24, 做节点的机器B的 IP: 192.168.31.5
  • 服务器: x.x.x.x

公私钥信息如下:

  • 机器A: PubKeyA/PrivKeyA
  • 机器B: PubKeyB/PrivKeyB
  • 服务器: PubKeyServ/PrivKeyServ

公私钥生成命令:

1
wg genkey | tee privatekey | wg pubkey > publickey

步骤

1.三台机器都开启转发

1
2
# 添加下面的配置到 /etc/sysctl.conf 后执行 sysctl -p 生效
net.ipv4.ip_forward = 1

2.三台机器都安装 wireguard

3.机器A配置 /etc/wireguard/wg0.conf

1
2
3
4
5
6
7
8
9
10
11
[Interface]
PrivateKey = PrivKeyA
Address = 10.0.1.2/32
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]
PublicKey = PubKeyServ
AllowedIPs = 10.0.1.1/32, 192.168.31.0/24
Endpoint = x.x.x.x:51820
PersistentKeepalive = 25

4.机器B配置 /etc/wireguard/wg0.conf

1
2
3
4
5
6
7
8
9
10
11
[Interface]
PrivateKey = PrivKeyB
Address = 10.0.1.3/32
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]
PublicKey = PubKeyServ
AllowedIPs = 10.0.1.1/32, 192.168.196.0/22
Endpoint = x.x.x.x:51820
PersistentKeepalive = 25

5.服务器配置 /etc/wireguard/wg0.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Interface]
PrivateKey = PrivKeyServ
Address = 10.0.1.1/24
ListenPort = 51820
PostUp = iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE

[Peer]
# HostA
PublicKey = PubKeyA
AllowedIPs = 10.0.1.2/32, 192.168.196.0/22
PersistentKeepalive = 25

[Peer]
# HostB
PublicKey = PubKeyB
AllowedIPs = 10.0.1.3/32, 192.168.31.0/24
PersistentKeepalive = 25

6.局域网A的openwrt路由器上添加静态路由

  • 接口: lan
  • 目的地址: 192.168.31.0/24
  • 路由ip: 192.168.199.81
  • 类型: unicast

7.局域网A的openwrt路由器上添加静态路由

  • 接口: lan
  • 目的地址: 192.168.196.0/22
  • 路由ip: 192.168.31.5
  • 类型: unicast

总结

主要难点就是各个节点的 AllowedIPs 和防火墙规则配置。