在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

本页最后更新时间:2015-11-11 Wed 12:24.
小过的布拉格 - Copyright©2013-2017 - @xiaoguo - Powered by Emacs 26.1 (Org mode 9.1.1)
行路难,行路难, 多歧路,今安在。长风破浪会有时,直挂云帆济沧海。