• 四、IPSec NAT穿越


    ——————————————————————————————————————————————————

    1、IPSec NAT穿越

    NAT技术主要用于解决IPv4地址紧缺问题,在目前网络中NAT应用非常广泛,特别是在企业网出口网关大都使用了NAT技术解决公网地址不足的问题。IPSec提供了端到端的IP通信的安全性,可以实现同一企业集团不同地域分支之间的低成本安全互连。但是IPSec和NAT技术本身存在不兼容的问题。

    1、NAT为了完成地址转换,会修改IP报文头的IP地址。

    2、IPsec要保证数据的安全,因为会加密数据和校验数据,AH验证范围包含了IP报文头,而NAT修改IP报文头会导致AH检查失败。因此使用AH保护的IPSec隧道是不能穿越NAT网关的。

    3、ESP协议保护的部分不包含IP报文头(对隧道方式而言是外层IP报文头)

    还有个不兼容的问题,当NAT改变了某个包IP地址和端口,通常更新TCP和UDP校验和,当TCP或UDP校验使用了ESP来加密,就无法更新校验和。导致失败。

    1、ESP封装传输模式:TCP和UDP报文头使用ESP加密,从而无法更改校验和,由于IP地址或端口号已经被NAT更改,目的地的校验和检验就会失败,导致ESP封装的传输模式无法与NAT并存。

    2、ESP封装隧道模式:将整个原始IP包进行加密,且在ESP头外面新增加了一层IP头部,所以NAT如果只改变最前面的IP地址对后面受到保护的部分是不受影响的。因此,IPSec采用ESP的隧道模式来封装数据可以和NAT共存。

    ——————————————————————————————————————————————————

    2、IPSec穿越NAT的处理

    IPSec穿越NAT的流程:

    NAT穿越(简称NAT-T):建立IPSec隧道的两端需要进行NAT穿越能力协商,这是在IKE协商的前两个消息中进行的,通过Vendor ID载荷指明的一组数据来标识。

    NAT网关发现:通过NAT-D载荷来实现的,在IKE peer之间发现NAT网关的存在以及确定NAT设备在Peer的哪一侧,NAT侧的Peer作为发起者,定期发送NAT-Keepalive报文,使NAT网关确保安全隧道处于激活状态。

    ESP报文正常穿越NAT网关:IPSec穿越NAT,简单来说就是在原报文的IP头和ESP头间增加一个UDP报文头,这样ESP报文穿越NAT网关时,NAT对该报文的外层IP和增加的UDP报文头进行地址和端口的转换。

    转换后到达对端,与普通IPsec处理方式相同,但在发送响应报文时也要在IP头和ESP头之间增加一个UPD报文头。

    在这里插入图片描述

    ——————————————————————————————————————————————————

    3、IKEv2与NAT穿越

    ——————————————————————————————————————————————————

    3.1、NAT-T能力检测

    NAT-T能力检测在IKE协商的前两个消息中交换完成,通过在消息中插入一个标识NAT-T能力的Vendor ID载荷来告诉对方自己对该能力的支持。如果双方都在各自的消息中包含了该载荷,说明双方对NAT-T都是支持的。只有双方同时支持NAT-T能力,才能继续进行其他协商。

    ——————————————————————————————————————————————————

    3.2、NAT网关发现

    当存在NAT设备时必须使用UDP传输,所以在IKEv2中的第一阶段协商中必须先探测是否存在NAT设备,也就是NAT探测。通过发送NAT-D载荷来实现NAT探测是目前比较流行的方法。

    探测通信链路中是否存在NAT设备,在协商双方增加两个Notify载荷,一个包括NAT_DETECTION_SOURCE_IP,标识发起方的IP地址;一个包括NAT_DETECTION_DESTINATION_IP,标识目的方的IP地址。这两个载荷主要是为了探测通信双方是否存在NAT设备,并且确定哪一方处在NAT设备之后。

    在IKEv2中,NAT_DETECTION_SOURCE_IP和NAT_DETECTION_DESTINATION_IP在Notify消息类型中的编号分别为:16388和16389。载荷使用通用的ISAKMP载荷头,载荷的值是SPIs、IP地址、发送数据包的端口号的hash值。

    SPIs为HDR载荷中的安全索引参数。
    IP为数据包发出方或接收方的IP地址。
    Port为数据包发出方或接收方的端口号。

    当接受方收到数据包后,对数据包中的SPIs、IP地址、端口号进行hash运算,并与Notify载荷进行比较,如果不匹配,则说明通信链路中存在NAT设备:如果与NAT_DETECTION_SOURCE_IP不匹配,则说明发起端在NAT设备之后;如果与NAT_DETECTION_DESTINATION_IP不匹配,则说明接受端在NAT设备之后。

    ——————————————————————————————————————————————————

    3.3、NAT穿越的启用

    在第一阶段协商完成之后,协商双方均已经明确是否存在NAT,以及NAT的位置。至于是否启用NAT穿越,则由快速模式协商决定。

    NAT穿越的启用协商在快速模式的SA载荷中进行。传输模式下,协商双方可向对端发送IPSec报文的原始地址,从而使对端有可能在NAT转换之后,对TCP/IP进行校验和修正。

    ——————————————————————————————————————————————————

    3.4、NAT-keepalive

    在NAT网关上NAT会话有一定的存活时间,因此,隧道建立后如果中间长时间没有报文穿越,就会导致NAT会话被删除,这样将导致无法通过隧道传输数据。解决方法是在NAT会话超时前,发送一个NAT-keepalive给对端,维持NAT会话的存活。

    ——————————————————————————————————————————————————

    4、IPSec NAT穿越示例(网关之间存在NAT设备)

    总部属于192.168.100.0/24子网,通过接口G1/0/1与FW2连接。
    分支机构属于192.168.1.0/24子网,通过接口G1/0/1与FW1链接。
    FW1和FW2路由可达。
    AR2为NAT网关,分支用户必须经过NAT网关才能访问总部。

    这种很好理解,两个机构通过Internet互联网连接,申请的都是固定IP,运营商内部进行了NAT转换,又或者是,两机构申请了固定IP,总部没有NAT转换设备,而分支机构有NAT设备,防火墙在NAT设备的后侧。

    在这里插入图片描述

    ——————————————————————————————————————————————————

    配置接口,网络互通

    FW1:

    firewall zone trust 
    add int g1/0/1
    firewall zone untrust 
    add int g1/0/0                             
    
    security-policy
    default action permit  
    
    int g1/0/0
    ip add 1.1.1.1 30
    int g1/0/1
    ip add 192.168.1.254 24
    
    ip route-static 0.0.0.0 0.0.0.0 1.1.1.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    FW2:

    firewall zone trust 
    add int g1/0/1
    service-manage ping permit
    firewall zone untrust 
    add int g1/0/0    
    service-manage ping permit                         
    
    security-policy
    default action permit  
    
    int g1/0/0
    ip add 2.1.1.2 30
    service-manage ping permit
    int g1/0/1
    ip add 192.168.100.254 24
    service-manage ping permit
    
    ip route-static 0.0.0.0 0.0.0.0 2.1.1.2 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    AR2:

    int g0/0/0
    ip add 1.1.1.2 30
    int g0/0/1
    ip add 3.1.1.1 30
    
    ip route-static 0.0.0.0 0.0.0.0 3.1.1.2
    ip route-static 192.168.1.0 255.255.255.0 1.1.1.1
    
    acl number 3000  
     rule 5 permit ip source 192.168.1.0 0.0.0.255
     rule 10 permit ip source 1.1.1.0 0.0.0.3
    interface GigabitEthernet0/0/1
     nat outbound 3000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    AR1:

    interface GigabitEthernet0/0/0
     ip address 3.1.1.2 255.255.255.252 
    interface GigabitEthernet0/0/1
     ip address 2.1.1.2 255.255.255.252 
    
    ip route-static 1.1.1.0 255.255.255.252 3.1.1.1
    ip route-static 192.168.100.0 255.255.255.0 2.1.1.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    PC1-PC2已经经过转换了。

    在这里插入图片描述
    FW1-FW2之间也是通的。

    在这里插入图片描述

    ——————————————————————————————————————————————————

    创建ACL,定义由子网192.168.1.0/24去子网192.168.100.0/24的数据流

    FW1:
    acl number 3100
    rule permit ip source 192.168.1.0 0.0.0.255 destination 192.168.100.0 0.0.0.255
    
    • 1
    • 2
    • 3

    ——————————————————————————————————————————————————

    创建IPSec安全提议

    FW1:
    ipsec proposal Sec                                                                                                 
    esp au sha2-256                                                                                 
    esp en aes-128 
    
    FW2:
    ipsec proposal Sec                                                                                                 
    esp au sha2-256                                                                                 
    esp en aes-128 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ——————————————————————————————————————————————————

    创建IKE安全提议及IKE对等体

    FW1:
    ike local-name fw1             **配置IKE协商时的名称类型ID**
    
    ike proposal 5                 **配置IKE安全提议**
    en aes-128 
    au sha2-256 
    dh group14  
    
    ike peer fw1                    **配置IKE对等体**
    undo version 2
    exchange-mode aggressive
    ike-proposal 5
    pre-shared-key huawei@123 
    local-id-type fqdn 
    remote-address 2.1.1.1 
    nat traversal
    
    FW2:
    ike local-name fw2             **配置IKE协商时的名称类型ID**
    
    ike proposal 5                 **配置IKE安全提议**
    en aes-128 
    au sha2-256 
    dh group14  
    
    ike peer fw2                    **配置IKE对等体**
    undo version 2
    exchange-mode aggressive
    ike-proposal 5
    pre-shared-key huawei@123 
    local-id-type fqdn 
    nat traversal
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    ——————————————————————————————————————————————————

    创建安全策略

    FW1**IKE动态协商方式安全策略**
    ipsec policy ipvpn 10 isakmp
    security acl 3100
    ike-peer fw1
    proposal Sec
    
    FW2**策略模板方式配置IKE动态协商方式安全策略**
    ipsec policy-template temp1 10
    ike-peer fw2
    proposal Sec
    
    ipsec policy ipvpn 10 isakmp  template temp1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ——————————————————————————————————————————————————

    应用接口

    FW1:
    int g1/0/0 
    ipsec policy ipvpn
    
    FW2:    
    int g1/0/0 
    ipsec policy ipvpn
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ——————————————————————————————————————————————————

    检查结果

    在PC1上仍然可以Ping通PC2,执行dis ipsec stat,查看数据包统计信息。

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    其他用户经过NAT是不受影响的,IPSec隧道建立成功后,PC1访问PC2直接穿透NAT。

    ——————————————————————————————————————————————————

    在IKEv1中的野蛮模式下,只有3个包。

    在IKEv1协商:
    相比主模式,减少了交换信息的数目,效率高,但是最大的问题是没有对身份信息进行加密保护,不安全。华为不推荐使用野蛮模式。

    野蛮模式可以满足特定的网络环境需求:
    1、当ipsec隧道中存在nat设备时,需要启用nat穿越功能,而NAT转换会改变对等体的ip地址,由于野蛮模式不依赖ip地址标识身份,使得采用预共享密钥验证方法时,nat穿越只能在野蛮模式中实现。主模式需要开启nat-t功能适应这种环境。
    2、如果发起方的ip地址不固定或者无法预先知道,比如pppoe。而双方都希望采用预共享密钥验证方法来创建ike sa,则只能采用野蛮模式。除了野蛮模式,对于这一种场景,还可以使用模板方式。
    3、如果发起方已知响应方的策略,或者对响应者的策略有全面的了解,采用野蛮模式能够更快创建ike sa。

    更改为主模式后,ISAKMP协商交换的包6个。

    在这里插入图片描述

    ——————————————————————————————————————————————————

    1、开启V1 NAT穿越时,协商第一阶段的前两个消息会发送标识 NAT 穿越(NAT Traversal,简称 NAT-T)能力的 Vendor ID 载荷(主模式和野蛮模式都是)。用于检查通信双方是否支持 NAT-T。当双方都在各自的消息中包含了该载荷时,才会进行相关的 NAT-T 协商。

    在这里插入图片描述

    2、主模式的消息3和4中,野蛮模式的2和3中发送NAT-D(NAT Discovery)载荷,用于探测两个要建立 IPSec 隧道的网关之间是否存在 NAT 网关以及 NAT网关的位置。进行HASH计算,是否一致,一致不存在NAT设备,不一致存在NAT设备。

    FW1发送方:HASH值

    在这里插入图片描述

    第一个NAT-D载荷包含IKE对等体的IP地址和端口的Hash值,第二个NAT-D载荷包含本端的IP地址和端口的Hash值,接收方也计算这两个Hash值。两方计算的哪个Hash值不相等,表明哪个设备在NAT网关后面。

    FW2接收方:HASH值(这个截图是在FW1上看的回包,所以下图结果是反的其实)

    所以是FW1本段HASH值变化了。所以FW1在NAT网关后面。

    在这里插入图片描述

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

    当前UDP封装的是ISAKMP消息,此处增加了一个non-ESP marker(为4个值为0的字节),以示跟封装ESP报文有区别。
    在这里插入图片描述

    4、IKEv1阶段2的SA协商时,需确认是否使用NAT穿越以及NAT穿越的封装模式:UDP-Encapsulated-tunnel和UDP-Encapsulated-transport。确认后,后续传输的ESP报文将都采用UDP封装,UDP封装ESP报文时,没有non-ESP marker字段。

    ——————————————————————————————————————————————————

    使用IKEv2协商

    在这里插入图片描述
    KEv2的NAT穿越场景中,IKE协商的发起方和响应方在IKE_SA_INIT交换中增加两个N载荷,一个消息类型为NAT_DETECTION_SOURCE_IP,标识发起方的IP地址;另一个消息类型为NAT_DETECTION_DESTINATION_IP,标识响应方的IP地址。

    1、消息1和2:在IKE消息中插入两个N载荷,第一个N载荷包含本端的IP地址和端口的Hash值,第二个N载荷包含IKE对等体的IP地址和端口的Hash值,响应方也计算这两个Hash值,两方计算的哪个Hash值不相等,表明哪个设备在NAT网关后面。

    在这里插入图片描述

    2、消息3和4:完成IKE_SA_INIT后,如果发现NAT设备,则后续UDP报文端口号修改为4500。

    在这里插入图片描述

    华为防火墙NAT-T无论在IKE1和IKE2中都是默认开启的。

    在FW2上查看ipsec sa安全联盟,使用的是Template模板方式,因为不知道FW1的地址,不能主动发起连接。in和out方向NAT staversal:Y ,开启NAT穿越。

    在这里插入图片描述

    查看FW1,ISAKMP方式,作为IPSEC的发起方。

    在这里插入图片描述

    ——————————————————————————————————————————————————

    5、IPSec NAT穿越示例(出口网关为NAT设备,隧道在两网关之间部署)

    机构A和机构B的出口网关同时为NAT设备时如何建立IPSec隧道。

    两个机构分别通过FW1和FW2与Internet相连,FW1和FW2为固定公网地址,FW1和FW2同为NAT设备。

    PC1和PC2都可以访问internet,PC1与PC2之间能安全访问。

    在这里插入图片描述
    ————————————————————————————————

    完成接口、安全策略、路由等基本配置。

    **FW1**
    firewall zone trust 
     add int g1/0/1
    firewall zone untrust 
     add int g1/0/0
    
    int g1/0/0
     ip add 1.1.1.1 30
     service-manage all permit 
    int g1/0/1
     ip add 192.168.1.254 24
     service-manage all permit 
    
    security-policy
     default action permit
    
    ip route-static 0.0.0.0 0.0.0.0 1.1.1.2
    
    ip address-set to_internet type object                  **创建地址对象**
     address 0 192.168.1.0 mask 24
    ip address-set to_ipvpn type object
     address 0 192.168.100.0 mask 24
    
    
    nat-policy                                              **创建Easy nat**
     rule name to_internet                                   
     source-zone trust
     destination-zone untrust
     source-address address-set to_internet
     action source-nat easy-ip
    nat-policy
     rule name to_ipvpn
     source-zone trust
     destination-zone untrust
     source-address address-set to_internet
     destination-address address-set to_ipvpn
    
    FW2:
    firewall zone trust 
    add int g1/0/1
    firewall zone untrust 
    add int g1/0/0
    
    int g1/0/0
    ip add 2.1.1.1 30
    service-manage all permit 
    int g1/0/1
    ip add 192.168.100.254 24
    service-manage all permit 
    
    security-policy
    default action permit
    
    ip route-static 0.0.0.0 0.0.0.0 2.1.1.2
    
    ip address-set to_internet type object                  **创建地址对象**
     address 0 192.168.100.0 mask 24
     ip address-set to_ipvpn type object
     address 0 192.168.1.0 mask 24
    
    nat-policy                                              **创建Easy nat**
     rule name to_internet                                   
     source-zone trust
     destination-zone untrust
     source-address address-set to_internet
     action source-nat easy-ip                              **源地址转换**
     
    nat-policy
     rule name to_ipvpn
     source-zone trust
     destination-zone untrust
     source-address address-set to_internet
     destination-address address-set to_ipvpn               **对于去往192.168.100.0段,不转换**
    
    AR2:
    int g0/0/0
    ip add 1.1.1.2 30
    int g0/0/1
    ip add 2.1.1.2 30
    ip route-static 192.168.1.0 24 1.1.1.1
    ip route-static 192.168.100.0 24 2.1.1.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    在这里插入图片描述

    在这里插入图片描述
    ———————————————————————————————

    配置IPSec安全提议

    FW1:
    ipsec proposal Sec                                                                                                 
    esp au sha2-256                                                                                 
    esp en aes-128 
    
    FW2:
    ipsec proposal Sec                                                                                                 
    esp au sha2-256                                                                                 
    esp en aes-128 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ———————————————————————————————
    配置IKE对等体

    FW1:
    ike proposal 5 
    aut pre-share                 
    en aes-128 
    au sha2-256 
    dh group14  
    
    ike peer fw2                   
    ike-proposal 5
    pre-shared-key huawei@123
    remote-address 2.1.1.1
    
    FW2:
    ike proposal 5 
    aut pre-share                 
    en aes-128 
    au sha2-256 
    dh group14  
    
    ike peer fw1                   
    ike-proposal 5
    pre-shared-key huawei@123
    remote-address 1.1.1.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    ———————————————————————————————
    定义ACL

    FW2:
    acl number 3000
    rule permit ip source 192.168.1.0 0.0.0.255 destination 192.168.100.0 0.0.0.255
    FW1:
    acl number 3000
    rule permit ip source 192.168.100.0 0.0.0.255 destination 192.168.1.0 0.0.0.255
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ———————————————————————————————
    配置安全策略

    FW1:                          
    ipsec policy ipvpn 10 isakmp
    security acl 3000
    ike-peer fw2
    proposal Sec
    
    FW2:                          
    ipsec policy ipvpn 10 isakmp
    security acl 3000
    ike-peer fw1
    proposal Sec
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ———————————————————————————————
    应用接口

    FW1:  
    int g1/0/0
    ipsec po ipvpn
    
    FW2:  
    int g1/0/0
    ipsec po ipvpn
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ———————————————————————————————

    验证

    加了个61.134.1.100的PC。
    在这里插入图片描述
    在这里插入图片描述
    出去Internet经过NAT转换了。
    在这里插入图片描述

    去往192.168.100.0段的,走隧道了。
    在这里插入图片描述
    在这里插入图片描述

    华为官方资料:

    如果应用安全策略的接口同时配置了NAT,由于设备先执行NAT,会导致IPSec不生效,有以下两种解决方法。

    1、NAT引用的ACL规则deny目的IP地址是IPSec引用的ACL规则中的目的IP地址,避免把IPSec保护的数据流进行NAT转换。
    2、IPSec引用的ACL规则需要匹配经过NAT转换后的IP地址。

    这个实验就是,NAT的规则优先级要高于IPSec规则的优先级。在NAT转换的时候,对于目的地192.168.100.0段,不进行转换,策略放在排序的第一位,nat-policy进去后先配置不转换的,在配置转换的。

  • 相关阅读:
    使用 NumPy 及其相关库(如 pandas、scikit-learn 等)时,由于 NumPy 的版本不兼容或者某些依赖库与 NumPy 的版本不匹配
    word文档编辑受限制怎么解除?
    CISSP学习笔记:通过原则和策略的安全治理
    传奇GOM引擎单机架设图文教程
    2024最全最有用网络安全工程师面试题(附答案),金三银四找工作必看!
    Django 管网项目 三
    指挥棒:C++ 与运算符
    Go语言Gin框架中使用MySQL数据库的三种方式
    使用 Vue 3 插件(Plugin)实现 OIDC 登录和修改密码(OIDC 系统以 Keycloak 为例)
    【Linux】服务器恶意登录记录及解决方案
  • 原文地址:https://blog.csdn.net/u012451051/article/details/134254441