AR路由器由于TCP MSS值设置不合理导致用户无法通过IPSec隧道访问服务器

发布时间:  2015-07-22 浏览次数:  1025 下载次数:  73
问题描述

如图所示,weblogic服务器安装在PIMS Centre的Application Zone中的集群服务器App01到App04上。Fixed Information Collection Office(FICO,图中红圈部分)的xxx-AR12-01设备与PIMS Centre的PIM001-AR22-01或PIM001-AR22-02设备间建立IPSec隧道(即图中蓝色虚箭头线),其穿过ISP L2VPN网络。
 

 


 
用户在FICO使用三台PC和两台笔记本通过IPSec隧道访问weblogic服务器时,仅有一台笔记本偶尔能成功访问,其他电脑访问时页面均空白。如下图所示,客户端持续等待HTTP请求的响应内容。
 

 
 
执行display ipsec sa命令查看IPSec隧道已建立成功,检查配置没有问题。

处理过程

1. 分别在访问失败和成功的笔记本网口上获取报文头。

通过Follow TCP Stream工具查看失败笔记本获取的报文头文件,发现有失败的HTTP请求,服务器有向客户端反馈响应。如下图所示,服务器正常反馈HTTP302响应重定向后,客户端继续请求服务器,服务器返回HTTP200正常响应,但无Text返回,即服务器响应HTTP请求成功后未返回Text内容。

 

2. 查看weblogic服务器是否异常。

用户在CP Centre(如图所示标蓝色线部分)访问weblogic服务器,能够正常访问,说明服务器没有问题。同时,也可以排除汇聚交换机故障。


3. 在FICO的电脑上ping服务器地址,如下图所示。

 

发现TTL有时为252,有时为253,说明数据包路径会发生变化,怀疑是防火墙session检测将ping应答报文当成攻击报文阻断。

4. 检查防火墙是否有问题。

在防火墙上配置undo firewall session link-state check tcp命令后,再次测试,依旧无法访问。所以暂时排除防火墙问题。


5. 检查出口路由器或ISP的L2VPN链路。

查看访问失败的报文,发现如下可疑数据包:




分析数据包,发现服务器返回的TCP报文提示有前序的分片丢失情况 。

 

在FICO直接向服务器ping大包且不分片则无法ping通,例如ping 10.248.0.15 –l 1446 –f。

检查访问成功的报文,依然有很多分片丢失的响应报文,即访问成功的机器只是概率性成功。


 

问题基本定位为在ISP传输链路途中分片报文丢失,则确定TCP MSS设置不合理。

6. 修改TCP MSS值。

在出口AR路由器的接口视图下配置tcp adjust-mss 1200命令修改接口的TCP最大报文段长度为1200字节。

修改配置后,在FICO的电脑再次访问weblogic服务器,都可成功访问。问题解决。

根因

TCP MSS(Max Segment Size)指定了TCP最大报文段长度,如果MSS值加上各种开销的报文总长度(MSS+TCP报文头+IP报文头)大于链路的MTU值,则数据报文会被分片发送。

在这场景中,TCP报文总长度(MSS+TCP报文头+IP报文头+IPSec头等)大于链路的MTU值,导致数据报文会被分片发送。而分片的过程会消耗更多的CPU资源,分片报文的加密解密同样会消耗传输链路中设备的CPU资源。当CPU资源消耗过多,就会造成数据报文的丢失。所以用户在FICO使用三台PC和两台笔记本通过IPSec隧道访问weblogic服务器时,仅有一台笔记本偶尔能成功访问,其他电脑访问时页面均空白。

解决方案
在IPSec场景中,考虑到TCP报文头、IP报文头等开销,推荐用户在出口路由器的接口视图下配置TCP MSS值为1200字节,即可保证ISP链路设备不会再次对报文进行分片而过多的消耗其CPU资源造成丢包,可保证服务正常运行。


建议与总结

在VPN场景中,需要考虑发送的数据报文的大小是否过大造成报文分片。因为分片的过程会消耗更多的CPU资源,分片报文的加密解密同样会消耗传输链路中设备的CPU资源。当CPU资源消耗过多,就会造成数据报文的丢失。同时,对于某些高层应用(例如HTTP等应用层协议等)会将IP报文的DF(Don't Fragment)标记位置为有效,以防止TCP报文分片。如果DF标记位被置为有效,而路由器接口MTU小于MSS的值,此时路由器会因为不能强制分片TCP报文而将报文丢弃。

因此,请保证MSS值加上各种开销的报文总长度不超过MTU值。其中,以太网协议支持的MTU值最大为1500字节,PPPoE协议支持的MTU值最大为1492字节。推荐用户配置TCP MSS值为1200字节。

END