测试平台:Ubuntu18.04
测试方法:连接SJTU VPN for student.
什么是IKEv2
根据维基百科介绍,IKEv2全称为Internet Key Exchange第二版,所以本质上是一种协议,只要找到实现这个协议的软件就可以连接了。
Linux下IKEv2软件
Windows 和 Mac OS 下,系统都自带了IKEv2协议的实现。Linux下则需要通过额外安装的软件实现,其中StrongSwan是比较成熟的一套软件。
StrongSwan基本使用
在官网介绍的Invocation and Maintenace章节中,介绍了基本的使用方法:
ipsec start
启动服务ipsec up <name>
启动名为name的vpnipsec down <name>
关闭名为name的vpnipsec reload
更改ipsec.conf后,重新加载配置文件,使得配置生效ipsec restart
如果更改了很多地方,ipsec reload无效,就直接重启 需要注意的是,这些命令都需要root权限,所以要在前面加上sudo。
配置文件
在此我需要连接的是上海交通大学提供的访问校园网用VPN,采用IKEv2协议,EAP认证方式,也就是通过帐号密码认证。
/etc/ipsec.conf
文件配置如下:
# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
# strictcrlpolicy=yes
# uniqueids = no
# Add connections here.
conn sjtu
left=%config
leftsourceip=%config
leftauth=eap
right=stu.vpn.sjtu.edu.cn
rightsubnet=0.0.0.0/0
rightid=@stu.vpn.sjtu.edu.cn
rightauth=pubkey
eap_identity=jAccount
auto=add
其中left指的是客户端,用%config是希望使用分配到的内网ip,认证方式为eap;right指的是服务端,认证方式为公钥;eap的帐号就是jAccount的帐号。
/etc/ipsec.secrets
文件配置如下:
jAccount : EAP "Your Password"
这个文件是用来储存密码的,将jAccount和Your Password替换成自己的帐号密码即可。
证书拷贝
StrongSwan默认并不会用系统的证书来认证网站,而是用自己目录/etc/ipsec.d/cacerts
下的证书。方便起见,可以将系统的证书全部复制到该目录下,之后就会自动寻找合适的证书。
Linux下的证书放置的位置不一定相同,下面以常见的/etc/ssl/certs/目录为例:
sudo cp -r /etc/ssl/certs/* /etc/ipsec.d/cacerts
连接
配置好之后,就可以连接了:
ipsec start
ipsec up sjtu
连接成功的信息如下:
parsed IKE_AUTH response 3 [ EAP/REQ/GTC ] server requested EAP_GTC authentication (id 0x02) generating IKE_AUTH request 4 [ EAP/RES/GTC ] sending packet: from xx.xx.xx.xx[4500] to xx.xx.xx.xx[4500] (96 bytes) received packet: from xx.xx.xx.xx[4500] to xx.xx.xx.xx[4500] (80 bytes) parsed IKE_AUTH response 4 [ EAP/SUCC ] EAP method EAP_GTC succeeded, no MSK established authentication of ‘config’ (myself) with EAP generating IKE_AUTH request 5 [ AUTH ] sending packet: from xx.xx.xx.xx[4500] to xx.xx.xx.xx[4500] (112 bytes) received packet: from xx.xx.xx.xx[4500] to xx.xx.xx.xx[4500] (272 bytes) parsed IKE_AUTH response 5 [ AUTH CPRP(ADDR DNS DNS) SA TSi TSr N(AUTH_LFT) N(MOBIKE_SUP) N(NO_ADD_ADDR) ] authentication of ‘stu.vpn.sjtu.edu.cn’ with EAP successful IKE_SA sjtu[5] established between xx.xx.xx.xx[config]…xx.xx.xx.xx[stu.vpn.sjtu.edu.cn] scheduling reauthentication in 9938s maximum IKE_SA lifetime 10478s installing DNS server xx.xx.xx.xx via resolvconf installing DNS server xx.xx.xx.xx via resolvconf installing new virtual IP xx.xx.xx.xx CHILD_SA sjtu{5} established with SPIs xxxxxxxx_x xxxxxxx_x and TS xx.xx.xx.xx/32 === 0.0.0.0/0 received AUTH_LIFETIME of 85520s, reauthentication already scheduled in 9938s peer supports MOBIKE connection ‘sjtu’ established successfully
调试 如果第一次没有成功,可以通过以下流程调试:
- 看日志,找出错误位置
- 更改配置文件
- ipsec restart 重启
- ipsec up
再次尝试
PS:
为什么不用NetworkManager的插件?因为试过了连接不上,应该是支持的EAP认证方式过少的原因。 为什么不用简化过的命令行工具charon-cmd?因为试过了连不上,也是支持的EAP认证方式过少的原因。