使用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 服务器

转载请保留出处和原文链接:https://www.logcg.com/archives/1343.html

About the Author

R0uter

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

Comments

  1. ocserv -f -d 1启动服务能正常使用。service ocserv start 运行后,输入ip连接服务器,点击继续后,就提示无法连接服务器。什么原因?

    1. ping 服务器能通吗?
      curl 一下试试?通常来说,gfw 会在你连接的第一时间阻断并拉黑,尝试换个随机端口,并用国外服务器跑客户端连一下确认到底是gfw还是服务没有配对。

      另外,确保你端口可访问,比如服务器的防火墙,还有如果你用的云服务的话,通常平台自身还有个默认防火墙,可能只开了22端口,也要开一下。

      1. ocserv -f -d 1跟service ocserv start启动区别是什么?
        ocserv -f -d 1启动,手机Cisco Anyconnect能账号密码登录,能访问谷歌等外网。就表示防火墙端口什么的都没问题吧。
        切换到service ocserv start启动,连接服务器,点击继续后,就提示无法连接服务器。

  2. 您好,想请教一下。
    参考您的文章搭建好了服务之后,AnyConnect可以连接,但是连接之后并不能访问google.
    我尝试了
    telnet ip port 和nc命令测试了TCP和UDP
    iptables -t nat -L 结果也和您的一致
    net.ipv4.ip_forward=1没有注释
    您能给个思路吗,谢谢

    1. 首先看看你服务器机房在哪,我们假如它在美西,那先试试比如访问我的博客能不能通,这样我们可以确定你是不是被dns污染了,dns污染是双向的,不光面向国内,也面向国外的。
      然后是确保在服务器上curl 一下 google,确定服务器本身是通的
      你telnet了 ip 是通的,说明本地访问服务器没问题,那我猜测很有可能是DNS解析的问题(尤其是仅Google这一类被墙的网站打不开的话,从这方面下手试试

      另外现在wireguard这类工具可能要比anyconnect好很多,毕竟后者现在应该已经能被gfw识别并屏蔽了………………

      1. 我的这个服务器,一直部署的IPSec使用,服务器本身是没有问题的。
        但是IPSec对windows支持很差,需要修改注册表、DNS和组策略等等问题,前些日子了解到了ocserv就想尝试一下。
        哪知道又冒出来个wireguard,还是眼界窄,头一回听说这玩意

        1. 根据我当年部署这东西的经验,gfw是见一个封一个,可能之前你服务器正常,但他扫到这个,就开始干扰了。这也是我很快就放弃它的原因,它只是加密,不混淆,一般很难活的长久。
          wireguard是比较新的产物,它代码量小但性能高,是用UDP发包,但在一些运营商中可能会对UDP进行限制,效果不一定是最佳的,但肯定比 AnyConnect 要好使的。

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

  4. R0uter:

    你好!

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

    期盼回复,谢谢!

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

发表回复

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