![如何配置 WireGuard 客户端与两个不同的服务器交互?](https://linux22.com/image/230456/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%20WireGuard%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%8E%E4%B8%A4%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BA%A4%E4%BA%92%EF%BC%9F.png)
我想要一个无人值守的 WireGuard 客户端与冗余 WireGuard 服务器一起使用。
身体的:
- 我在美国提供商 A 的 VPS 中有一个主数据库服务器。
- 我在欧洲提供商 B 的 VPS 中的从属服务器上运行连续复制。
- 我有一个备份数据库服务器,也作为复制从属服务器运行,位于我家庭办公室的 WiFi LAN 上。
网络:
- 美国的主数据库服务器运行 WireGuard 服务器,版本号为 10.20。20.1.
- 欧洲的从数据库服务器运行 WireGuard 服务器,版本号为 10.20。10.1.
我家庭办公室的备份数据库已成功配置为与主远程 WireGuard 服务器或从属远程 WireGuard 服务器进行交互单独地。
要通过美国连接,我需要家里有人来做:
suda wg-quick down wgEUR; suda wg-quick up wgUSA;
要通过欧洲连接,我需要家里有人来做:
suda wg-quick down wgUSA; suda wg-quick up wgEUR;
然而!!
关键是无论我身在何处,都能够通过 WireGuard 服务器通过 SSH 访问家庭办公计算机;如果其中一个发生故障,另一个仍然可用。
如何在家庭办公室 WireGuard 客户端中配置路由以允许同时从两个远程 WireGuard 服务器的子网访问?
设置
欧洲 (37.xxx.xxx.139:34567): wg0.conf
[Interface]
Address = 10.20.10.1/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERAD
ListenPort = 34567
PrivateKey = MNf4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiVg=
[Peer]
PublicKey = durAZO/EtWQnqwnbadbadbadzDa9+klqUmqCT6VplWc=
AllowedIPs = 10.20.10.16/32
美国 (185.xxx.xxx.36:34567): wg0.conf
[Interface]
Address = 10.20.20.1/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERAD
ListenPort = 34567
PrivateKey = EGdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp2Q=
[Peer]
PublicKey = durAZO/EtWQnbadbadbadMkTzDa9+klqUmqCT6VplWc=
AllowedIPs = 10.20.20.16/32
客户端 wgEUR.conf:
[Interface]
### PrivateKey_of_the_Client
PrivateKey = EBmxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaXlE=
### IP VPN for the Client
Address = 10.20.10.16/24
### DNS Server
DNS = 8.8.8.8, 8.8.4.4
[Peer]
###Public of the WireGuard VPN Server
PublicKey = pTm/tJwOWJ3QRwEcbadbadbadWx/BbCthbFa52M2uVE=
### IP and Port of the WireGuard VPN Server
##### Syntax: IP_of_the_server:Port
Endpoint = 37.xxx.xxx.139:34567
### Allow all traffic
AllowedIPs = 0.0.0.0/0
客户端 wgUSA.conf:
[Interface]
### PrivateKey_of_the_Client
PrivateKey = EBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXlE=
### IP VPN for the Client
Address = 10.20.20.16/24
### DNS Server
DNS = 8.8.8.8, 8.8.4.4
[Peer]
###Public of the WireGuard VPN Server
PublicKey = f/H+1b/jkkXvbhYPEbadbadbadkKMBMgEW1IvmOeCEE=
### IP and Port of the WireGuard VPN Server
##### Syntax: IP_of_the_server:Port
Endpoint = 185.xxx.xxx.36:34567
### Allow all traffic
AllowedIPs = 0.0.0.0/0
答案1
此 VPN 是访问私有资源的方式,而不是匿名访问 Internet 的方式。所以分裂隧道应该使用。
只需在客户端替换:
AllowedIPs = 0.0.0.0/0
仅由所需的资源:运行数据库的服务器。
对于客户wgEUR.conf
:
AllowedIPs = 10.20.10.1/32
对于客户wgUSA.conf
:
AllowedIPs = 10.20.20.1/32
现在,两个隧道可以同时启动:wg-quick
不会劫持路由(默认Table = auto
设置会发生这种情况,并显示AllowedIPs
为 0.0.0.0/0 或 ::/0),并且两个隧道不会相互冲突。客户端平常的互联网访问不会通过隧道,这当然是一个改进:为什么数据库服务器会提供这样的服务?