【技术讨论】ipsec连接建立过程解析
  

俺是大逗逼 8204

{{ttag.title}}
前言
前几天由于某种其他原因,联系400小哥哥协助排查了一个ipsec的故障,后来,400小哥哥把ipsec从tcp切换到udp,然后就发现,ipsec连不上了,然而,分支还没人,,,最后费了九牛二虎之力,才把ipsec连接回复(具体细节我就不说了,总之就是,ipsec断网2小时)
后来,思前想后,还是没搞明白情况,400小哥哥也是不知道。刚好有个时间,手头也有设备,做个实验。

实验环境
设备A为我的电脑,用于登陆每个设备。也用于ipsec连通性测试,测试方式:向192.168.2.200发起65000字节的ping探测。
设备B为一台ac,单进单出网关部署,做ipsec分支,ipsec配置为:向200.200.65.62的88号端口发起ipsec连接
设备C为一台af,单进单出网关部署,做总部的网关,通过DNAT映射192.168.2.200的部分端口(具体端口映射情况见下文)。
设备D为一台vpn,单臂部署,做ipsec总部,关闭压缩,监听端口见下文。

实验一
C设备映射192.168.2.200的tcp和udp,内部端口4009,外部端口88
B设备在配置ipsec连接时使用tcp-88
D设备监听4009端口
此时 ipsec连接正常,通信正常。

上图是抓取的D设备lan口的数据包,经过筛选
可以看到,设备B与设备D 握手以后,先快速进行了小包交互,交互内容初步判断是加密的,查看全部的报文,发现业务数据是由此会话进行。
全程交互内容无法破译。

实验二
C设备映射192.168.2.200的tcp和udp,内部端口4009,外部端口88
B设备在配置ipsec连接时使用udp-88
D设备监听4009端口
此时 ipsec能建立连接,但是看不到对端地址,ipsec使用异常

抓取设备D的lan口,可以看到,首先 分支向总部发起了一次tcp连接,交换完成后,由总部向分支发起4次挥手断开连接(ps:4次挥手的第二步和第三步在第二个数据包中传输,所以挥手只看到了3个数据包)
然后,最重要的,tcp连接端口以后,等待了20秒,总部通过源端口4009,目的端口4009的方式尝试连接分支。失败重传6次后结束。(ps:由于是只抓了总部的lan口,发现总部有连接分支的倾向,但是由于此次数据包是后期分析的,具体是分支主动连接总部还是总部主动连接分支,由于udp的特殊性需要抓分支的数据包才能判断,因为在udp数据流中 总部的数据包可以根据连接跟踪反向转换。目前能确认的是,总部向分支发起了连接,而且在这种环境下,肯定匹配不到相应的连接跟踪,这条连接会被网关设备认为是首包执行相应策略)其实这不是问题,因为有实验三

实验三
C设备映射192.168.2.200的tcp和udp,内部端口88,外部端口88
B设备在配置ipsec连接时使用udp-88
D设备监听88端口
此时 ipsec连接正常,通信正常。
抓取设备D的lan口,首先,对比实验二,可以看到,1:相对比实验二,可以确认,某公司使用了Kerberos认证机制。
然后 最重要的,tcp结束以后大约10秒,由分支发过来了第一个udp数据包,然后快速交换以后,停了一小会开始了业务数据的传输,查看包头,可以看到业务数据传输中使用的udp的会话,并无新建会话。
这么基本就可以确认,tcp连接完成后,需要由分支再次向总部建立udp会话,如果总部长时间未收到udp会话的时候,会尝试主动连接分支。

附加实验四
C设备只映射192.168.2.200的udp,内部端口88,外部端口88
B设备在配置ipsec连接时使用udp-88
D设备监听88端口
此时 ipsec直接无法建立连接
抓取分支的wan口数据包,发现分支尝试与总部建立tcp连接,由于没有映射tcp,所以直接被总部网关reset。

附加分析五
我在网络连通性的时候使用的ping大包(65000字节)
这个时候分析抓包的时候 发现了一个很有意思的情况

我们先看tcp
中间已经专门框出来了,发现了很开心的现象
一个有效的数据(PSH置1)始终是2个数据包构成。

然后再看udp
可以很明显的看到 一个数据包在网络层被分成了两片。

要想知道原因 首先要理解ipsec传输的原理,,,首先 业务数据包到达设备以后,尤其是对于大包,数据包一般是卡着mtu(1500)的大小,然后钩子函数会把数据包抓取,进行加密,并将加密过的数据包作为高层应用数据重新进行tcp封装,而在对1500的数据包添加包头的时候势必会导致新数据包的长度大于1500,所以,需要做到的是 将加密过的数据进行拆解,tcp与udp的不同在于,tcp中数据包的拆解高层应用完成(依靠tcp的mss值)(常规情况下由传输层完成,但是抓包发现,没有TCP segment of a reassembled PDU的提示,数据包的分片似乎不是由传输层进行,),而udp相对简单,数据包分片由网络层完成
大体就是如下图


总结
对于以上的几个实验,或许看起来很吃力? 其实,你也可以直接看总结(手动滑稽)
与实施时最有关系的两条总结
1.ipsec连接分为2个过程,其中 ipsec连接建立的时候一定是使用的tcp连接,数据传输时根据在设备上配置的情况选择实现(小伙伴们映射对了吗?)
2.在使用udp连接,而且总部需要配置映射的情况下,需要对外发布的端口与监听端口保持一致。

其他不太重要的总结
3.在大包传输的情况下,ipsec用2个数据包完成了一个对业务数据包的传输。
4.使用tcp时,整个数据流只使用了一个tcp会话,使用udp时,先建立一个tcp会话,然后释放tcp会话,随后只建立一个udp会话。
5.ipsec认证的时候使用的Kerberos
6.正常情况下,任何连接过程都是分支去主动连接总部,但也存在总部等不及要主动连分支的情况。

TIM截图20171104232843.png (183.33 KB, 下载次数: 106)

TIM截图20171104232843.png

打赏鼓励作者,期待更多好文!

打赏
8人已打赏

nihongliang 发表于 2017-11-5 01:08
  
楼主有没有想过,sangforvpn与标准的ipsecvpn的实现方式有哪些区别?
carl 发表于 2017-11-6 09:52
  
还是实验不会骗人,楼主好认真,向你学习!
常永玲 发表于 2017-11-6 16:08
  
看得有些吃力:吓尿:
晴空 发表于 2017-11-8 10:05
  
我这基本现在都是关注于通或不通了,对于底层的技术原理都不清楚了,非常感谢楼主的分享,这样的分享看着很爽!
g695819732 发表于 2017-11-9 16:59
  
感谢楼主对于通信底层技术分享
zoonctrl 发表于 2017-11-10 08:39
  
用事实说话
SANGFOR_2062 发表于 2017-11-12 16:49
  
为楼主点赞,这就是“走心”的技术典型
1、遇到问题解决后,为了搞明白具体原因,善于通过实验来分析、验证、总结
2、实验设置了对照组,逻辑性强
3、实验结论明确,分享出来对那些“走shen”的人,很有帮助
Lau9505 发表于 2017-12-20 10:40
  
感谢楼主分享
跳海的鱼 发表于 2018-11-16 09:56
  
涨知识了,感谢分享
发表新帖
热门标签
全部标签>
每日一问
技术笔记
功能体验
技术咨询
新版本体验
2023技术争霸赛专题
干货满满
技术盲盒
标准化排查
产品连连看
GIF动图学习
技术晨报
信服课堂视频
安装部署配置
运维工具
秒懂零信任
用户认证
自助服务平台操作指引
安全攻防
每日一记
通用技术
答题自测
云计算知识
SDP百科
深信服技术支持平台
畅聊IT
sangfor周刊
资源访问
排障笔记本
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
原创分享
解决方案
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
迁移
地址转换
虚拟机
存储
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版达人

adds

本周建议达人

无极剑圣

本周分享达人

新手25642...

本周提问达人