使用 Linux 从不同子网 (ISP) 路由多个 IP

使用 Linux 从不同子网 (ISP) 路由多个 IP

我今天遇到了一个与 Linux 路由有关的有趣的问题。

我的期望:能够为一个接口分配多个公共 IP,并有一个默认网关。发送到特定 IP 的数据包将通过接收数据包的特定网关响应该 IP,而任何原始流量都将通过默认网关。以下是设置

ifconfig eth0 x.x.x.x/29
ifconfig eth0:1 y.y.y.y/29
route add default gateway y.y.y.g

从这台机器发出的数据包将具有 IP并通过出口. 如果在xxxxx它将通过以下方式回复xxxg虽然xxxg不是默认路由。

实际结果:直到今天,这对我来说都很好。今天根据我对上述设置的经验,我添加了zzzz以为我只需分配另一个 IP 即可获得相同的结果。完全不是这样,我不明白为什么。我一添加zzzz

ifconfig eth0:2 z.z.z.z

我可以手动 ping 新的网络网关,但外部数据包没有得到响应。其他两条路由工作正常,如前所述。在我的实验中,我设置作为我的默认路由。这导致所有流量都来自zzzz如预期的那样,外部流量发送到zzzz效果很好。然而xxxxx完全停止响应外部流量,但我可以手动从任一网关发起流量,并且流量会通过各自的网关顺利路由。无论如何我都无法zzzz与任何其他 IP 或路由组合配合良好,尽管最初两个组合在没有zzzz

什么原因可能导致此行为?(仅供参考,iptables 不是我确定的问题。所有 IP 都是公共的,不涉及 NAT)

答案1

基本上,如果不使用 iptables,您就无法获得所描述的路由。

即使使用 iptables,您也​​无法分辨数据包来自哪个接口别名(除非数据包源地址来自同一个网络地址)。

如果不使用 NAT,您也无法控制从接口传出的数据包的源地址。

最后,但并非最不重要的一点是,如果您想要路由互联网流量(而非本地网络),您需要 VLAN 来创建真实的接口别名。

相关内容