Skip to main content

IPSEC VPN

·612 words·3 mins
Rs
Rory
Author
Rory
Step by step the ladder is ascended

IKE(网络密钥交换协议)
#

IKE 属于一种混合型协议,由 Internet 安全关联和密钥管理协议(ISAKMP)和两种密钥交换协议 OAKLEY 与 SKEME 组成。IKE 创建在由 ISAKMP 定义的框架上,沿用了 OAKLEY 的密钥交换模式以及 SKEME 的共享和密钥更新技术,还定义了它自己的两种密钥交换方式:主模式和野蛮模式。

IKE 协商两种 SA:

  • IKE(ISAKMP) SA (Phase 1)
  • IPSEC SA(Phase 2)

IKE 与 IPSec 的关系如下图所示,对等体之间建立一个 IKE SA 完成身份验证和密钥信息交换后,在 IKE SA 的保护下,根据配置的 AH/ESP 安全协议等参数协商出一对 IPSec SA。此后,对等体间的数据将在 IPSec 隧道中加密传输。

IKE SA 是一个双向的逻辑连接,两个对等体间只建立一个 IKE SA。

IKE 与 IPSec 的关系图

IKEv1 协商阶段 1
#

IKEv1 协商阶段 1 的目的是建立 IKE SA。IKE SA 建立后对等体间的所有 ISAKMP 消息都将通过加密和验证,这条安全通道可以保证 IKEv1 第二阶段的协商能够安全进行。

IKEv1 协商阶段 1 支持两种协商模式:主模式(Main Mode)和野蛮模式(Aggressive Mode)。

主模式包含三次双向交换,用到了六条 ISAKMP 信息。

  1. 消息 ① 和 ② 用于提议交换发起方发送一个或多个 IKE 安全提议,响应方查找最先匹配的 IKE 安全提议,并将这个 IKE 安全提议回应给发起方。匹配的原则为协商双方具有相同的加密算法、认证算法、认证方法和 Diffie-Hellman 组标识。
  2. 消息 ③ 和 ④ 用于密钥信息交换双方交换 Diffie-Hellman 公共值和 nonce 值,用于 IKE SA 的认证和加密密钥在这个阶段产生。
  3. 消息 ⑤ 和 ⑥ 用于身份和认证信息交换(双方使用生成的密钥发送信息),双方进行身份认证和对整个主模式交换内容的认证。

IKEv1 协商阶段 2
#

IKEv1 协商阶段 2 的目的就是建立用来安全传输数据的 IPSec SA,并为数据传输衍生出密钥。这一阶段采用快速模式(Quick Mode)。该模式使用 IKEv1 协商阶段 1 中生成的密钥对 ISAKMP 消息的完整性和身份进行验证,并对 ISAKMP 消息进行加密,故保证了交换的安全性

AH/ESP 安全协议
#

IPSec 使用认证头 AH(Authentication Header)和封装安全载荷 ESP(Encapsulating Security Payload)两种 IP 传输层协议来提供认证或加密等安全服务。

  • AH 协议
    AH 仅支持认证功能,不支持加密功能。AH 在每一个数据包的标准 IP 报头后面添加一个 AH 报文头,AH 对数据包和认证密钥进行 Hash 计算,接收方收到带有计算结果的数据包后,执行同样的 Hash 计算并与原计算结果比较,传输过程中对数据的任何更改将使计算结果无效,这样就提供了数据来源认证和数据完整性校验。AH 协议的完整性验证范围为整个 IP 报文。
  • ESP 协议
    ESP 支持认证和加密功能。ESP 在每一个数据包的标准 IP 报头后面添加一个 ESP 报文头,并在数据包后面追加一个 ESP 尾(ESP Trailer 和 ESP Auth data)。与 AH 不同的是,ESP 将数据中的有效载荷进行加密后再封装到数据包中,以保证数据的机密性,但 ESP 没有对 IP 头的内容进行保护,除非 IP 头被封装在 ESP 内部(采用隧道模式)。

封装模式
#

传输模式
#

隧道模式
#

