本测试主要验证远程用户carol和网关moon建立连接之后,由于链路问题,导致DPD(Dead Peer Detection)检测报文没有响应,之后链路恢复,重新建立连接的功能。本次测试拓扑如下:
carol主机配置
carol的配置文件:ikev2/dpd-hold/hosts/carol/etc/ipsec.conf,内容如下,keyexchange字段为ikev2,表示采用IKEv2协议。left字段的值为carol主机的IP地址。right字段指明对端为moon网关,但是rightid字段为moon的ID信息:moon@strongswan.org。rightsubnet字段指明对端的子网为:10.1.0.0/16。
需要注意的是此处指定了dpdaction的值为hold,即dpd检查失败之后,不删除连接。字段dpddelay的值为10秒,指定dpd检测间隔。
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
dpdaction=hold
dpddelay=10
conn home
left=PH_IP_CAROL
leftcert=carolCert.pem
leftid=carol@strongswan.org
leftfirewall=yes
right=PH_IP_MOON
rightid=@moon.strongswan.org
rightsubnet=10.1.0.0/16
auto=add
moon网关的配置文件:ikev2/double-nat-net/hosts/moon/etc/ipsec.conf,内容如下,基本内容与alice主机相同。但是right字段的值为%any,表明接收任何主机发来的连接,此配置不能主动发起连接,需要等待carol的连接请求。需要注意的是此处指定了dpdaction的值为clear,即dpd检查失败之后,清除连接。字段dpddelay的值为10秒,指定dpd检测间隔。
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
dpdaction=clear
dpddelay=10
conn rw
left=PH_IP_MOON
leftcert=moonCert.pem
leftid=@moon.strongswan.org
leftsubnet=10.1.0.0/16
right=%any
rightid=carol@strongswan.org
auto=add
测试准备阶段
配置文件:ikev2/dpd-hold/pretest.dat,内容为ipsec连接的启动语句。
moon::ipsec start
carol::ipsec start
moon::expect-connection rw
carol::expect-connection home
carol::ipsec up home
测试阶段
配置文件:ikev2/dpd-hold/evaltest.dat。以下测试语句检查在carol主机和moon网关上隧道建立成功。随后,在moon网关上丢弃所有carol的报文,并在carol主机上丢弃所有moon的所有报文,模拟链路断开的情况。之后,延时13秒(超出dpd配置的10秒间隔),在carol主机的strongswan进程日志中,确认DPD功能生效。
carol::ipsec status 2> /dev/null::home.*INSTALLED, TUNNEL::YES
moon:: ipsec status 2> /dev/null::rw.*INSTALLED, TUNNEL::YES
moon:: iptables -A INPUT -i eth0 -s PH_IP_CAROL -j DROP::no output expected::NO
carol::iptables -A INPUT -i eth0 -s PH_IP_MOON -j DROP::no output expected::NO
carol::sleep 13::no output expected::NO
carol::cat /var/log/daemon.log::sending DPD request::YES
carol::cat /var/log/daemon.log::retransmit.*of request::YES
carol::cat /var/log/daemon.log::giving up after.*retransmits::YES
以下测试语句,删除carol主机和moon网关上丢弃报文的iptables规则,即恢复链路。在carol主机上执行ping主机alice的操作,触发连接的再次建立。
carol::iptables -D INPUT -i eth0 -s PH_IP_MOON -j DROP::no output expected::NO
moon:: iptables -D INPUT -i eth0 -s PH_IP_CAROL -j DROP::no output expected::NO
carol::ping -c 1 -W 1 PH_IP_ALICE::trigger route::NO
carol::sleep 1::no output expected::NO
carol::ipsec status 2> /dev/null::home.*INSTALLED, TUNNEL::YES
moon:: ipsec status 2> /dev/null::rw.*INSTALLED, TUNNEL::YES
主机carol上strongswan进程的日志信息如下,在发送了3个DPD报文之后连接断开。当以上的ping测试命令执行时,触发strongswan的acquire任务,开始重新建立连接。
carol charon: 07[IKE] sending DPD request
carol charon: 07[ENC] generating INFORMATIONAL request 2 [ ]
carol charon: 07[NET] sending packet: from 192.168.0.100[4500] to 192.168.0.1[4500] (80 bytes)
carol charon: 10[IKE] retransmit 1 of request with message ID 2
carol charon: 10[NET] sending packet: from 192.168.0.100[4500] to 192.168.0.1[4500] (80 bytes)
carol charon: 11[IKE] retransmit 2 of request with message ID 2
carol charon: 11[NET] sending packet: from 192.168.0.100[4500] to 192.168.0.1[4500] (80 bytes)
carol charon: 12[IKE] giving up after 2 retransmits
carol charon: 14[KNL] creating acquire job for policy 192.168.0.100/32[udp/60699] === 10.1.0.10/32[udp/1025] with reqid {1}
carol charon: 14[IKE] initiating IKE_SA home[2] to 192.168.0.1
carol charon: 14[ENC] generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]
如下图所示,moon网关传输了3个INFORMATIONAL报文,MID为0。carol主机也传输了3个INFORMATIONAL报文,消息ID为2。此时连接断开,第一个DPD报文在最后一个报文发送10秒之后发出。DPD失效之后,carol主机发送IKE_SA_INIT报文开始重新建立连接。
strongswan测试版本: 5.8.1
END