使用ocserv搭建 Cisco Anyconnect 服务器(转)
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
不过我没有全写,只写了部分进去——我主要是刷推~
好了,就到这里吧!
评论
发表评论