依据ARP表项转发的出接口和依据路由表项转发的出接口不一样

发布时间:  2015-01-02 浏览次数:  153 下载次数:  1
问题描述
设备版本:S7700 V200R003C00SPC500
现象:主服务器发生故障后,在S9306上添加静态路由ip route-static  1.1.1.2  32  3.3.3.2后,备服务器仍无法访问数据库
S9300下挂数据库和主服务器,S7700下挂备服务器,主备服务器拥有相同IP地址,拥有相同网关;S9300和S7700通过VLAN接口逻辑相连。IP地址及VLAN号如图:
S7700上有一条静态路由ip route-static  2.2.2.2  32  3.3.3.1
组网如图所示:
 
告警信息
处理过程
[S9306]arp  static  1.1.1.2  a-b-c
根因
当主服务器可用时,按照图中的配置,主服务器能够访问数据库(主服务器和数据库都是S9300的直连路由),S9300上有一条主服务器IP地址1.1.1.2和其MAC地址对应的ARP表项。在主服务器正常工作时,S9300在处理数据库和主服务器之间的通信时,根据二层通信原理依据主服务器的MAC地址转发数据帧到主服务器。
当主服务器故障后,需要手工在S9300上添加静态路由:ip  route-static  1.1.1.2  32  3.3.3.2  。这个时候备服务器访问数据库时,备服务器将自己的MAC地址及自己的IP地址封装后依据S7700上的静态路由转发到S9300,S9300能够正常将备服务器的报文转发给数据库;而在数据库将回报文转发给S9300时,S9300拆包后,发现1.1.1.2这个IP地址在ARP表项中有对应的MAC地址,这个表项为主服务器故障后遗留的表项,遂按照表项将报文从GE0/0/1接口转发给主服务器,这样导致了备服务器无法正常访问数据库。
解决方案
在S9300上手工配置静态路由后,使用命令arp  static  1.1.1.2  a-b-c将备服务器与a-b-c这个MAC地址绑定,但不设置出接口。当S9300依据IP地址找到相应的arp表项时,发现没有对应的出接口,于是依据手工配置的静态路由转发到S7700,再由S7700转发给备服务器。
建议与总结
涉及到局域网中流量无法正常访问时,可以从数据包封装与解封装的原理上去分析整个流量访问的过程,严格按照转发的基本原理排查错误,这样才能更准确的找到错误的原因

END