| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> HCIE-Security Day35:IPSec-NAT-T -> 正文阅读 |
|
[网络协议]HCIE-Security Day35:IPSec-NAT-T |
NAT穿越场景在ipsec pn部署中,如果发起者比如fwc位于私网内部,而它希望与fwa之间直接建立一条ipsec隧道,这种情况下nat会对部署ipsec pn网络造成障碍。 在多站点企业中,有的站点连动态的公网IP地址都没有,只能先由网络中的nat设备进行地址转换,然后才能访问internet,此时如果同时需要和另一个站点建立ipsec通道的话,就存在问题。 IPSec是用来保护报文不被修改的,而NAT却专门修改报文的IP地址,所以肯定存在问题。 协商IPSec的过程是由isakmp报文完成的,isakmp报文封装在udp中,源目端口都是500,nat设备可以转换该消息的ip地址和端口,因此isakmp消息可以完成nat转换,协商得到IPSec sa,但是数据流量是通过ah或者 esp进行封装的,在nat转换过程中存在问题。 NAT对IPSec的影响IKE协商问题NAT转换会改变对等体的ip地址,在IKEV1主模式+预共享密钥验证下,由于依赖IP地址标识身份,所以存在问题。 由于野蛮模式不依赖ip地址标识身份,使得野蛮模式+预共享密钥验证不影响。 解决方式开启NAT-T。 AH+NAT问题NAT的存在对其是致命的。因为AH对包括最外层IP头部的整个包进行认证。但是地址转换会改变IP地址,从而破坏ah的hash值,因此使用ah的ipsec隧道无法穿越nat设备。 传输模式 隧道模式 no-pat+ESP传输模式问题隧道模式默认支持no-pat下形式的nat穿越no-pat+ESP隧道模式下,ESP对数据包的hash不包括外层ip报头字段,这解决了认证范围包括最外层IP头部情况下的NAT问题,足以满足隧道模式下ESP报文的认证和加密。 传输模式默认不支持no-pat下形式的nat穿越由于TCP校验问题,在不进行加密的情况下,因为NAT修改了IP地址,所以导致TCP报文中校验和字段变更。这个字段的变更导致了ESP认证范围内数据的变更,使得其无法通过接收方的验证。 在进行加密的情况下,由于TCP首部作为载荷被加密,NAT后虽然IP地址发送了变更,但是由于TCP头部被加密,NAT设备无法更新TCP校验和,接收方收到后进行TCP报文校验时会失败。 TCP报文
napt+ESP问题NAPT转换,多个内部地址复用一个外部地址,并且使用传输层端口来区分不同流量,由于ESP报文中TCP的端口已经加密无法修改,所以对于同时转换端口的NAT来说,ESP没法支持。 解决方式在建立IPSec隧道的两个防火墙上同时开启nat穿越功能(NAT traversal)。开启后,当需要穿越NAT设备时,就会在最外层IP头部和ESP头部之间插入一个标准UDP头部,使得ESP报文被封装在UDP头中,UDP头部中源目端口均是4500。这样就可以承载NAT修改IP地址和端口地址的需求了。 NAT表项老化问题NAT设备上的NAT会话表项有一定的存活时间,如果IPSec隧道建立后长时间没有报文进行NAT穿越,NAT设备会删除该NAT会话表项,这将导致在NAT设备外网侧的对等体无法继续传输数据。为防止NAT表项老化,NAT设备内网侧的IKE SA会以一定的时间间隔向对端发送NAT Keepalive报文,以维持NAT会话的存活。 IPSEC与NAT并存问题在防火墙的转发流程中,NAT在上游环节,IPSec在下游环节,所以ipsec流量会收到nat处理流程的干扰,即原本应该进入IPSec隧道的流量一旦命中nat策略就会进行nat转换,转换后的流量不会再匹配ipsec中的acl了,也就不会进行IPSec处理了。 IPSEC+源NAPT需要进入ipsec隧道的流量提前匹配了源NAPT策略,导致地址发生改变,没有匹配到IPSec通过ACL定义的感兴趣流,从而没有进入ipsec隧道。 解决方式 在nat策略中配置优先级最高的针对ipsec流量不进行地址转换的策略,并且该策略中定义的流量范围是其他策略的子集。这样ipsec流量会先命中不进行nat转换的策略,地址不会被转换,也就不会影响下面ipsec 环节的处理,而需要进行nat处理的流量也可以命中其他策略正常转换。 IPSEC+NAT Server需要进入ipsec隧道的流量提前匹配了nat server生成的反向server-map表项,导致地址发生改变,没有匹配到IPSec通过ACL定义的感兴趣流,从而没有进入ipsec隧道。 解决方式 配置nat server时指定no-reverse参数,不生成反向server-map表项。 NAT穿越分析 NAT-T原理IKEV1NAT穿越协商1、协商通信双方是否支持NAT-T开启NAT 穿越后,IKEV1协商第一阶段的1、2消息(野蛮模式也是1、2消息)会携带标识NAT穿越能力(NAT-T)的vendor id载荷,用于检查通信双方是否支持NAT-T,当双方都在各自的消息中包含了该载荷时,才会进行相关的NAT-T协商。 2、探测NAT网关是否存在及其所在位置IKEV1协商第一阶段的3、4消息(野蛮模式2、3消息)会携带NAT-D(NAT-Discovery)载荷,用于探测两个要建立IPSec隧道的防火墙之间是否存在nat网关以及nat网关的位置。 协商双方通过NAT-D载荷向对端发送源和目的IP地址与端口的HASH值,接收方收到3、4消息(野蛮模式2、3消息)后对源目IP地址和端口进行hash并与发来的hash值进行对比,就可以判断地址和端口是否被nat设备修改过。NAT-D载荷有两个,第一个为对端ip和端口的hash值,第二个为本端ip和端口的hash值。 解决网络设备如何知道什么时候要加UDP报头的问题 发现NAT网关后,从IKEV1协商第一阶段的5、6消息(野蛮模式从第3个消息)会将ISAKMP消息UDP的源目端口修改为4500,并标识non-esp marker。 3、协商封装模式IKEV1协商第二阶段会协商是否使用NAT穿越以及NAT穿越时IPSec报文的封装模式:UDP封装隧道模式报文和UDP封装传输模式报文。 IKEV1为ESP报文封装UDP头、UDP报文端口号为4500.当封装后的报文通过NAT设备时,NAT设备对该报文的外层IP头和增加的UDP头进行地址和端口号转换。? VID:vendor id? IKEV2NAT穿越协商1、探测NAT网关位置开启NAT穿越后,IKE的发起者和响应者都在IKE SA INIT消息对中包含类型为NAT-DETECTION-SOURCE-IP和NAT-DETECTION-DESTINATION-IP的通知载荷。这两个通知载荷用于检测在将要建立IPSec隧道的两个防火墙之间是否存在NAT设备,如果收到的NAT-DETECTION-SOURCE-IP没有匹配到数据包中源IP和源端口的hash,则说明对端位于NAT网关后,如果收到的NAT-DETECTION-DESTINATION-IP没有匹配到数据包中目的IP和端口的hash,说明本端位于NAT网关后。 发现NAT网关后,IKEV2协商的IKE-AUTH消息会将ISAKMP消息UDP的源目端口修改为4500,并标识non-esp marker。 2、协商封装模式IKEV2为ESP报文封装UDP头、UDP报文端口号为4500.当封装后的报文通过NAT设备时,NAT设备对该报文的外层IP头和增加的UDP头进行地址和端口号转换。? NAT穿越配置
实验一:两个网关之间存在NAT设备时通过IKE方式协商IPSec VPN隧道(总部通过Name认证分支) 需求和拓扑
分支机构的员工需要访问总部的服务器。由于服务器信息较机密,数据经过Internet传输不安全,故需建立IPSec隧道来对传输数据进行加密。 操作步骤 1、配置接口地址和安全区域 2、配置域间安全策略
3、配置静态路由
4、配置IPSEC 4.1、配置感兴趣流
4.2、配置ipsec安全提议
4.3、配置ike安全提议
4.4、配置ike peer
4.5、配置ipsec policy
4.6、接口应用IPSec policy?
5、配置NAT
验证和分析 1、pc2发起访问,之后pc1和pc2之间可以互访,pc2同时可以访问公网。 在f2上检查nat 转换session表项
?2、f1上可以查看到对应的ike sa
3、f3上可以查看到对端为f1的ike sa,f3是发起方,标志位是ST
4、f1上可以查看到一对双向的IPSec sa,对应f3
5、f3上可以查看到一对双向IPSec sa,对应f1
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:34:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |