根本原因:
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中
解决方法二:
开启策略路由,哪里进哪里出
#定义路由表名称
vi /etc/iproute2/rt_tables
10 TEL
11 CNC
#清理路由表
ip route flush table CNC
#配置路由表走的路由
ip route add default via 172.17.11.10 table CNC
#配置进入路由表的策略
ip rule add from 125.39.170.4 table CNC
使用样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
vi /etc/iproute2/rt_tables 10 TEL 11 CNC 12 NeiWang 策略路由配置方法: #清理路由表 ip route flush table CNC ip route flush table TEL ip route flush table NeiWang #配置路由表走的路由 ip route add 10.0.0.0/8 via 125.39.170.1 table CNC ip route add default via 172.17.11.10 table CNC ip route add 10.0.0.0/8 via 43.224.215.217 table TEL ip route add default via 172.17.11.2 table TEL ip route add 10.0.0.0/8 via 10.10.10.10 table NeiWang #配置进入路由表的策略 ip rule add from 125.39.170.0/29 table CNC ip rule add from 43.224.215.216/29 table TEL ip rule add from 10.10.10.0/24 table NeiWang |
然后将命令做到rc.local中,或者更改/etc/init.d/network脚本调用即可