关于IPSEC 500、4500端口的问题,运营商封锁了500 4500端口,固定IP端可以修改ipsec的默认端口号吗?
解答:ipsec 500 4500端口是由RFC标准规定的,不可以修改。这两个端口分别用于Internet Security Association and Key Management Protocol (ISAKMP)和UDP-encapsulated ESP and IKE1。当ipsec在NAT环境下工作时,需要在ESP上加一层UDP封装,以解决NAT对ipsec的影响1。因此,ipsec会把端口从500改为4500,后续的ESP流量前面加一个UDP的头,端口45001
请排查对端网关设备应用的访问控制策略,确保其满足以下条件:
- 出方向和入方向均放开UDP协议500及4500端口。
- 出方向和入方向均放行VPN网关实例的IP地址或IPsec连接网关IP地址。
1.port 500是 Internet Security Association and Key Management Protocol (ISAKMP)端口号
2.UDP PORT 4500是 UDP-encapsulated ESP and IKE端口号
首先解释一下正常IPSEC的封装和端口:
1.IPSEC建立分为三个阶段:phase1(建立IKE SA)、phase1.5(xauth,可选)、phase2(建立最终SA并协商SA参数)
2.IPSEC建立好之后,用ESP协议封装报文。ESP是等同于UDP\TCP的协议,IP协议号是50(因此ESP并不是UDP的上层协议,而是跟UDP\TCP平行协议),封装如下:
下面是一个正常的IPSEC起来后的ESP封装,从抓包看,并没有所谓的Port
那为什么在测试中抓包里面能看到ESP都有端口呢?如 下图所示
通过对比正常IPSEC 封装流量和院里抓包流量,很明显发现多了一层UDP封装,这是因为NAT的存在。
因为网络中的NAT的存在,导致IPSEC 的ESP协议 在NAT环境下最多只能有一个主机能建立通道,无法实现多台机器同时在NAT环境下进行ESP通信(因为仅靠源地址和目标地址无法区分多台NAT后的主机)。因此为了解决这个问题,RFC 3715 IPsec-Network Address Translation (NAT) Compatibility Requirements对这个问题进行了解决。解决方法就是在ESP上面在加一层UDP封装。
在RFC rfc 4306 Internet Key Exchange (IKEv2) Protocol中了做了如下阐述:
Port 4500 is reserved for UDP-encapsulated ESP and IKE. When working through a NAT, it is generally better to pass IKE packets over port 4500 because some older NATs handle IKE traffic on port 500 cleverly in an attempt to transparently establish IPsec connections between endpoints that don't handle NAT traversal themselves.
从上面标黄色的描述可以看出,只有当IKE在阶段一进行NAT监测时候,发现网络中存在NAT,IKE会把端口从500改到4500,后续的ESP流量前面加一个UDP的头,端口4500
下面我找了一个详细的图来描述在NAT环境下IPSEC的过程,
从上图中,可以看到刚开始用500,后面对方监测到有NAT,马上就把端口改到4500,同时追加UDP封装到IKE和ESP上面。
如何监测到到NAT存在,用抓包举例,下图是从抓包找到的IKE_SA_Init消息里面的带的字段,这两个字段里面的data内容是对源地址和源端口的digest,对方收到这个digest后,跟收到的地址和端口进行同样的digest比较,如果不一致,就说明网络中存在NAT。
现在拿抓包来解释UDP 4500的由来。
56769的报文的端口还是500,56770是EPDG回复过了的,56771是再次发起重新请求,端口已经改为4500,所以后续的都是4500
最后总结一下,在vowifi场景下,NAT是肯定存在的,所以500端口只有第一个请求才会用到,后面都是4500,(而且4500这个 UDP-encapsulated ESP and IKE是不可以配置和更改的,是RFC规定死的 )。
但是回到标准IPSEC建立过程中,只有500,没有4500(因为正常IPSEC是不需要考虑NAT的存在),所以4500这个端口的引入,并不是IPSEC协议本身规定的,而是NAT的存在,引入的一个UDP封装 for ESP 和IKE。
几个问题:
1.如果网络中封堵了4500和500,IPSEC如何work?
【答】:封堵500,IPSEC请求都发不出去;如果只封堵4500,在没有NAT或者1:1映射的NAT情况下,IPSEC可以工作。
2. NAT的存在会对IPSEC有其它影响吗?
[答】:有,某些网关或者设备的NAT做的不是非常标准,会有问题。比如 有些的NAT设备具有端口固定的功能,也就是进行NAT转换后只改变地址而不改变端口,后续IKE协商如果继续用500端口协商就会出现问题