如何配置 Wireguard 接口以通过特定网络接口连接到远程对等方?

如何配置 Wireguard 接口以通过特定网络接口连接到远程对等方?

假设我有两台服务器,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 也可以做同样的事情吗?也就是说,只发送流量ens1ens2不管默认路由指标如何?如果不行,我该如何设置 Linux 的网络系统来执行此操作?

答案1

我无法找到让 wireguard 本身通过特定接口连接的方法,因此我最终决定通过在路由表ens2中添加新路由来简单地路由发往的流量:appserver

ip route add $GATEWAY_ESN2_ADDR/32 via $APPSERVER_ESN2_ADDR_GW metric 50

APPSERVER_ESN2_ADDR_GWappserver是网关路由器的地址。

FwMark在研究这个问题时,我注意到 wireguard 允许你通过设置下的字段来对属于特定 wireguard 接口的传出流量设置 fwmark [Interface]。截至撰写本文时 (2021-09),Wireguard 不支持在每个对等点上设置此标记。

*如果有人发现合适的解决方案,我会保留这个问题。

相关内容