在CentOS7上配置Cisco AnyConnect VPN
前段时间在搬瓦工上测试部署过Cisco AnyConnect VPN,使用了一键安装包,在iOS8上通过客户端连接成功并使用了一段时间。不过客户端证书验证一直出问题,每次连接都需要输入密码很麻烦。这两天抽空又在Linode上重新部署了一遍,同时搞定了p12证书,现在我的几台iOS设备都能欢快的畅游网络了。
Cisco AnyConnect VPN是目前iOS梯子的最佳解决方案
- 激活后全局有效
- 自动重连,即使锁屏后重开也不会掉线
- 可导入路由配置
部署Cisco AnyConnect VPN
首先说明,为了偷懒,我仍然选择了一键安装包,只是在安装完成后重新生成了证书及修改了部分配置文件。
先检查FirewallD有没有安装,如没有则执行 yum install -y firewalld 。 安装过程中会提示输入端口、密码等信息,现在直接跳到一键安装包安装结束。
重新生成证书
Generating the CA
$ certtool --generate-privkey --outfile ca-key.pem $ cat << _EOF_ >ca.tmpl cn = "VPN CA" organization = "Xiaoguo Corp" serial = 1 expiration_days = 9999 ca signing_key cert_signing_key crl_signing_key _EOF_ $ certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
Generating a local server certificate
$ certtool --generate-privkey --outfile server-key.pem $ cat << _EOF_ >server.tmpl cn = "xiaoguo.net" organization = "MyCompany" expiration_days = 9999 signing_key encryption_key #only if the generated key is an RSA one tls_www_server _EOF_ $ certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem
注意:这里的域名要和稍后配置文件中的默认域名一致。
Generating the client certificates
$ certtool --generate-privkey --outfile user-key.pem $ cat << _EOF_ >user.tmpl cn = "xiaoguo" unit = "admins" expiration_days = 999 signing_key tls_www_client _EOF_ $ certtool --generate-certificate --load-privkey user-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template user.tmpl --outfile user-cert.pem $ openssl pkcs12 -export -inkey user-key.pem -in user-cert.pem -certfile ca-cert.pem -out client.user.p12
官网上的 expirationdays 是9999天,生成的证书导入iOS中会出现问题,所以我修改成了999。另外用openssl代替certtool生成客户端证书,使用certtool生成的证书导入iOS同样也会出错。
停止ocserv服务
systemctl stop ocserv.service
将重新生成的证书文件ca-cert.pem server-cert.pem server-key.pem拷贝至/usr/local/etc/ocserv/ 目录,并覆盖掉之前的证书文件。
修改配置文件/usr/local/etc/ocserv/ocserv.conf
注释掉下面两句
#auth = "plain[/usr/local/etc/ocserv/ocpasswd]" #listen-clear-file = /var/run/ocserv-conn.socket
取消下面两句的注释:
auth = "certificate" default-domain = xiaoguo.net #注意保持和证书中的域名相同
启动ocserv服务
systemctl start ocserv.service