2 个 VPN 隧道,跨越 2 个独立连接和路由

2 个 VPN 隧道,跨越 2 个独立连接和路由

我们曾经在 1 个 Internet 连接上设置 1 个 VPN 隧道,将 2 个数据中心连接到 1 个虚拟 LAN (10.xxx)。使用路由表等非常简单。

现在我们在第二个独立物理连接上添加了另一个隧道,处理路由变得非常困难。将所有东西路由到新连接很容易,但如果我们只想将特定主机路由到主机或子网路由到子网怎么办?

e.g.  
client1-site1 <--> vpn-on-site1 <--tun1--> vpn-on-site2 <--> service1-on-site2  
client2-site1 <--> vpn-on-site1 <--tun2--> vpn-on-site2 <--> service2-on-site2

请注意,每侧只有 1 个 vpn 节点。我们设法将数据包从 client2-site1 正确路由到 service2-on-site2,但返回的数据包有时会转到 tun1...

答案1

您需要 ip 规则 + iptables 和 ip 路由表。2 个路由表:

1st -- with default output via tun1. 
2nd -- with default output via tun2.

当在 tun1 上收到数据包时 -> iptables mangle 将其标记为 0x1,然后 ip 规则通过标记 0x1 将其路由到第一个路由表。因此,当给出答案时,数据包将通过接收它的接口,而不是默认接口。

tun2 的逻辑相同。

我不知道这是否有帮助,但也请尝试使用 rp_filter=0(此内核选项用于在收到接口数据包时进行回答,有助于 LAN)

我做过类似的事情,这是我在旧 lj 上找到并转发的文章。尚未找到来源。

查看这篇文章,我已将其转发到 lj

相关内容