一、问题描述:
双网卡同网段IP,仅能使用一个
配置Linux下的两个网卡为同网段IP地址,仅能使用eth0 ping通外网,若要使用eth1,需要关闭eth0,之后再使用eth0,就需要关闭eth1。外网对两个网卡都可以ping通。
(1)不关闭任何网卡(重启后的最初状态),外网ping操作
(开发板)
(ubuntu服务器)
结果显示,均可ping通
查看arp缓存
两个网卡的MAC相同,均为eth0(可ping外网)的MAC地址
(2)关闭eth0,外网ping操作
(开发板)
(ubuntu服务器)
结果显示,仍可ping通被关掉的eth0
查看arp缓存
两个网卡的MAC相同,均为eth1的MAC地址,当前eth1可ping通外网
二、问题分析:
Linux系统默认启用了反向路由检查。
对于处于同一个网段里的两个网卡,系统会从eth0或eth1中的一个网卡去发现网关,即使用其中一个网卡的MAC地址去连接外网,对外展示的是相同MAC不同IP的两个网卡,外网都能够追踪到相应的MAC地址,可以ping通。而由内向外ping时,其中一个网卡发出的数据,接收时没有了对应MAC地址,所以展示为ping失败。
三、解决方法:
关闭反向路由检查
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
最终测试: