一、总结来说,为什么ipsec vpn nat场景下要使用UDP4500端口
1、nat场景需要的基础条件:隧道封装模式、ESP安全协议
2、在非nat模式下,用户的esp报文是承载在IP报文内的,是没有传输层端口的,而ipsec vpn使用的ike协商是用的UDP500端口,此时ike报文500端口,用户加密的ESP数据直接承载在IP下
3、而处于nat场景下时,由于nat设备一般不允许不带传输层端口的数据发出,此时正好用户的ESP数据没有传输层端口,所以发送端在检测到自身处于nat场景下就会给用户的esp报文添加一个端口用于顺利通过nat设备传输,至于这个端口是什么,一会揭晓
4、由于nat场景下会给用户的esp报文添加一个UDP500端口号,此时就出现了ike协议和用户的ESP封装后的数据都使用UDP500,此时系统无法识别从UDP500端口收到的数据是ike还是esp,所以在综合考虑之下选择给ike报文添加一个8位全0的标记来区分ike和esp数据,因为ike的协议数据相对比esp数据少很多,对ike加标记消耗的资源更少;
5、对ike的协议添加一个8位全0的字段标记后就无法继续使用UDP500端口,因为UDP500端口要对接很多其他设备,为了保证兼容性以及其他设备能识别UDP500端口的数据,综合考虑之下,将IKE协议已添加标记的报文使用新的UDP4500端口来传输,同时也将用户的ESP数据端口改为UDP4500,;
6、此时的报文类型就有了三种:1、最初的两个ike报文使用UDP500传输,一但检测到处于nat场景就衍生出2、3报文;2、添加标记的UDP4500ike协议报文;3、没有添加标记的UDP4500的用户ESP报文;
7、至于为什么用户的ESP数据不采用最初的UDP500报文,只将ike添加了标记的报文改为UDP4500:因为需要考虑IPSecVPN隧道建立完成了,nat外部的设备作为用户ESP报文发起方,同时因为nat设备的nat映射表是有时间的,如果用户长时间没有交互数据,nat设备上的udp500端口的映射就会删除,此时只留下了udp4500的ike协议一直交互(因为nat场景下,处于nat网关内部的设备会一直向外部设备发生UDP4500端口的nat刷新报文,来更新nat设备上的映射时间),那么现在nat外部用户再往nat内部的用户UDP500端口发送用户数据,此时流量到达nat设备,由于nat设备上500端口的映射早已删除,所以nat设备把流量丢弃,这样就导致外部用户始终无法主动发起流量给内部用户;
8、如果将用户的ESP数据也改为使用UDP4500端口,和ike协议报文一样:此时就会发生nat设备由于一直收到nat网关内部发生的nat刷新报文持续更新本地UDP4500端口映射表象时间,防止过期;此时外部用户过一段时间后主动往nat内部的UDP4500发生ESP数据,流量达到nat设备,nat查询到映射表象,将流量转发到nat内部IPSEcVPN设备;
9、总结来说为什么也把用户的ESP数据端口由500改为了UDP4500,因为UDP500端口在nat场景下,只有nat内部运行IPSecVPN的设备初始发生时使用,此时nat设备上建立映射表象,但是当发起方检测到处于nat场景下时就会把ike报文协商的端口改为4500,因为加了标记; 此时等待一段时间后nat设备上的500端口映射关系到期删除,4500端口由于nat内部的发送方会周期性发送nat更新报文用来刷新nat设备上的UDP4500端口映射表象,当前nat设备上只有UDP4500的映射表象;那么当外部用户还发送UDP500端口的ESP用户数据,此数据到达nat设备由于没有映射表象,将数据丢弃,如果用户发送的是和IKE协议一样的UDP4500端口的用户ESP数据,那么就会匹配nat设备上的映射表象将流量进行转发;
10、总归来说nat场景下需要给用户ESP数据加上传输层端口,由于给ESP数据加了端口,导致UDP500端口会收到IKE和ESP两种流量,系统无法区分。所以把ike的流量添加一个标记用来区分,但是ike流量添加了标记考虑到兼容性,添加了标记还使用500端口可能会导致其他设备无法识别,所以综合考虑把添加了标记的ike协议报文更换为UDP4500端口。同时为了nat外部用户能够在IPSecVPN隧道建立的情况下主动发起用户ESP数据,将用户的ESP数据封装到UDP4500下,和ike协议一样。这样外部用户在隧道建立完成后主动发起ESP用户数据就可以匹配到nat设备上建立的UDP4500映射关系,如果用户数据使用500端口会被丢弃,因为nat设备上500端口映射早不存在;
二、总结:nat场景下需要给用户esp数据添加一个传输层端口让其顺利通过防火墙等nat设备,而起始添加的端口是UDP500,导致UDP500有ike和esp两种数据,此时给ike协议数据添加一个标记用来区分,但由于添加了标记考虑到兼容性所以把ike协议报文端口改为UDP4500;如果用户的ESP数据继续使用UDP500端口的话,那么等nat映射设备上的500映射端口过期的话,外部用户再主动发起udp500端口的ESP数据就会被nat设备丢包,所以也将esp数据改为4500,因为4500端口会一直被nat网关设备内的运行IPSec的设备默认持续发送的nat-keeplive刷新报文刷新,此时外部用户使用UDP4500端口就可以正常主动发起用户ESP数据了
三、用户的ESP数据封装在UDP4500端口下有两个考虑:
1、添加端口是为了顺利通过nat出口设备,因为正常情况下nat设备是基于端口转换,没有传输层端口基本都会丢包
2、封装在UDP4500端口下,主要是考虑到等添加了标记的ike协议报文使用4500端口建立起来VPN隧道后,外部用户主动发起用户封装的esp数据给到nat内部时的端口映射情况,如果esp还使用udp500就会丢包,使用udp4500和ike一样端口时就会匹配存在的映射表现转发到nat内部设备
本文链接:https://www.kinber.cn/post/4769.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: