根本原因:

Linux默认启用了反向路由检查

如果2个网卡在一个Lan里面,那么服务器可能从eth0或者eth1发现网关, 如果一个包从eth0进入了, 而网关在eth1上, 那么从eth1是出不去的, 就不通了. 反向路由检查要求从哪里来的才能回哪去.

关闭反向路由检查(根据自己的情况替换第二第三行的网卡名):

1
2
3
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

每次开机自动关闭反向路由检查, 加入 /etc/rc.local 即可.

使其永久生效

修改/etc/sysctl.conf

1
2
net.ipv4.conf.bond0.23.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

重启之后生效。