主机vm1有两张网卡
网卡eth0:IP 10.222.0.44/16
网卡eth1:IP 10.142.0.44/16
主机vm2
网卡eth1:IP 10.142.0.41/16
两张网卡eth1是连接在同一局域网
在主机vm2上配置路由
10.222.0.0/16 dev eth1 scope link metric 1002
然后主机vm2
ping 10.222.0.44
竟然能ping通????????
为啥认为不能Ping通?
因为在vm2上,ping 10.222.0.44,理论上它和eth1的ip 10.142.0.41不在同一个网段,那么久需要走网关发出,但是配置了路由10.222.0.0/16 dev eth1 scope link metric 1002,这时
vm2访问10.222.0.0/16的包,都会从eth1广播出去。就不会走到默认网关。
------这里可以理解。
--------------------------------
但是vm1上,eth1 IP是10.142.0.44和vm2ping的目标ip 10.222.0.44不是同一IP,也不是同一个网段,理论上,内核协议栈收到广播arp包时,会检查该网卡的ip和目标Ip是否相同,如果不相同则会丢弃,那么这里为啥会去回复arp 响应包呢?为啥又还会ping的通呢?
------
因为内核又一个配置项是可以选择的。
在/proc/sys/net/ipv4/conf/all/rp_filter和/proc/sys/net/ipv4/conf/all/arp_ig。。。都设置一下,
那么就会有不同的处理方式。
如果arp_ignore=0,主要arp包中目的地址是本地某一个ip,都会回应。
如果arp_ignore=1,arp包中目的地址必须是本网咖,否则丢包,
这里注意rp_filter要设置成0,会进行反向路由检查。
如果arp_ignore=2,arp包中的目的地址必须是本网咖,并且源IP必须与该网卡是同一个网段,否则丢包