前面用VXLAN和EVPN介绍了跨mportant;">广域网大二层网络互通的方案,但是我们也发现这种新技术对设备的能力有要求,成本可能会提升。那能不能用简单一点的方案呢?相信机智的小伙伴已经发现我前几天的IPsec的RFC文档,那么今天就用IPsec来操练一下吧。
实验原型借鉴H3C典型配置“采用手工方式建立保护IPv4报文的IPsec隧道”,
组网需求
在RT1和RT2之间建立一条IPsec隧道,对PCA所在的子网(192.168.1.0/24)与PCB所在的子网(192.168.2.0/24)之间的数据流进行安全保护。具体要求如下:
封装形式为隧道模式。
安全协议采用ESP协议。
加密算法采用128位的AES,认证算法采用HMAC-SHA1。
手工方式建立IPsec SA。
组网图
设备配置
IPsec是一个基础实验,结合配置任务和RFC2401的要求我们可以发现,IPsec的主要配置任务包括以下几点:
1、配置IPsec保护的数据流量。一般也称为感兴趣流,用ACL来进行匹配;
2、配置IPsec安全提议。指定对IP报文的封装形式为传输模式或隧道模式,选择安全协议为AH或ESP、并配置加密算法及认证算法。
3、配置IPsec安全策略。包含配置应用感兴趣流,应用IPsec安全提议,指定IPsec隧道地址,配置安全协议的SPI(Security Parameter Index,安全参数索引)和SA(Security Association,安全联盟)密钥。
4、在接口上应用IPsec安全策略。
上面流程了解之后,直接贴出设备配置。
RT1
#interface GigabitEthernet0/0ip address 192.168.1.1 255.255.255.0#interface GigabitEthernet0/1ip address 12.1.1.1 255.255.255.0 nat outbound 3401 ipsec apply policy ipsec# ip route-static 23.1.1.0 24 12.1.1.2 ip route-static 192.168.2.0 24 12.1.1.2#acl advanced 3400 rule 0 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255#acl advanced 3401 rule 0 deny ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255 rule 5 permit ip#ipsec transform-set tran1 esp encryption-algorithm aes-cbc-128 esp authentication-algorithm sha1#ipsec policy ipsec 10 manual transform-set tran1 security acl 3400 remote-address 23.1.1.3sa spi inbound esp 123456 sa string-key inbound esp simple qwer sa spi outbound esp 654321 sa string-key outbound esp simple asdf
RT2
#interface GigabitEthernet0/0 ip address 192.168.2.1 255.255.255.0#interface GigabitEthernet0/1 ip address 23.1.1.3 255.255.255.0 nat outbound 3401 ipsec apply policy ipsec# ip route-static 12.1.1.0 24 23.1.1.2 ip route-static 192.168.1.0 24 23.1.1.2#acl advanced 3400 rule 0 permit ip source 192.168.2.0 0.0.0.255 destination 192.168.1.0 0.0.0.255#acl advanced 3401 rule 0 deny ip source 192.168.2.0 0.0.0.255 destination 192.168.1.0 0.0.0.255 rule 5 permit ip#ipsec transform-set tran1 esp encryption-algorithm aes-cbc-128 esp authentication-algorithm sha1#ipsec policy ipsec 10 manual transform-set tran1 security acl 3400 remote-address 12.1.1.1 sa spi inbound esp 654321 sa string-key inbound esp simple asdf sa spi outbound esp 123456 sa string-key outbound esp simple qwer
RT-ISP
#interface GigabitEthernet0/0ip address 12.1.1.2 255.255.255.0#interface GigabitEthernet0/1ip address 23.1.1.2 255.255.255.0
验证配置
验证设备
查看RT1上IPsec安全策略的信息
display ipsec policy
查看RT1上IPsec SA的相关信息
display ipsec sa
查看RT1上IPsec安全提议的信息
display ipsec transform-set
查看RT1上IPsec隧道的信息
display ipsec tunnel
验证主机
从PC1向PC2发起ping从测试,可以连通。观察TTL值为253,表明中间经过了两跳设备,应该就是IPsec隧道两端的RT1和RT2,中间的互联网无感知。但是使用tracert探测路径,则无法看到网络转发路径。
通过抓包可以发现,RT2没有回应TTL超时的ICMP错误消息,应该是没有接口响应吧。
查看IPsec SA信息时,隧道下有一行Path MTU: 1428的信息,那就来验证一下MTU的大小吧。
测试发现实际最大能通过的报文大小为1400字节,1401字节及更大的报文无法通过。
抓包发现IPsec设备发出的报文大小为1510字节,其中包含14字节的以太网报文头封装,内部数据长度为1496字节。还可以看到DF标志、隧道的源目地址以及ESP SPI等信息。
安全协议数据封装格式如下表。我们采用的是ESP-Tunnel的方式,所以数据封装格式为:[OUTER-IP][ESP][INNER-IP][DATA][ESP-T]
再次对比数据包长度,减掉20字节的外部报文头,得到[ESP][INNER-IP][DATA][ESP-T]部分长度为1476字节。再减掉ESP封装的SPI和序列号的8字节,还有1468字节。
我们再反着考虑一下,这个1428字节是隧道的MTU,IPsec网关路由器接收到的报文是多大呢?
数据长度为1400字节,ICMP报文标志位长度为8字节,再加上IP报文头的20字节,长度正好是1428字节,也就是[INNER-IP][DATA]的长度为1428字节。外层的14字节的以太网封装,进入设备之后就脱掉了,但是依然可以看到最外层封装的源MAC地址为PCA的MAC地址,目的MAC地址为网关设备的MAC地址。
再计算一下,[ESP-T]这段的长度应该是40字节吧?
总结
1、IPsec网关设备应用NAT时,要将IPsec保护的数据流量排除掉。因为接口下NAT优先级高于IPsec,会导致互访流量的源地址被转换为无法进入IPsec隧道;
2、ESP + Tunnel模式下,数据的封装格式为:[OUTER-IP][ESP][INNER-IP][DATA][ESP-T]。其中[INNER-IP][DATA]长度受隧道MTU限制,报文的整体长度受IPsec网关设备出接口MTU限制。
3、ESP配置中的SPI和SA在两台IPsec网关设备的出入方向相反,需要注意。