使用ocserv搭建 Cisco Anyconnect 服务器

使用ocserv搭建 Cisco Anyconnect 服务器

前段时间的appleID被盗事件闹的沸沸扬扬,我果断回到狱中升级了9.0.这下好了,Shadowsocks不能用了。这一点来讲我还是挺羡慕Android手机的……使用 Surge 让 iOS 走 Shadowsocks实现科学上网。

总之,我们还是来在iOS的VPN上下下功夫吧。如今的VPN已经被认证的差不多了,因为它们虽然加密安全,但禁不住特征检测——好吧,毕竟说这东西就不是为了隐匿而生的。目前倒是我思科大爹还有个anyconnect在活着,不是它多么坚挺,而是用的企业太多,没法禁,而且,它还有断线自动连接,自动国内外按需分流等诸多的好处——最大一点:不需要越狱。

注意:

我使用的是Digital Ocean的VPS,Ubuntu 15.04 ,整个的配置步骤是我一边配一边记录的,是完全可行的,但由于系统环境复杂,每个人都不尽相同,所以你具体操作的时候可能仍旧需要灵活运用!


0、关于PAC的问题

我们经常说,Cisco 的 AnyConnect 是无法使用PAC的,因为它的机制不同,不是代理而是 VPN,所以本文使用的方法是从服务器直接下发一些路由条目——由于客户端限制,我们总是不能下发完整的路由表(只有200来条),这一点始终是广大 AnyConnect 的一块心病。总之,其实还有另外的一个办法,对于那些需要全局vpn但又想区分网络的企业,Cisco 还是有对应办法的。

那就是让服务器走代理。?

这就需求你有一台中国的vps来作为前置,并且这台vps使用比如 Shadowsocks 等工具连到你的国外 vps 上,然后再在中国 vps 上搭建ocserv,然后给它配置pac文件,这样ocserv就会根据你的代理策略来实现路由。总之,如果你想尝试这个方法,请直接跳转页面底部的 [参考文章] 小节,“移步 Anyconnect VPN使用PAC来智能分流” 这篇文章进行参考。

1、配置环境

这一步参考我之前写的一篇文章——如果你的vps是全新的,否则跳过吧~

2、架设OpenConnectServer

2.1下载源码

从这里查看ocserv的最新版本号,你不需要点到FTP里看,只要安装格式替换链接路径就行了。比如现在最新的版本是0.10.8,那么你就把地址写成这样:ftp://ftp.infradead.org/pub/ocserv/ocserv-0.10.8.tar.xz ,好,我们现在来下载源码:

2.2 安装依赖

下载解压好了代码,就需要安装一些依赖了,些是需要的,有些则是可选的,这里我们尽可能的安装所有依赖,万一将来用得着呢!毕竟也就十来兆的大小。

如果没有什么问题,那就可以安装了,比如我这里的结果是这样的:

2.3 编译安装

使用make命令来编译和安装:

3、配置OpenConnectServer

3.1准备证书

安装证书工具 aptget install gnutlsbin

在此目录下创建一个名为 ca.tmpl 的CA证书模板,写入如下语句:

使用 certtool generateprivkey outfile cakey.pem 生成CA密钥;

使用certtool generateselfsigned loadprivkey cakey.pem template ca.tmpl outfile cacert.pem 生成CA证书;

然后我们生成服务器证书,这里注意cn项必须对应你服务器的域名或IP,模板名称是server.tmpl ,内容如下:

使用 certtool generateprivkey outfile serverkey.pem 生成密钥;

使用certtool generatecertificate loadprivkey serverkey.pem loadcacertificate cacert.pem loadcaprivkey cakey.pem template server.tmpl outfile servercert.pem 生成server证书;

把证书移动到合适的地方:

3.2 准备配置文件

我们把配置文件放到ocserv默认读取的位置:

配置文件可以参考官方手册来写,不过这里我们重点要确保以下条目正确:

3.3 测试服务器

现在,我们就可以来测试一下服务器了,使用命令来创建一个测试账号:

如果你使用的也是Ubuntu系统,那你可以按照我写的这篇文章来开启NAT转发;

使用 iptables t nat L 来验证转发是否开启成功:

这时,我们就可以使用 ocserv f d 1 命令来启动下服务啦!

打开你手机上的Cisco Anyconnect新建一个VPN,添加服务器IP就是你的vps的 IP:端口

好了,如果你看到如下信息,那服务器应该已经能够正常运行了:

3.4 优化OpenConnectServer

好了,既然服务器已经可以跑起来,那么我们就可以优化它了,首先,来写个启动脚本——毕竟,不能每次都用调试模式启动不是吗?

如果你和我一样使用的是 Ubuntu 15.04 而不是旧版,那么你需要参考这篇文章来找回一下upstart才能使用下边的脚本。

在配置文件中写入如下脚本:

这样,我们就可以使用 service ocserv start 和 service ocserv stop来控制服务了。

3.5 创建客户端证书,省的老输入密码

写入如下内容:

将证书和密钥转为PKCS12的格式,好导入Anyconnect:

期间会要求你输入证书名字和密码。

然后你需要把这个证书放到一个可以被直接访问的地方,然后通过URL将user.p12文件导入AnyConnect,具体位置在诊断标签页的证书栏目下,导入成功之后,将对应的VPN设置的高级设置部分的证书栏目,改为导入的这张证书。

现在,为了让服务器能够认得这张证书,我们再来修改一下配置:

这样,我们使用 service ocserv start 来启动它即可!

4、智能分流

好了,一般来讲,如果你的是一个稳定且速度不慢的国外vps,那你现在就可以开始享受生活了!不过,我们的任务还没用结束,手动切换总不能说的上是智能,我们使用现成的。

https://github.com/don-johnny/anyconnect-routes/blob/master/routes

不过我没有全写,只写了部分进去——我主要是刷推~

好了,就到这里吧!

ocserv
ocserv

参考文章: