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客户端。