本测试主要验证网关moon通过DHCP协议由服务器获取地址,在DHCP发现报文中携带客户端的ID信息,获取指定地址,但是本次测试虽然携带了ID字段,但是在DHCP服务器中配置了基于特定MAC地址的IP分配,分配给远程客户端carol和dave的功能,以及moon网关上farp插件的arp代理功能。DHCP服务器为主机venus(10.1.0.20),其IP池的范围是:10.1.0.50到10.1.0.60。本次测试拓扑如下:
carol主机配置
carol的配置文件:ikev2/dhcp-static-mac/hosts/carol/etc/ipsec.conf,内容如下,注意其中leftsourceip字段指定为%config,意味值将向对端请求IP地址信息。
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
conn home
left=PH_IP_CAROL
leftsourceip=%config
leftcert=carolCert.pem
leftid=carol@strongswan.org
leftfirewall=yes
right=PH_IP_MOON
rightsubnet=10.1.0.0/16
rightid=@moon.strongswan.org
auto=add
主机dave的配置与carol基本相同。以下为moon网关的配置文件:ikev2/dhcp-static-mac/hosts/moon/etc/ipsec.conf,注意这里的rightsourceip字段指定为%dhcp,将为连接的客户端使用dhcp服务器分配地址。
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
left=PH_IP_MOON
leftsubnet=10.1.0.0/16
leftcert=moonCert.pem
leftid=@moon.strongswan.org
leftfirewall=yes
conn rw
right=%any
rightsourceip=%dhcp
auto=add
网关moon的配置文件:ikev2/dhcp-static-mac/hosts/moon/etc/strongswan.conf,内容如下,相关的插件由farp和dhcp,前者用于arp代理,后者支持DHCP协议相关操作(DHCP客户端)。DHCP的服务器地址指定为广播地址:10.1.255.255,identity_lease设置为yes表示在DHCP发现报文中发送ID字段。
charon {
load = random nonce aes sha1 sha2 pem pkcs1 curve25519 gmp x509 curl revocation hmac stroke kernel-netlink socket-default updown attr farp dhcp
plugins {
dhcp {
server = 10.1.255.255
identity_lease = yes
}
}
}
网关moon的配置文件:ikev2/dhcp-static-mac/hosts/moon/etc/iptables.rules,内容如下。由于要使用DHCP服务,这里在INPUT和OUTPUT链上运行bootpc和bootps报文通过,另外在INPUT链允许eth1接口的目的地址为10.1.255.255的广播报文,因为DHCP的offer和ack报文可能已广播的形式返回。
# allow bootpc and bootps
-A OUTPUT -p udp --sport bootpc --dport bootps -j ACCEPT
-A INPUT -p udp --sport bootps --dport bootps -j ACCEPT
# allow broadcasts from eth1
-A INPUT -i eth1 -d 10.1.255.255 -j ACCEPT
DHCP配置
DHCP服务器配置在venus主机(10.1.0.20)上,其配置文件如下。定义的可分配的IP地址范围:10.1.0.50到10.1.0.60,在本次测试中使用了两台客户端(carol和dave),根据DHCP发现报文Discovery中的client-identifier字段的值设置了两个固定IP分配方案,一是如果ID等于carol@strongswan.org,IP地址分配为10.1.0.30。另一个是ID为dave@strongswan.org时,IP固定分配10.1.0.40。
$ cat ikev2/dhcp-static-mac/hosts/venus/etc/dhcp/dhcpd.conf
# dhcpd configuration file
ddns-update-style none;
subnet 10.1.0.0 netmask 255.255.0.0 {
option domain-name "strongswan.org";
option domain-name-servers PH_IP_VENUS;
option netbios-name-servers PH_IP_ALICE;
option routers PH_IP_MOON1;
option broadcast-address 10.1.255.255;
next-server PH_IP_VENUS;
range 10.1.0.50 10.1.0.60;
}
host carol {
hardware ethernet 7a:a7:51:cc:22:4a;
fixed-address 10.1.0.30;
}
host dave {
hardware ethernet 7a:a7:93:70:2b:21;
fixed-address 10.1.0.40;
}
以下为DNSMASQ的配置,其内容与以上的DHCP配置文件达到的效果一致。根据以下pretest.dat测试准备阶段的内容,本测试启动的服务为isc-dhcp-server,使用以上的配置文件。
$ cat ikev2/dhcp-static-mac/hosts/venus/etc/dnsmasq.conf
interface=eth0
dhcp-range=10.1.0.50,10.1.0.60,255.255.0.0,10.1.255.255
dhcp-host=7a:a7:51:cc:22:4a,10.1.0.30
dhcp-host=7a:a7:93:70:2b:21,10.1.0.40
dhcp-option=option:router,PH_IP_MOON1
dhcp-option=option:dns-server,PH_IP_VENUS
dhcp-option=option:netbios-ns,PH_IP_ALICE
dhcp-option=option:domain-name,strongswan.org
log-dhcp
测试准备阶段
配置文件:ikev2/dhcp-static-mac/pretest.dat,除了通常的ipsec连接的启动的语句外,需要注意的是在venus主机上启动dhcp服务。
venus::cat /etc/dhcp/dhcpd.conf
venus::service isc-dhcp-server start 2> /dev/null
测试阶段
配置文件:ikev2/dhcp-static-mac/evaltest.dat。以下测试语句检查carol主机上连接的建立情况。之后,在内部主机alice上使用ping命令测试到主机10.1.0.30的连通性,10.1.0.30为分别配给carol主机的虚拟IP地址。以及在carol主机上ping主机alice。
carol::ipsec status 2> /dev/null::home.*ESTABLISHED.*carol@strongswan.org.*moon.strongswan.org::YES
carol::ipsec status 2> /dev/null::home.*INSTALLED, TUNNEL::YES
alice::ping -c 1 10.1.0.30::64 bytes from 10.1.0.30: icmp_.eq=1::YES
carol::ping -c 1 PH_IP_ALICE::64 bytes from PH_IP_ALICE: icmp_.eq=1::YES
以下为carol主机在连接建立节点IKE_AUTH消息中发送的CFG_REQUEST载荷,ID载荷中的内容为:carol.strongswan.org,网关moon将在DHCP发现报文中携带此ID:
以下为moon网关回复的CFG_REPLY载荷,其中分配的IP地址为10.1.0.30,DNS服务器为10.1.0.20和10.1.0.10。
在moon网关回复carol主机认证消息之前,其先要向DHCP服务器venus请求IP地址,如下为交互报文。DHCP分配地址为10.1.0.30。
DHCP发现报文如下,虽然Client ID字段仍然为carol@strongswan.org,但是在DHCP服务器也将没有依据此ID分配IP的配置。本次测试设置了依据MAC的IP分配,Client MAC为:7a:a7:51:cc:22:4a。其中7a:a7为strongswan进程固定的字段,其它字段为哈希结果。
由下图可见,在alice主机发送arp请求时,moon网关回复了自身eth1接口的MAC地址。以便alice主机将ping报文发送对moon网关,经过加密之后发送给carol主机,回复报文经过相反的路径。
strongswan测试版本: 5.8.1
END