使用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准备证书

安装证书工具 apt-get install gnutls-bin

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

使用 certtool --generate-privkey --outfile ca-key.pem 生成CA密钥;

使用 certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem 生成CA证书;

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

使用 certtool --generate-privkey --outfile server-key.pem 生成密钥;

使用 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 生成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

参考文章:

折腾笔记:架设OpenConnect Server给iPhone提供更顺畅的网络生活

Anyconnect VPN使用PAC来智能分流

 

 

“使用ocserv搭建 Cisco Anyconnect 服务器”的15个回复

  1. 博主求指教 最后make的时候出错了 回去翻了下 问题应该是出在这里 这几个库我都是有的 要如何把他们添加到编译路径去? 谢谢
    local talloc: no
    local protobuf-c: no
    local PCL library: no
    local libopts: no
    local http-parser: no

  2. R0uter:

    你好!

    本人比较外行,请教一件事,我也是使用的Digital Ocean的VPS,Ubuntu 15.04 ,月费5美金那款,之前按照http://www.chedanji.com/ubuntu-shadowsocks/ 这篇帖子部署了Shadowsocks , 安卓手机和PC 都能翻了,现在准备按照你的这篇大作搭建Cisco Anyconnect 服务器,我可以直接操作吗?和以前的Shadowsocks会冲突吗?

    期盼回复,谢谢!

    1. 不用担心,随便配,我的vps现在两个都跑着没有任何问题!唯一需要注意的地方在于:避免端口冲突。只要注意这一点就ok了。不过,ac在我这速度不咋地,我已经准备卸载啦。推荐最新的surge!

发表评论

电子邮件地址不会被公开。 必填项已用*标注