NAT-T下的端口浮动

1. IKE端口浮动

IPsec在隧道建立第一第二阶段主要进行加密方式、加密策略等信息的协商,这部分功能是通过IKE协议来实现的。
IKE协议默认端口为500,但是如果IPsec隧道传输路径上存在NAT设备,那么IKE的端口会从500浮动到4500端口,这样做最主要的目的是:

避免某些NAT设备不转换源端口为500的报文,从而导致NAT穿越失败。

因此IKE通常情况下会同时监控UDP的两个端口:500和4500。

2. IKE端口是否浮动

前一段时间遇到场景:隧道可以正常建立成功,但是数据不通。查了一周时间确定是由于对方设备不支持IKE端口浮动,即使在NAT穿越情况下也未进行端口浮动,依然使用了500端口。
下面是基于openswan源码整理的NAT-T相关的接口及关系:
在这里插入图片描述

2.1 探测是否支持NAT-T

发起者 响应者 HDR, SA, VIDs HDR, SA, VID 发起者 响应者

在这里插入图片描述
在这里插入图片描述
IPsec的隧道的发起方会在第一阶段的第一个报文中将本端支持的NAT-T标准以负载VID的方式发送到对端,在openswan源码中VID与NAT-T类型对应关系如下:

序号VID类型对应的数值NAT-T类型支持端口浮动
1VID_NATT_IETF_00105NAT_TRAVERSAL_IETF_00_01
2VID_NATT_IETF_02_N106NAT_TRAVERSAL_IETF_02_03
3VID_NATT_IETF_02107NAT_TRAVERSAL_IETF_02_03
4VID_NATT_IETF_03108NAT_TRAVERSAL_IETF_02_03
5VID_NATT_RFC109NAT_TRAVERSAL_RFC

对端根据接收到的标准(一般包含多个)中选择其中一个VID作为NAT-T的类型,而VID选择的依据便是**“选择数值大的标准”**,也就是上表中的VID_XXX的优先级随着数值增加而依次递增:VID_NATT_RFC > VID_NATT_IETF_03 > VID_NATT_IETF_02 > VID_NATT_IETF_02_N > VID_NATT_IETF_00。

2.2 探测路径上是否存在NAT设备

在主模式下,NAT设备的探测是在第三四个报文中通过NAT-D来探测的,探测的方式就计算本端IP地址和端口的HASH1值和对端IP地址和端口的HASH2值,然后将这两个哈希值同时以NAT-D负载的方式发送给对方设备,对方收到后通过计算接收到的报文中源和目的的IP地址和端口的哈希值与NAT-D负载中的哈希值进行比较:

发起者 响应者 HDR, SA, VIDs HDR, SA, VID HDR, KE, Ni, NAT-D, NAT-D HDR, KE, Nr, NAT-D, NAT-D *HDR,IDii, [CERT, ] SIG_I *HDR,IDii, [CERT, ] SIG_R 发起者 响应者

在这里插入图片描述
在这里插入图片描述
判断依据:

  • 计算对端的IP地址和端口的哈希值hash1, 然后与报文中NAT-D中对端计算的哈希值HASH1进行比较,如果不同,说明对端的IP地址或者端口发生了变化,因此对端设备是位于NAT设备之后的。
  • 计算本端的IP地址和端口的哈希值hash2, 然后和报文中NAT-D负载中对端的计算结果HASH2进行比较,如果不同,则说明本端的IP地址或者端口发生了变化,因此本端设备是位于NAT设备之后的。
  • 由于响应端在第三个报文时便可以知道链路上的NAT情况,但是发送端还不清楚,因此响应端需要将本端和对端的哈希值计算后填充到第四个报文的NAT-D负载中发送给发起端。
    在这里插入图片描述

2.3 openswan源码说明

在openswan源码中,NAT-T的类型(包括选用的NAT-T标准, NAT情况)存储在st->hidden_variables.st_nat_traversal之中,用位来表示(高31---- 低0):
其中:

NAT-T类型(标准)st_nat_traversal中的位
NAT_TRAVERSAL_IETF_00_01第1位
NAT_TRAVERSAL_IETF_02_03第2位
NAT_TRAVERSAL_RFC第3位
对端设备NAT第31位
本端设备NAT第30位

3. IKE端口浮动几个疑问

3.1 IKE端口浮动的原因

端口浮动的原因在于有些NAT设备对于500端口的报文不做NAT转换,从而导致NAT穿越失败。至于都包括哪些设备,暂不清楚。因此将端口浮动到4500后,方便NAT设备进行映射转换,从而实现NAT-T穿越。

3.2 IKE端口浮动是必须的吗?

首先说明,端口浮动不是必须的,但是现在通常情况下是进行端口浮动的:即如果有NAT-T存在,则IKE端口会从500切换到4500。

3.3 IKE端口浮动一定是浮动到4500吗?

IKE端口浮动肯定是将端口由500浮动到4500的(包括源端口和目的端口),但是中间的NAT设备如果支持端口映射的话,那么一般是将源端口做一个映射, 源端口做映射对于IPSEC影响并不大,但是要求IPsec能够响应来自任意端口的报文(下图中的X便是经过NAPT映射后的IPsec报文)。NAT设备做端口映射的目的主要为了为了实现多路分解和复用。

4500 -> 4500
x->4500
x->4500
发起端
发起端NAT
响应端NAT
响应端
### 配置NAS设备上的端口映射以实现下载软件功能 为了使外部网络能够访问家庭内部的NAS并执行诸如添加下载任务等功能,需要通过路由器配置端口转发或端口映射。以下是具体的操作指南: #### 设置固定IP地址 确保NAS拥有固定的局域网内IP地址是必要的前提条件之一。这可以通过调整路由器中的DHCP服务来完成,指定特定MAC地址对应的静态IP分配[^3]。 ```bash # 路由器设置页面中找到DHCP选项卡下的静态地址池或者保留列表, # 输入NAS MAC地址及其期望获得的固定IPv4地址。 ``` #### 启用路由器端口转发 登录到家用路由器管理界面后,定位至虚拟服务器/NAT/QoS等相关菜单项下寻找端口映射/转发条目。对于大多数情况而言,需开放如下常用TCP端口号以便于不同类型的文件传输协议运作正常: - BitTorrent 下载客户端监听范围内的任意未被占用整数(例如51413) 创建新的规则时应指明目标主机即上述已设定好的NAS IP,并确认保存更改生效[^1]。 #### 动态域名解析(DNS)服务选型建议 考虑到住宅宽带可能不具备恒定不变的WAN侧出口参数特征——也就是常说的“浮动公网IP”,因此选用DynDNS或其他第三方提供的DDNS方案不失为一种明智之举;相比之下官方渠道提供的同类特性往往存在响应速度方面不尽如意之处。 #### 测试连通性 最后一步是要验证整个过程是否成功实施。可以从互联网任一位置尝试Ping命令探测或是利用浏览器直接输入http://yourdomain.com:portnumber这样的URL字符串去检验Web控制面板能否顺利加载显示出来。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叨陪鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值