我有一台具有 2 个 NIC 的服务器,其 IP 地址在同一个子网中,我的 /etc/network/interfaces 如下所示:
auto eth0
iface eth0 inet static
address 192.168.2.155
gateway 192.168.2.51
netmask 255.255.255.0
dns-nameservers 192.168.2.180
dns-domain exaple.com
auto eth1
iface eth1 inet static
address 192.168.2.156
netmask 255.255.255.0
因此,我们的想法是,ip 为 192.168.2.155 的 eth0 是具有互联网连接的“管理”接口。ip 为 192.168.2.156 的 eth1 NIC 将用于与内部设备通信。
现在,当我使用默认系统进行配置,并尝试使用 LAN 上的其他设备对 192.168.2.156 上的 eth1 进行 ping 操作时,这些数据包并没有像预期的那样被 eth1 接收,而是被 eth0 接收,我通过运行验证了这一点tcpdump -i eth1 icmp
,并且看不到任何数据包进来。执行 ping 的客户端收到了回复,但来自错误的 NIC/MAC 地址。
现在我发现这种现象被称为“ARP 通量”,甚至有很好的文章描述如何解决它,但问题是,这些解决方案似乎都不适合我。 本文通过运行以下命令似乎可以给出最好的解释和修复:
sudo sysctl -w net.ipv4.conf.all.arp_announce=1
sudo sysctl -w net.ipv4.conf.all.arp_ignore=2
sudo sysctl -w net.ipv4.conf.all.rp_filter=0
这似乎起了作用,因为我开始在 eth1 上接收数据包,但它完全禁用 eth0 和 IP 地址 192.168.2.155 上的任何通信。
还有什么其他想法我可以尝试吗?
答案1
答案2
基于本文改成:
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.all.arp_filter=1