IPSec NAT穿越原理
创始人
2024-03-03 17:07:41
0

在IPSec VPN部署中,如果发起者位于私网内部(如下图FW_C),而它希望与FW_A之间直接建立一条IPSec隧道,这种情况下NAT会对部署IPSec VPN网络造成障碍。

PC2发业务报文给PC1,IPSec先对IP包头或端口信息进行验证,报文到达NAT设备时,IP地址或端口号会被转换,报文到达FW_A的时候,FW_A进行IPSec数据包的验证,下面分别看一下IPSec使用 AH 和 ESP 两种安全协议时报文能否通过。

  • AH 协议:因为 AH 对数据进行完整性检查,会对包括 IP 地址在内的整个IP 包进行Hash运算。而NAT改变 IP 地址,从而破坏 AH 的 Hash 值。 因此 AH 报文无法通过 NAT 网关。

  • ESP 协议:ESP 对数据进行完整性检查,不包括外部的 IP 头, IP 地址转换不会破坏 ESP 的 Hash 值。但 ESP 报文中 TCP 的端口已经加密无法修改,那么NAT设备读不到端口号,不能进行正常的地址转换。

为了解决这个问题,必须在建立 IPSec 隧道的两个网关上同时开启 NAT 穿越功能(对应命令行 nat traversal)。开启 NAT 穿越功能后,当需要穿越 NAT 设备时, ESP 报文会被封装在一个 UDP 头中,源和目的端口号均是 4500。有了这个 UDP 头就可以正常进行转换。

NAT设备对于私网用户来说是不可见的,这里就有个问题,网络设备怎么知道是否有NAT的存在,什么时候该添加UDP报头,什么时候不该添加?

IPSec一般要先经过IKE协商,交互密钥之后才发送数据。NAT-T(NAT Traversal)技术在IKE协商阶段通过某种机制来发现是否有NAT的存在。有NAT存在的时候添加UDP报头,没有NAT的时候就不添加。

下面分别介绍一下采用 IKEv1 和 IKEv2 时是如何进行 NAT 穿越。

IKEv1 协商 NAT 穿越

  1. 开启 NAT 穿越时, IKEv1 协商第一阶段的前两个消息会发送标识 NAT 穿越(NAT Traversal,简称 NAT-T)能力的 Vendor ID 载荷(主模式和野蛮模式都是)。用于检查通信双方是否支持 NAT-T。


    当双方都在各自的消息中包含了该载荷时,才会进行相关的 NAT-T 协商。

  2. 主模式消息 3 和消息 4(野蛮模式消息 2 和消息 3)中发送 NAT-D(NAT Discovery)载荷。NAT-D 载荷用于探测两个要建立 IPSec 隧道的网关之间是否存在 NAT 网关以及 NAT网关的位置。
    通过协商双方向对端发送源和目的的 IP 地址与端口的 Hash 值,就可以检测到地址和端口在传输过程中是否发生变化。若协商双方计算出来的 Hash 值与它收到的 Hash 值一样,则表示它们之间没有 NAT。否则,则说明传输过程中对 IP 或端口进行了 NAT 转换。第一个 NAT-D 载荷为对端 IP 和端口的 Hash 值,第二个 NAT-D 载荷为本端 IP 和端口的 Hash。
     

  3. 发现 NAT 网关后,后续 ISAKMP 消息(主模式从消息 5、野蛮模式从消息 3 开始)的端口号转换为 4500。ISAKMP 报文标识了“Non-ESP Marker”。

  4. 在第二阶段会启用 NAT 穿越协商。在 IKE 中增加了两种 IPSec 报文封装模式:UDP 封装 隧 道 模 式 报 文 ( UDP-Encapsulated-Tunnel ) 和 UDP 封 装 传 输 模 式 报 文(UDP-Encapsulated-Transport)。通过为 ESP 报文封装 UDP 头,当封装后的报文通过NAT 设备时, NAT 设备对该报文的外层 IP 头和增加的 UDP 头进行地址和端口号转换。UDP 报文端口号修改为 4500。

IKEv2 协商 NAT 穿越

  1. 开启 NAT 穿越后, IKE 的发起者和响应者都在 IKE_SA_INIT 消息对中包含类型为NAT_DETECTION_SOURCE_IP 和 NAT_DETECTION_DESTINATION_IP 的通知载荷。这两个通知载荷用于检测在将要建立 IPSec 隧道的两个网关之间是否存在 NAT,哪个网关位于 NAT 之后。如果接收到的 NAT_DETECTION_SOURCE 通知载荷没有匹配数据包 IP 头中的源 IP 和端口的 Hash 值,则说明对端位于 NAT 网关后面。如果接收到的AT_DETECTION_DESTINATION_IP 通知载荷没有匹配数据包 IP 头中的目的 IP 和端口的 Hash 值,则意味着本端位于 NAT 网关之后。

  2. 检测到 NAT 网关后,从 IKE_AUTH 消息对开始 ISAKMP 报文端口号改为 4500。报文标识“Non-ESP Marker”。

  3. IKEv2 中也使用 UDP 封装 ESP 报文,当封装后的报文通过 NAT 设备时, NAT 设备对该报文的外层 IP 头和增加的 UDP 头进行地址和端口号转换。UDP 报文端口号修改为 4500。

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...