在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。

IPSec NAT穿越原理相关推荐

  1. IPSec协议抓包详解和IPSec NAT穿越报文解析

    目录 协议概述 2.IPSec作用 3.认证方式 3.1.预共享密钥 3.2.数字证书 4.ESP加密算法 4.1.ESP完整性检测 4.2.ESP防重放 4.3.ESP防窃听 5.IPSec工作原理 ...

  2. IPsec NAT穿越

    UDP封装 ESP协议对数据包的上层(TCP/UDP)数据封装后,上层数据被加密保护,这样NAT无法获取正确的端口信息,从而使得转换发生失败.用IPv4协议中标准UDP协议头封装IPSec:数据包,构 ...

  3. IPSec NAT穿越静态配置和问题

    网络拓扑 |-------------------| |-------------------|| | | || 192.168.1.115 | <---------> | 192.168 ...

  4. NAT穿越(NAT-T)原理

    IPSec NAT 穿越简介 IPSec NAT穿越的场景: 本质上解决ESP协议无法提供转换端口,插入UDP 4500端口 有以下两种场景,需要进行进行NAT穿越. 场景一.FW既做IPSEC网关, ...

  5. IPSec的NAT穿越

    IPSec的NAT穿越 本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途. msn: yfydz_no1@hotmail.c ...

  6. IPSEC点到多点(SA+NAT穿越)策略模板方式成功配置

    IPSEC点到多点(SA+NAT穿越)策略模板方式成功配置 USG5500A 与USG5500C.USG5500D建立IPSEC VPN Tunnel,其中USG5500C穿越USG5500B NAT ...

  7. NAT 原理与NAT穿越

    转自:https://blog.csdn.net/whoamiyang/article/details/51992208?utm_source=blogxgwz6 最近在看负载均衡方面的东西中很多都提 ...

  8. Cisco IOS Unicast NAT 工作原理 [一]

    NAT技术的出现源于对私有网络安全性的要求以及IPv4地址不够用的现状.Cisco IOS所支持的常用NAT技术有以下几种.今天发现公司同事对Cisco NAT的实现理解的不好,导致配置出问题.这里就 ...

  9. virtual private network 与IPSec协议工作原理

    1.什么是数据认证,有什么作用,有哪些实现的技术手段? 数字认证证书它是以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密.数字签名和签名验证,确保网上传递信息的安全性.完整性. 使用了数 ...

最新文章

  1. 面向对象编程思想(2)--策略模式
  2. 万能素材库_自媒体运营必备3款黑科技工具,一个万能素材网站,你都在用吗?...
  3. scrapy 序列化写入器 ——ItemExporter
  4. C++编写简单的俄罗斯方块游戏
  5. 互联网高并发之Hystrix实现服务隔离和降级
  6. php微博发布时间,PHP格式化显示时间函数,用于微博、社交媒体等,类似豆瓣
  7. 活着,总有你看不惯的人,也有看不惯你的人.
  8. MYSQL中删除重复记录的方法
  9. openmp 并行 速度更慢_OpenMP和C并行for循环:为什么我的代码在使用OpenMP时会变慢?...
  10. 安川服务器显示fn001,安川伺服驱动器功能参数设置
  11. 企业选择WMS仓库管理系统免费版是否更好
  12. 【软件网每日新闻播报│第9-20期】
  13. PHP队列研究一(数据库任务队列)
  14. Excel制作增长趋势图
  15. cocos2dx-9.键盘事件-实现精灵的连续移动
  16. 多种文字翻译软件-翻译常用软件
  17. 基于ARMv8架构的mini操作系统
  18. 10月10日科技资讯 |罗永浩向老同事道歉;三星漏洞已波及四千万用户;Clojure 1.11 即将发布 | 极客头条
  19. 2020安徽省大学生程序设计大赛题解——F 跳蛙出行
  20. WSN 数据链路层协议 SMAC,TMAC…TRAMA...BMAC ,XMAC, ZMAC

热门文章

  1. QGIS编译(跨平台编译)之十六:Expat编译(Windows、Linux、MacOS环境下编译)
  2. idea报错:Parameter ‘userName‘ not found. Available parameters are [userinfo, param1]] with root cause
  3. 用SLES库安装MySQL NDB Cluster7
  4. 什么是导航与位置服务器,GPS导航和GPS定位仪与GPS定位器的区别在哪?
  5. 高考工科计算机类专业学什么区别,“理学”专业和“工学”专业都有哪些区别?...
  6. python批处理栅格转点_三种利用Python批量处理地理数据的方法——以栅格数据投影转换为例...
  7. 爱奇艺2020校招Java方向笔试题(第二场)
  8. 个人MarkDown语法学习
  9. 推荐几种好用的网页设计工具
  10. win10最流畅版本