![如何配置 Wireguard 接口以通过特定网络接口连接到远程对等方?](https://linux22.com/image/770798/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%20Wireguard%20%E6%8E%A5%E5%8F%A3%E4%BB%A5%E9%80%9A%E8%BF%87%E7%89%B9%E5%AE%9A%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%E8%BF%9E%E6%8E%A5%E5%88%B0%E8%BF%9C%E7%A8%8B%E5%AF%B9%E7%AD%89%E6%96%B9%EF%BC%9F.png)
假设我有两台服务器,gateway
一台在互联网上公开可见,另一appserver
台隐藏在 nat/防火墙后面。还假设这两台服务器各自有二连接到完全独立的互联网上行链路的接口(见下图)。
我想在两台服务器之间设置两个独立的 Wireguard 隧道,目的是当其中一台服务器发生故障时仍保持服务器的连接:
| Internet |
[ gateway ] | | [appserver]
| |
(wg0) <-----> (ens1) < - - - - > (ens1) <----> (wg0)
| |
| |
| |
(wg1) <-----> (ens2) < - - - - > (ens2) <----> (wg1)
| |
| |
默认情况下,Wireguard 似乎会通过系统的默认网关路由所有流量。因此,当appserver
尝试连接到时gateway
,它仅使用两个接口之一:
| Internet |
[ gateway ] | | [appserver]
| |
(wg0) <--+--> (ens1) < - - - - > (ens1) <--+--> (wg0)
| | | |
| | | |
| | | |
(wg1) <--+ (ens2) X (ens2) +--> (wg1)
| |
| |
由于某些网络工具允许设置在发送网络流量时使用的特定网络接口,Wireguard 也可以做同样的事情吗?也就是说,只发送流量ens1
或ens2
不管默认路由指标如何?如果不行,我该如何设置 Linux 的网络系统来执行此操作?
答案1
我无法找到让 wireguard 本身通过特定接口连接的方法,因此我最终决定通过在路由表ens2
中添加新路由来简单地路由发往的流量:appserver
ip route add $GATEWAY_ESN2_ADDR/32 via $APPSERVER_ESN2_ADDR_GW metric 50
APPSERVER_ESN2_ADDR_GW
appserver
是网关路由器的地址。
FwMark
在研究这个问题时,我注意到 wireguard 允许你通过设置下的字段来对属于特定 wireguard 接口的传出流量设置 fwmark [Interface]
。截至撰写本文时 (2021-09),Wireguard 不支持在每个对等点上设置此标记。
*如果有人发现合适的解决方案,我会保留这个问题。