服务器双网卡导致业务不通问题

发布时间:  2014-09-11 浏览次数:  519 下载次数:  0
问题描述
网络中某服务器有两张网卡,其中接口eth0连接到1.1.1.0/24网段,IP地址为1.1.1.100,接口eth1连接到2.2.2.0/24网段,IP地址为2.2.2.100。当从其他网段(例如3.3.3.1)访问eth0接口IP 1.1.1.100时,会导致失败,ping超时。
告警信息
拓扑图如下:
处理过程
通过关闭RPF功能来解决问题。

临时解决方法(不需重启服务器,需网络瞬断):
1. 修改/proc/sys/net/ipv4/conf/all/rp_filter值:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

2. 重启网络服务:service network restart
永久解决方法(需重启服务器):
1. 修改Linux参数:
编辑/etc/sysctl.conf文件, 将net.ipv4.conf.all.rp_filter值设为0。

2. 重启服务器: reboot
根因
起初分析是双网卡导致的来回路径不一致,从而使防火墙上无法正常创建会话的问题。于是使用bypass线路将防火墙隔离出去,仍然没有解决该问题。此时尝试在与服务器相连的交换机上的两个接口上分别抓包,发现只有发往服务器的报文,服务器并没有从eth0或eth1进行回包。

因此将问题定位在此服务器上而非交换机上,联系系统管理员,登录服务器进行分析:


当从其他网段访问地址1.1.1.100时,根据网络中的路由信息,该访问数据包会从VLAN301进入到该服务器的eth0接口。对于普通服务器来说,服务器会进行路由查找然后回包。但是,该服务器使用的是Linux SUSE 11操作系统,使用uname –a命令可以看到该发行版使用的Linux内核是2.6.32.12,在该版本中,反向路径检测功能(RPF, reverse path forwarding, 又称逆向路径转发)功能被以严格模式开启:
# cat /proc/sys/net/ipv4/conf/all/rp_filter
1
#
--这里1代表严格模式,0代表关闭,2代表松散模式。
反向路由转发是一项增强路由安全的有效措施。它设定了以下数据包转发机制:
松散模式:当设备接收到一个数据包,它检查路由表,查看是否存在到数据包源地址的路由;如果存在,则正常转发该数据包,否则,就会丢弃数据包。

严格模式:当设备接收到一个数据包,它检查路由表,查看到数据包源地址的路由出接口与接收到该数据包的接口是否为同一个接口;如果是,则正常转发该数据包,否则,就会丢弃数据包。
在本例中,当数据包从eth0进入时,查看路由表中源地址的路由,由于没有源地址的明细路由,匹配到缺省路由2.2.2.1,出接口为eth1,与数据包的来源接口eth0不同,反向路由检测失败,丢弃该数据包。
建议与总结
双网卡在网络中会引起的问题,主要分为如下两种:
1. 来回路径不一致,防火墙上会话无法正常建立,导致报文被丢弃。
2. 数据包到达服务器时,由于反向路径转发功能被打开,导致数据包被丢弃。

分析时,要从网络和操作系统两方面拓展思路考虑问题。

END