我们曾经在 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 上找到并转发的文章。尚未找到来源。