H3C路由器IPsec配置示例。本例两端都有公网IP,使用常规配置,不使用模板。
拓扑
在总部路由器Hub和分支路由器Spoke1之间建立IPsec连接,路由已配置完成。
Hub和Spoke1都有公网IP
感兴趣流量为
10.1.2.0/24 – 172.16.1.0/24
10.1.3.0/24 – 172.16.1.0/24
IPsec连接成功后,对于感兴趣流量来说,拓扑变成下图所示。可以把IPsec设备和中间的网络整体看成一台路由器。
配置
Hub路由器配置
[Hub]dis cu
#
version 7.1.064, Release 0621P18
#
interface GigabitEthernet1/0
ip address 10.55.55.52 255.255.255.0
nat outbound 3000
ipsec apply policy policy-1
#
interface GigabitEthernet2/0
ip address 10.1.1.1 255.255.255.252
#
ip route-static 0.0.0.0 0 10.55.55.1
ip route-static 172.16.1.0 24 10.55.55.53
ip route-static 172.16.2.0 24 10.55.55.53
#
acl advanced 3000
rule 10 deny ip source 10.1.2.0 0.0.0.255 destination 172.16.1.0 0.0.0.255
rule 15 deny ip source 10.1.3.0 0.0.0.255 destination 172.16.1.0 0.0.0.255
rule 1000 permit ip
#
acl advanced 3001
rule 0 permit ip source 10.1.2.0 0.0.0.255 destination 172.16.1.0 0.0.0.255
rule 5 permit ip source 10.1.3.0 0.0.0.255 destination 172.16.1.0 0.0.0.255
#
ipsec transform-set trans-set-1
esp encryption-algorithm 3des-cbc
esp authentication-algorithm md5
#
ipsec policy policy-1 30 isakmp
transform-set trans-set-1
security acl 3001
local-address 10.55.55.52
remote-address 172.16.2.2
ike-profile profile-1
#
ike profile profile-1
keychain keychain-1
local-identity address 10.55.55.52
match remote identity address 172.16.2.2 255.255.255.255
proposal 1
#
ike proposal 1
encryption-algorithm 3des-cbc
authentication-algorithm md5
#
ike keychain keychain-1
pre-shared-key address 172.16.2.2 255.255.255.255 key cipher $c$3$03X10VFR0Sq1BpPgANZ8P2zOuQZuMA==
#
return
命令解析
NAT的问题
interface GigabitEthernet1/0
ip address 10.55.55.52 255.255.255.0
nat outbound 3000
ipsec apply policy policy-1
g1/0连接互联网,需要配置NAT让内网上网,但需要调用一个ACL,将感兴趣流量排除掉。
因为从内网到外网的方向上,先执行NAT,再执行IPsec封装。
如果执行NAT时不排除感兴趣流量,则感兴趣流量的IP也会被转换。
转换之后的IP不再匹配IPsec中定义的感兴趣流量,也不会触发IPsec。
acl advanced 3000
rule 10 deny ip source 10.1.2.0 0.0.0.255 destination 172.16.1.0 0.0.0.255
rule 15 deny ip source 10.1.3.0 0.0.0.255 destination 172.16.1.0 0.0.0.255
rule 1000 permit ip
deny的流量不执行NAT
permit的流量执行NAT
一个接口下只能调用一个policy
interface GigabitEthernet1/0
ipsec apply policy policy-1
感兴趣流量
acl advanced 3001
rule 0 permit ip source 10.1.2.0 0.0.0.255 destination 172.16.1.0 0.0.0.255
rule 5 permit ip source 10.1.3.0 0.0.0.255 destination 172.16.1.0 0.0.0.255
permit的流量即需要通过IPsec传输的流量,也需要这些流量去触发IPsec的建立。
两端的source和destination相反。
阶段二的传输集
ipsec transform-set trans-set-1 #创建传输集
esp encryption-algorithm 3des-cbc #设置封装协议为ESP,设置加密算法
esp authentication-algorithm md5 #设置验证算法
配置封装协议为ESP
加密方式、验证方式
默认封装模式为Tunnel(encapsulation-mode tunnel),默认的参数不会显示在配置中。
tunnel:被加密的流量是非加密点的流量时,用此模式
transport:被加密的流量是加密点本身的流量时,用此模式
配置IPsec策略
ipsec policy policy-1 30 isakmp #创建ipsec策略
transform-set trans-set-1 #调用传输集
security acl 3001 #调用ACL作为感兴趣流量
local-address 172.16.2.2 #指定本端的IP
remote-address 10.55.55.52 #指定对端的IP
ike-profile profile-1 #调用ike profile
policy-1是策略名称
30是这条策略的序号,如果要连接多个站点,要分别创建策略,用序号区分
isakmp是自动创建ipsec sa,不必手动创建
创建阶段一的profile
ike profile profile-1 #创建profile,名称为profile-1
keychain keychain-1 #调用keychain
local-identity address 172.16.2.2 #设置本端的身份ID
match remote identity address 10.55.55.52 255.255.255.255 #设置对端的身份ID
proposal 1 #调用proposal
在IKE阶段一中,ipsec设备需要验证对方的身份。
设备的身份可通过几种方法来表明,如数字证书、设备名字、IP地址。本例中使用IP地址作为设备身份的标识。
keychain中设置的密钥是用来验证IPsec设备的身份,并不是用来加密用户数据。
IKE阶段一的参数
ike proposal 1
encryption-algorithm 3des-cbc #设置加密算法
authentication-algorithm md5 #设置验证算法
配置用于设备验证的方法
ike keychain keychain-1
pre-shared-key address 10.55.55.52 255.255.255.255 key cipher $c$3$3g5t82J4iYiWSDvwzUOq3C8E6OVoYg==
pre-shared-key 使用预共享密钥对设备进行验证
address 使用IP来指定对端设备
spoke1路由器配置
[spoke1]dis cu
#
version 7.1.064, Release 0621P18
#
interface GigabitEthernet1/0
ip address 172.16.2.2 255.255.255.0
nat outbound 3000
ipsec apply policy policy-1
#
interface GigabitEthernet2/0
ip address 172.16.1.1 255.255.255.0
#
ip route-static 0.0.0.0 0 172.16.2.1
#
acl advanced 3000
rule 10 deny ip source 172.16.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255
rule 15 deny ip source 172.16.1.0 0.0.0.255 destination 10.1.3.0 0.0.0.255
rule 1000 permit ip
#
acl advanced 3001
rule 0 permit ip source 172.16.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255
rule 5 permit ip source 172.16.1.0 0.0.0.255 destination 10.1.3.0 0.0.0.255
#
ipsec transform-set trans-set-1
esp encryption-algorithm 3des-cbc
esp authentication-algorithm md5
#
ipsec policy policy-1 30 isakmp
transform-set trans-set-1
security acl 3001
local-address 172.16.2.2
remote-address 10.55.55.52
ike-profile profile-1
#
ike profile profile-1
keychain keychain-1
local-identity address 172.16.2.2
match remote identity address 10.55.55.52 255.255.255.255
proposal 1
#
ike proposal 1
encryption-algorithm 3des-cbc
authentication-algorithm md5
#
ike keychain keychain-1
pre-shared-key address 10.55.55.52 255.255.255.255 key cipher $c$3$3g5t82J4iYiWSDvwzUOq3C8E6OVoYg==
#
return
测试
在PC(172.16.1.2)ping对端内网10.1.2.2
C:\Users\Administrator>ping 10.1.2.2
正在 Ping 10.1.2.2 具有 32 字节的数据:
请求超时。
来自 10.1.2.2 的回复: 字节=32 时间=12ms TTL=61
来自 10.1.2.2 的回复: 字节=32 时间=9ms TTL=61
来自 10.1.2.2 的回复: 字节=32 时间=10ms TTL=61
10.1.2.2 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 3,丢失 = 1 (25% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 9ms,最长 = 12ms,平均 = 10ms
第一个报文请求超时,用于触发ipsec隧道的建立,
第二个报文开始通过ipsec传输
连接成功后,查看IPsec路由器的连接
查看IKE连接
[Spoke1]dis ike sa
Connection-ID Local Remote Flag DOI
-------------------------------------------------------------------------
2 172.16.2.2 10.55.55.52 RD IPsec
Flags:
RD--READY RL--REPLACED FD-FADING RK-REKEY
查看IPsec连接
[Spoke1]dis ipsec sa
-------------------------------
Interface: GigabitEthernet1/0
-------------------------------
-----------------------------
IPsec policy: policy-1
Sequence number: 30
Mode: ISAKMP
-----------------------------
Tunnel id: 0
Encapsulation mode: tunnel
Perfect Forward Secrecy:
Inside VPN:
Extended Sequence Numbers enable: N
Traffic Flow Confidentiality enable: N
Path MTU: 1444
Tunnel:
local address: 172.16.2.2
remote address: 10.55.55.52
Flow:
sour addr: 172.16.1.0/255.255.255.0 port: 0 protocol: ip
dest addr: 10.1.2.0/255.255.255.0 port: 0 protocol: ip
[Inbound ESP SAs]
SPI: 3716855493 (0xdd8ab6c5)
Connection ID: 12884901889
Transform set: ESP-ENCRYPT-3DES-CBC ESP-AUTH-MD5
SA duration (kilobytes/sec): 1843200/3600
SA remaining duration (kilobytes/sec): 1843199/3461
Max received sequence-number: 3
Anti-replay check enable: Y
Anti-replay window size: 64
UDP encapsulation used for NAT traversal: N
Status: Active
[Outbound ESP SAs]
SPI: 3128120594 (0xba735512)
Connection ID: 12884901888
Transform set: ESP-ENCRYPT-3DES-CBC ESP-AUTH-MD5
SA duration (kilobytes/sec): 1843200/3600
SA remaining duration (kilobytes/sec): 1843199/3461
Max sent sequence-number: 3
UDP encapsulation used for NAT traversal: N
Status: Active
消除IKE连接
<Spoke1>reset ike sa
清除IPsec连接
<Spoke1>reset ipsec sa
查看ike全局信息
[Hub]dis ike global-info
IKE identity type: --
IKE identity: --
IKE dpd: on-demand
IKE dpd interval (seconds): 0
IKE dpd retry (seconds): 5
IKE invalid-spi-recovery: disable
IKE limit max-negotiating-sa: 0
IKE limit max-sa: 0
IKE nat-keepalive (seconds): 20
IKE signature-identity from-certificate: disable
IKE keepalive timeout (seconds): 0
IKE keepalive interval (seconds): 0
查看ipsec全局信息
[Hub]dis ipsec global-info
IPsec anti-reply check: enable
IPsec anti-replay window (packets): 64
IPsec decrypt-check: enable
IPsec flow-redirect: disable
IPsec fragmentation: before-encryption
IPsec global-df-bit: copy
IPsec limit max-tunnel: --
IPsec redundancy: disable
IPsec sa global-duration time-based (seconds): 3600
IPsec sa global-duration traffic-based (KBytes): 1843200
IPsec sa idle-time (seconds): --
在ipsec的各个参数中,有部分参数可以两端不同,ipsec设备会自动协商出一个值。
部分参数无法协商,需要两端手动配置成一样的。
不同厂商的默认参数可能不同,如果无法建立连接,可尝试将各参数设置成相同的值。
IPsec中的MTU、MSS问题
以上配置中,IPsec设备的接口使用默认的MTU,即1500字节,封装为IPsec之后,报文的长度会有所增加,报文在中间设备传输时,会被分片。有部分应用会设置IP报头的DF位,DF位设置为1时表示不分片。当报文的MTU大于接口的MTU,而报文又设置为不分片时,会被设备丢弃,导致业务不通。
例如本例中的FTP。PC从FTP服务器下载文件,报文从FTP服务器到达IPSEC端点后,需要封装成IPSEC报文,此时整个报文的大小大于出接口(连接互联网的接口)的MTU,而FTP报文中,IP报头的DF位是置1的,即不能分片,此时报文被丢弃。
从FTP下载文件时,如果文件的大小大于1KB,可能就无法下载。
在调用ipsec policy的接口修改此接口的MTU/MSS,边修改边测试,直到应用可用。MTU/MSS如果太大,可能导致部分应用无法使用,如果太小又会降低传输效率。
[H3C-GigabitEthernet1/0]mtu 1300
[H3C-GigabitEthernet1/0]tcp mss 1200
测试链路的MTU
C:\Users\Administrator>ping -l 1417 -f 10.1.2.2
正在 Ping 10.1.2.2 具有 1417 字节的数据:
来自 172.16.1.1 的回复: 需要拆分数据包但是设置 DF。
需要拆分数据包但是设置 DF。
需要拆分数据包但是设置 DF。
需要拆分数据包但是设置 DF。
10.1.2.2 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 1,丢失 = 3 (75% 丢失),
C:\Users\Administrator>ping -l 1416 -f 10.1.2.2
正在 Ping 10.1.2.2 具有 1416 字节的数据:
来自 10.1.2.2 的回复: 字节=1416 时间=9ms TTL=61
来自 10.1.2.2 的回复: 字节=1416 时间=9ms TTL=61
来自 10.1.2.2 的回复: 字节=1416 时间=8ms TTL=61
来自 10.1.2.2 的回复: 字节=1416 时间=8ms TTL=61
10.1.2.2 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 8ms,最长 = 9ms,平均 = 8ms
-l 1416,1416是实际的用户数据大小,计算MTU时还要考虑IP报头、TCP报头、ICMP报头、ESP报头等。
-f,设置IP报头中的DF,即不允许分片。
有些应用可以执行PMTUD(Path MTU Discovery)路径MTU发现,也就是可以自动探测从源到目标的路径上的最小MTU,应用会根据这个MTU来封装数据。
Linux的tracepath命令
[root@localhost ~]# tracepath 172.16.1.2 -n
1?: [LOCALHOST] pmtu 1500 #FTP服务器网卡的MTU
1: 10.1.2.1 1.814ms
1: 10.1.2.1 1.953ms
2: 10.1.1.1 6.510ms
3: 10.1.1.1 4.060ms pmtu 1444 #出口路由器的MTU
路由器中的ipsec模块也可以探测路径MTU
[Spoke1]dis ipsec sa
-------------------------------
Interface: GigabitEthernet1/0
-------------------------------
-----------------------------
IPsec policy: policy-1
Sequence number: 30
Mode: ISAKMP
-----------------------------
Tunnel id: 0
Encapsulation mode: tunnel
Perfect Forward Secrecy:
Inside VPN:
Extended Sequence Numbers enable: N
Traffic Flow Confidentiality enable: N
Path MTU: 1444