Strongswan 5上配置IKEv1+PSK+Radius

上次IKEv2的那篇博文里面有人问我是否有IKEv1+Radius的配置,当时信誓旦旦地回了个“没有”……虽然知道racoon+修改过后的librabius+tacacs可以做到这个,但是由于racoon太久没更新(最新版本0.7.3已经是2011年的了),加上racoon不支持IKEv2,并且mailing list也没人回,所以不打算用racoon来实现这个功能。

最近在网上无意中发现Strongswan自从5.0开始就支持IKEv1的XAUTH+Radius的认证了,虽然是通过比较奇特的一个方式:

(以下摘自Strongswan的Mailist)

[客户端: Xauth] [服务器: Xauth -> EAP-MD5 -> EAP-RADIUS] [AAA]

简而言之是服务器把收到的XAUTH认证信息发送给Eap-Radius去验证,而Eap-radius是给IKEv2编写的Radius插件。

目前Debian即使是unstable里面都没有Strongswan 5.x,所以要自己编译。编译平台Debian 6.0.7 x86

首先

apt-get build-dep strongswan

然后从strongswan的官网上拖源码包,最新的是 5.0.4 5.1.0。用以下选项编译安装:

./configure --prefix=/usr --sysconfdir=/etc --enable-eap-identity --enable-eap-mschapv2 --enable-integrity-test --enable-eap-radius --enable-eap-md5 --enable-radattr --enable-unity

其中eap-radius必须有。

5.0的配置文件和之前的稍有不同,直接用4.x的配置文件会提示有一堆options deprecated,删掉就可以了,不影响。

然后在ipsec.conf里面加上:

conn %default
 ikelifetime=60m
 keylife=20m
 rekeymargin=3m
 rekey=no
 keyingtries=3
 left=server.ip.address
 leftsubnet=0.0.0.0/0
 right=%any

conn IKEv1
 keyexchange=ikev1
 auto=add
 aggressive=yes
 compress=yes
 dpdaction=clear
 type=tunnel
 esp=aes128-sha1-modp2048 # 添加PFS(完全正向保密)支持,dh group选择group 14
 leftauth=psk
 leftid=ipsecgroupid
 rightsourceip=vpn.client.ip.address/24
 rightauth=psk
 rightauth2=xauth-radius

并且在strongswan.conf中需加入:

eap-radius {
 ...
 accounting = yes
 ...
}

charon段中加入

cisco_unity = yes

来支持Cisco VPN Client。

VPN客户端IP范围格式是x.x.x.0/24,比如说我想把客户端允许的IP设为192.168.1.1-255,那么就是192.168.1.0/24。iptables里面的转发设置的范围要一致。

psk和L2TP的psk一样,是同一个pre-shared key。

测试在iOS 4.2、Android 2.3 (VPNC Widget)、Windows (Cisco VPN Client)、webOS (2.1.2)和Blackberry OS 5上通过。

参考:

https://lists.strongswan.org/pipermail/users/2012-June/007726.html

https://lists.strongswan.org/pipermail/users/2012-November/008464.html

PS:有人贴了如何在Debian下制作Racoon+libradius的deb的教学,测试通过 https://megapiranha.wordpress.com/2013/04/12/debian-squeeze-racoon-plus-radius-support-feat-cisco-vpn-client/

Update 08/2015:

可以分别为Main Mode和Aggressive Mode创建两个conn设置,Main Mode的设置只比Aggressive Mode的少一行aggressive=yes,这样可以支持Android 4.4的原生VPN客户端。