以前一直没有搞明白这个问题,突然今天看到了一篇博客,写了这个问题

https://www.zhoufengjie.cn/?p=307

 

根本原因:

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

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

解决方法一:

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

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
使用样例:
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脚本调用即可

posted on 2020-01-20 00:46  michaelz0  阅读(195)  评论(0)    收藏  举报