SDB:Setup AnyConnect VPN with ocserv

跳转至: 导航, 搜索
未越狱的 iOS 设备上面大概有三种方式可以科学上网:使用 Shadowsocks;使用 Cisco Anyconnect;使用 VPN。其中 Shadowsocks 未越狱只能在一个特定的浏览器中访问,体验很不好,而 VPN 服务器配置起来又太过麻烦。于是一些轻量级 VPN 变得流行了起来。这里我们将要介绍如何在 openSUSE 13.1+ 系统上面使用 ocserv 搭建一个支持 Cisco Anyconnect 的 VPN 服务器,并使用 iPhone 和 Linux 连接。

背景知识:什么是 Cisco Anyconnect?什么是 ocserv?

Cisco Anyconnect 是思科推出的一款企业级 VPN。其背后的开源技术是 OpenConnect。简单来说就是平时使用 UDP 的 DTLS 协议进行加密,掉线时自动使用 TCP 的 TLS 协议进行备份恢复,因此相对其它 VPN 比较稳定;而且广泛被大企业采用,不容易被误杀;而加之比较小众架设起来不太容易,也吸引不了很多的火力。

ocserv 的安装

Oneclick.png

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 中配置的,这里用的是默认的。

注意 如果您没有特别设置过,新版 udev 确定的网口可能不是规整的 eth0,您需要 ifconfig -a 看后替换成你的。

测试

   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

看图说话(这是一个动态图,可以下载下来看,或者多等一会儿)

AnyConnect iOS.gif

Linux

可以安装 NetworkManager-openconnect 体验,KDE 需要多装一个 plasma-nm-openconnect。只支持客户端证书登录。

设置需要的东西有:ca-cert.pem,user-cert.pem,user-key.pem

Anyconnect-linux.png

Android

可使用的客户端有 AnyConnect, SmoothConnect 以及 OpenConnect ,均可从 Google Play 里面安装。

推荐阅读