现在的位置: 首页 > 综合 > 正文

如何使用Strongswan和Freeradius建立IKEv2 VPN

2018年04月11日 ⁄ 综合 ⁄ 共 2719字 ⁄ 字号 评论关闭

https://www.mail-archive.com/users@lists.strongswan.org/msg04148.html

如何使用Strongswan和Freeradius建立IKEv2 VPN。

目 前支持IKEv2的客户端貌似只有Openswan/Strongswan,Windows的话只有Windows 7和Windows Server 2008 R2完全支持(Vista只支持IKEv1),因而这篇文章主要介绍如何建立Win7客户端能够使用的IKEv2 VPN。

之所 以使用IKEv2而非IKEv1是因为IKEv1目前没有开源的能与Radius连接的插件/客户端,最接近的方案应该是XAuth- PAM+pam_radius。不过pam对于DoS攻击的抵抗很弱,因而不是特别好的一个solution。加上Openswan默认编译是不包含 xauthpam的,在使用二进制包管理的服务器上布置的复杂度会更高。

IKEv2要求服务器必须以证书证明身份,即使客户端采用MSCHAPv2认证(用户名+密码)。所以第一步是产生服务器使用的证书:
以下内容来自http://wiki.strongswan.org/projects/strongswan/wiki/IOS_(Apple)

ipsec
pki --gen --outform pem > caKey.pem
ipsec
pki --self --
in caKey.pem
--dn 
"C=CH,
O=strongSwan, CN=strongSwan CA"
 --ca
--outform pem > caCert.pem

这一步产生CA证书,也是稍后会安装到客户端里面的证书,其中CN(Common Name)的值很重要,必须是服务器的域名/IP地址并且跟给客户的值一样。比如说让客户连接1.2.3.4,那么CN=1.2.3.4。不能是一边是域名而另外一边是IP地址。

ipsec
pki --gen --outform pem > serverKey.pem
ipsec
pki --pub --
in serverKey.pem
| ipsec pki --issue --cacert caCert.pem --cakey caKey.pem \
          --dn "C=CH,
O=strongSwan, CN=vpn.strongswan.org"
 --flag
serverAuth --outform pem > serverCert.pem

这一步里面产生的服务器证书的CN值必须和上一步里面的一样,至于--flag serverAuth是Windows客户端必需的,作用是表示出这个证书的用途(认证)。

把生成的证书拷到ipsec.d/里面:

cp caCert.pem
/etc/ipsec.d/cacerts/
cp serverCert.pem
/etc/ipsec.d/certs
cp serverKey.pem
/etc/ipsec.d/private/

最后在/etc/ipsec.secrets里面添加:

:
RSA serverKey.pem

这样服务器端的证书准备工作就完成了。

客户端需要添加这个证书,否则认证时会出现Error 13801。添加证书的方法见这里:http://wiki.strongswan.org/projects/strongswan/wiki/Win7EapCert,注意必须是Local
Computer(本地计算机)而非Current User(当前用户),否则添加的证书不会起效。

然后配置/etc/strongswan.conf:

在charon段里面加上:

dns1
= 8.8.8.8
dns2
= 208.67.222.222

然后在plugin段(charon段内部)里面加上:

eap-radius
{
                    servers
{
                                 vpnserver
{
                                                    secret
= yourfreeradiussecret
                                                    address
= radius.server.address
                                  }
                      }
}

这样让Strongswan了解Radius服务器地址和暗码。

接下来修改/etc/ipsec.conf:

conn
IPSec-IKEv2
           keyexchange=ikev2
           auto=add
           left=server.ip.address
           leftsubnet=0.0.0.0/0
           leftauth=pubkey
           leftcert=serverCert.pem
           right=%any
           rightsourceip=vpn.ip.address.range
           rightauth=eap-radius
           rightsendcert=never
           eap_identity=%any

解 释下上面几项的含义:leftsubnet是决定要通过tunnel的ip的范围,0.0.0.0/0是代表所有的IP通讯都通过VPN。 rightsourceip是VPN分配的虚拟地址的范围,也就是客户端登录后得到的IP范围,例如192.168.1.0/24意味着 192.168.0.1-192.168.1.255为VPN客户端可能的地址范围。rightauth=eap-radius是把客户端的EAP认证请 求转发至radius来处理,%any意味着接受任何类型的eap请求。

配置完成了吗?这样启动后Windows的客户端会提示812错 误,因为Windows默认使用的是EAP-MSCHAPv2,而Freeradius的默认配置是EAP-md5,这可能是Windows的一个 bug,目前我的解决方法是直接把Freeradius的eap.conf里面的default_eap_type修改为mschapv2,如有更好的方 法望不吝告知。

这样就建立了一个IKEv2 IPSec隧道。默认情况下加密方法使用3DES,如有需要的话可以在IPSec的配置段里面加上ike=和esp=来修改加密算法

抱歉!评论已关闭.