SDB:Setup AnyConnect VPN with ocserv
目录
背景知识:什么是 Cisco Anyconnect?什么是 ocserv?
Cisco Anyconnect 是思科推出的一款企业级 VPN。其背后的开源技术是 OpenConnect。简单来说就是平时使用 UDP 的 DTLS 协议进行加密,掉线时自动使用 TCP 的 TLS 协议进行备份恢复,因此相对其它 VPN 比较稳定;而且广泛被大企业采用,不容易被误杀;而加之比较小众架设起来不太容易,也吸引不了很多的火力。
ocserv 的安装
ocserv 的初始化配置
修改 server.tmpl 模板
将 ocserv 安装到您的服务器上后,您需要编辑 /etc/ocserv/certificates/server.tmpl,将其中的:
cn = "Your hostname or IP"
改成你服务器的 IP 地址,可以使用:
/sbin/ifconfig -a
查看
生成证书
cd /etc/ocserv/certificates sudo certtool --generate-privkey --outfile ca-key.pem sudo certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem sudo certtool --generate-privkey --outfile server-key.pem sudo 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
参考:http://blog.tremily.us/posts/X.509_certificates/
生成密码文件
sudo ocpasswd -c /etc/ocserv/ocpasswd 您要使用的用户名
“您要使用的用户名“是随意的,之后会提示您输入两次密码。
配置 iptables 规则
sudo /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE sudo /sbin/iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
连上后使用的 IP 地址段 192.168.1.0/24 是可以在 /etc/ocserv/ocserv.conf 中配置的,这里用的是默认的。
测试
sudo /sbin/ocserv -f -d 1
运行不报错的话,可以看下面的客户端连接来测试一下。
启动服务
sudo systemctl enable ocserv.service sudo systemctl start ocserv.service
客户端证书登录
也可以使用客户端证书而不是用户名密码来登录。
sudo certtool --generate-privkey --outfile user-key.pem sudo 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
生成 iOS 可用的 pk12 文件
openssl pkcs12 -export -inkey user-key.pem -in user-cert.pem -certfile ca-cert.pem -out user.p12
会提示设置密码。之后可以把 user.p12 放在可以在线下载的地方,用你的 safari 去打开那个 URL 导入证书。
修改 ocserv.conf 配置
把 auth 由
#auth = "certificate" auth = "plain[/etc/ocserv/ocpasswd]"
变成
auth = "certificate" #auth = "plain[/etc/ocserv/ocpasswd]"
并注释掉不支持的选项:
listen-clear-file = /var/run/ocserv-conn.socket
然后启用证书验证
ca-cert = /etc/ocserv/certificates/ca-cert.pem
然后重新启动 ocserv.service
sudo systemctl restart ocserv
客户端连接
iOS
看图说话(这是一个动态图,可以下载下来看,或者多等一会儿)
Linux
可以安装 NetworkManager-openconnect 体验,KDE 需要多装一个 plasma-nm-openconnect。只支持客户端证书登录。
设置需要的东西有:ca-cert.pem,user-cert.pem,user-key.pem
Android
可使用的客户端有 AnyConnect, SmoothConnect 以及 OpenConnect ,均可从 Google Play 里面安装。