我有几台主机连接到同一个交换机,它们都在同一个子网(10.0.0.0/16)上。其中两台主机有更快的网络接口,所以我将它们连接在一起,这意味着这两台机器现在可以直接连接,无需通过交换机。
我现在需要设置路由,这样当这两台机器尝试相互通信时,数据包通过这个更快的直接链接而不是通过交换机的更慢的链接。
最简单的方法是将直接链接配置在不同的子网上,但是我需要根据要使用的接口使用不同的 IP 或主机名,并且我希望能够将标准配置部署到所有机器(例如 NFS 使用主机名挂载)并且不必维护自定义 IP 覆盖/etc/hosts
,我觉得这个解决方案太容易得到错误的主机名并通过错误的接口发送流量。
我正在寻找一种方法来告诉两台 Linux 机器即使eth0
处理 10.0.0.0/16,当你想与 10.0.0.5 通信时,即使它在 eth0 的子网中,也可以发送数据包eth1
。
我尝试添加一个主机路由规则,route add -host 10.0.0.5 dev eth1
它确实在正确的接口上发送数据包,但是它来自错误的 IP 地址(直接链接的子网而不是原始子网。)
我想解决这个问题的唯一方法是在两个接口上设置相同的 IP 地址,但这会导致任何问题吗?一台机器能否在多个 NIC 上正确地拥有相同的 IP 而不会导致问题?我假设我需要正确设置路由指标,以便为连接到交换机的 NIC 提供优先级(以避免子网的所有流量被错误地发送到另一台主机),但是我还需要什么知道这个设置吗?它会导致任何其他问题或难以解决的问题吗?
还是有更好、更强大的方法来实现这一目标?
编辑:这是@AB 要求的额外内容:
$ ip -br link
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0 UP ec:f4:xx:xx:xx:a4 <BROADCAST,MULTICAST,UP,LOWER_UP>
eth1 UP ec:f4:xx:xx:xx:a5 <BROADCAST,MULTICAST,UP,LOWER_UP>
$ ip -br address
lo UNKNOWN 127.0.0.1/8
eth0 UP 10.0.0.4/16
eth1 UP 10.0.99.4/24
$ ip route
default via 10.0.0.1 dev eth0 proto static
10.0.0.0/16 dev eth0 proto kernel scope link src 10.0.0.4
10.0.0.5 dev eth1 scope link
10.0.99.0/24 dev eth1 proto kernel scope link src 10.0.99.4
我在一个单独的子网上设置了直接链接 ( eth1
),然后尝试了route
我原来帖子中的命令,这就是现在的情况。看起来我可能需要src
为我的直接路线设置属性。