传输模式和隧道模式的区别在于:

  • 从安全性来讲,隧道模式优于传输模式。它可以完全地对原始 IP 数据包进行验证和加密。隧道模式下可以隐藏内部 IP 地址,协议类型和端口。
  • 从性能来讲,隧道模式因为有一个额外的 IP 头,所以它将比传输模式占用更多带宽。
  • 从场景来讲,传输模式主要应用于两台主机或一台主机和一台 VPN 网关之间通信;隧道模式主要应用于两台 VPN 网关之间或一台主机与一台 VPN 网关之间的通信。

配置
#

Step1:ACL 设定感兴趣流
#

R2#show run | se access
access-list 100 permit ip 172.168.0.0 0.0.255.255 192.168.0.0 0.0.255.255

R3#show run | se access
access-list 100 permit ip 192.168.0.0 0.0.255.255 172.168.0.0 0.0.255.255

Step2: IKE Phase 1
#

R3(config)#crypto isakmp policy 10
R3(config-isakmp)# encr aes 256
R3(config-isakmp)# hash sha512
R3(config-isakmp)# authentication pre-share
R3(config-isakmp)# group 24

Step3: IKE Phase 2
#

R3(config-isakmp)#crypto ipsec transform-set CCIE esp-aes 256 esp-sha512-hmac
R3(cfg-crypto-trans)# mode tunnel
Step 4: Pre-share Key
#
R3(config)#crypto isakmp key ccie address 12.1.1.2

Step 5: Crypto Map
#

R3(config)#crypto map CCIE 10 ipsec-isakmp
R3(config-crypto-map)# set peer 12.1.1.2
R3(config-crypto-map)# set transform-set CCIE
R3(config-crypto-map)# match address 100

R3(config)#int e0/0
R3(config-if)#crypto map CCIE
R3(config-if)#

测试
#

R2#show run | se ip route
ip route 192.168.0.0 255.255.0.0 Ethernet0/1 12.1.1.1

R3#show run | se ip route
ip route 172.168.0.0 255.255.0.0 Ethernet0/0 13.1.1.1

R2#ping 192.168.35.3 source 172.168.24.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.35.3, timeout is 2 seconds:
Packet sent with a source address of 172.168.24.2
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 5/7/18 ms
R2#

R2#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id status
13.1.1.3        12.1.1.2        QM_IDLE           1002 ACTIVE

IPv6 Crypto ISAKMP SA

R2#show crypto ipsec sa

interface: Ethernet0/1
    Crypto map tag: CCIE, local addr 12.1.1.2

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (172.168.0.0/255.255.0.0/0/0)
   remote ident (addr/mask/prot/port): (192.168.0.0/255.255.0.0/0/0)
   current_peer 13.1.1.3 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 13, #pkts encrypt: 13, #pkts digest: 13
    #pkts decaps: 13, #pkts decrypt: 13, #pkts verify: 13
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 12.1.1.2, remote crypto endpt.: 13.1.1.3
     plaintext mtu 1422, path mtu 1500, ip mtu 1500, ip mtu idb Ethernet0/1
     current outbound spi: 0x8B4A1080(2336886912)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0x6E2BE3E4(1848370148)
        transform: esp-256-aes esp-sha512-hmac ,
        in use settings ={Tunnel, }
        conn id: 7, flow_id: SW:7, sibling_flags 80004040, crypto map: CCIE
        sa timing: remaining key lifetime (k/sec): (4197493/573)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0x8B4A1080(2336886912)
        transform: esp-256-aes esp-sha512-hmac ,
        in use settings ={Tunnel, }
        conn id: 8, flow_id: SW:8, sibling_flags 80004040, crypto map: CCIE
        sa timing: remaining key lifetime (k/sec): (4197493/573)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     outbound ah sas:

     outbound pcp sas:
R2#

参考文章

一张图认识 IPSec,区分 IKE SA(ISAKMP SA)和 IPSec SA
https://blog.csdn.net/pz641/article/details/114585187

https://www.jannet.hk/internet-protocol-security-ipsec-zh-hant/