我今天遇到了一个与 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 来创建真实的接口别名。