- 论坛徽章:
- 0
|
一、网络概述
该网络是一个网吧,采用NetHammer M262做NAT转换、防火墙,带动整个局域网上公网;M262下接u2E做汇聚,整个网吧共240太机器,使用私网地址192.168.0.0/24网段;
二、问题描述
1、客户端登录OICQ服务器后,可以连续发送5到10个信息给其他客户端,然后就出现OICQ发送信息报错“信息无法发送,可能是网络不通”现象(下称掉线现象);
2、关掉OICQ,重新登录OICQ服务器后,又可以正常发送几个信息;
3、关掉OICQ,重新登录OICQ服务器后不做任何信息发送,当大约过3分钟后再发送信息出去的时候,出现OICQ掉线现象;
4、当出现OICQ发送信息报错时,浏览网页很正常,ping外网网关无掉包、延迟正常;
5、当出现OICQ发送信息报错大约6到7分钟后,发现刚才无法发送的信息又可以发送出去的现象;但发送几个信息后,OICQ又会出现掉线现象;
6、在出现OICQ无法发送信息出去的同时,能够接收其他OICQ客户端发来的信息;
三、问题分析及处理过程(测试用的笔记本IP为192.168.0.253)
1、用笔记本接在内网中抓包结果分析,无异常包;对出现OICQ掉线的机器进行病毒检测,未发现病毒;
2、登录路由器,检查配置文件,确定路由器使用的是动态地址池轮巡做NAT出口上公网,检查公网地址正确,检查防火墙未对OICQ进行设置,其他配置也无问题;
3、从路由器上、笔记本上ping M262的默认网关,大包小包一切正常;
4、在笔记本上PING OICQ服务器地址延迟严重,达到300-500ms,而且存在掉包现象;但是客户反映,他们使用以前的宽带路由器上网,使用同样的IP地址,却未出现上OICQ掉线现象;
5、使用客户的宽带路由器来代替我司M262进行长达1个小时的测试(包括浏览网页、上OICQ、打游戏)等,一切正常;
6、为了找出具体原因,只有对OICQ软件的通信机制进行分析;
OICQ软件使用的数据通信常使用UDP协议,新版本也可以使用TCP协议;
当使用客户端UDP协议登录OICQ服务器时,服务器记录客户端的IP地址,认为客户已经登录,允许此客户端将数据发到其他客户端;客户端登录服务器后,服务器会定时发送一个UDP格式HELLO报文给客户端,客户端接到HELLO报文返回一个UDP报文给服务器,服务器接收到客户端返回的报文后认为客户在线,否则认为客户端已经不在线,便会注销此客户端的IP;由对OICQ的通信机制分析想到,如果客户端使用UDP协议登录服务器,在使用OICQ当中,OICQ客户端的地址改变后才将信息发送出去,由于改后的地址是新地址,服务器检查此客户端的IP未登录,便不允许发送信息出去,这样就导致了信息无法发送;如果别人发送信息给此客户端,由于对方IP已经登录,服务器允许数据发送过来,所以对方直接将数据使用UDP协议发送到此客户端,这样此客户端便能接收到消息;
当OICQ客户端使用TCP协议登录服务器后,由于客户端和服务器端使用了可靠连接方式,对客户端的在线检测采用了不同的检测机制;
7、OICQ通信机制中地址改变后如果不从新登录便会无法发送数据出去想到,现在使用的上网方式是采用NAT地址池轮巡转换方式,发送出去的数据包是对OICQ客户端的地址进行了改变的,而OICQ客户端PC的IP不会改变,但转换后的公网地址使用了轮巡机制,这将会导致使用公网地址池里的不同IP来作为OICQ客户端的地址发送到OICQ服务器,这样最终会造成OICQ服务器认为此客户端地址(非登录时使用的NAT转换后的地址)发送的信息是一个未登录客户端发送的信息,因此不会允许此信息发送到其他客户端,所以信息就无法发送出去,OICQ就会报错“信息无法发送,可能时网络不通”的现象;当地址池的IP轮巡到OICQ开始登录服务器使用的IP,而此时服务器还未注销此使用IP的OICQ客户端时,信息就照样会发送出去,以致出现上OICQ一时通一时不通的情况;
8、为了确定分析的正确性,在路由器上配置接口出口转换后,在PC机上用OICQ聊天1小时,再也未出现掉线情况;而把配置马上改成地址池做轮巡转换后,问题又出现;所以证明前面的分析是正确的;
以下是在用地址轮巡做出口转换时用show ip nat tr抓的转换包,红色字体为OICQ信息转换条目:
刚登录能正常发信息时的NAT转换条目:
router# show ip nat tr 192.168.0.253
Proto Inside global Inside local Outside local Outside global
tcp 221.5.136.140 192.168.0.253 207.46.107.29 207.46.107.29
4723 Unknown 4723 Unknown 1863 Unknown 1863 Unknown
udp 221.5.136.139 192.168.0.253 202.104.129.252 202.104.129.252
4001 Unknown 4001 Unknown 8000 Unknown 8000 Unknown
udp 221.5.136.141 192.168.0.253 61.172.249.142 61.172.249.142
4000 Unknown 4000 Unknown 8000 Unknown 8000 Unknown
tcp 221.5.136.139 192.168.0.253 10.58.15.200 10.58.15.200
4798 Unknown 4798 Unknown 139 Unknown 139 Unknown
掉线时的NAT转换条目1:
router# show ip nat tr 192.168.0.253
Proto Inside global Inside local Outside local Outside global
tcp 221.5.136.140 192.168.0.253 207.46.107.29 207.46.107.29
4723 Unknown 4723 Unknown 1863 Unknown 1863 Unknown
udp 221.5.136.139 192.168.0.253 10.58.15.200 10.58.15.200
137 Unknown 137 Unknown 137 Unknown 137 Unknown
tcp 221.5.136.141 192.168.0.253 10.58.15.200 10.58.15.200
4802 Unknown 4802 Unknown 139 Unknown 139 Unknown
udp 221.5.136.140 192.168.0.253 202.104.129.252 202.104.129.252
4001 Unknown 4001 Unknown 8000 Unknown 8000 Unknown
掉线时的NAT转换条目2:
router# show ip nat tr 192.168.0.253
Proto Inside global Inside local Outside local Outside global
tcp 221.5.136.140 192.168.0.253 207.46.107.29 207.46.107.29
4723 Unknown 4723 Unknown 1863 Unknown 1863 Unknown
udp 221.5.136.139 192.168.0.253 10.58.15.200 10.58.15.200
137 Unknown 137 Unknown 137 Unknown 137 Unknown
tcp 221.5.136.141 192.168.0.253 10.58.15.200 10.58.15.200
4802 Unknown 4802 Unknown 139 Unknown 139 Unknown
udp 221.5.136.141 192.168.0.253 202.104.129.252 202.104.129.252
4001 Unknown 4001 Unknown 8000 Unknown 8000 Unknown
9、客户端使用TCP协议登录,由于TCP是可靠连接协议,在未出现发送连接断开信号或连接超时情况下,NAT不会转换成另外一个IP地址(经过show ip nat tr分析发现此属于我司设备特性),也就是说OICQ客户端发送的数据在进行NAT时,还是使用了第一次转换的公网IP;因此,OICQ服务器就认为此客户端一直在线,也就不会注销此客户端IP,也就允许此客户端发送数据出去;
OICQ客户端用TCP方式登录OICQ服务器时的转换条目(连续监视1小时红色字体里的内容未变):
router# sh ip nat tr 192.168.0.253
Proto Inside global Inside local Outside local Outside global
tcp 221.5.136.140 192.168.0.253 207.46.107.29 207.46.107.29
4723 Unknown 4723 Unknown 1863 Unknown 1863 Unknown
tcp 221.5.136.139 192.168.0.253 218.17.209.23 218.17.209.23
4810 Unknown 4810 Unknown 80 Http 80 Http
tcp 221.5.136.139 192.168.0.253 61.172.249.134 61.172.249.134
4811 Unknown 4811 Unknown 80 Http 80 Http
tcp 221.5.136.141 192.168.0.253 10.58.15.200 10.58.15.200
4818 Unknown 4818 Unknown 139 Unknown 139 Unknown
10、将客户端使用TCP方式登录,路由器不管使用地址池做出口转换或用接口做出口转换,连续上OICQ 1小时未出现掉线现象,浏览网页,打游戏都一切正常;
四、总结
根据以上的逐步分析过程,最后查到原因,是因为使用NAT转换的方式不对而引起了此OICQ掉线现象
当要用OICQ或者其他使用UDP协议来进行保持连接状态检测的软件时,可以使用3个方法:
1、使用接口做出口转换;
2、使用地址池,不要用type ro命令;
3、使用地址池,可以使用type ro命令,但QICQ必须使用TCP登录;
凡引用本系列文章相关内容,需要注明出处:
www.ipdata.cn
,否则本站将追究相关的责任。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16554/showart_411369.html |
|