使用ocserv搭建 Cisco Anyconnect 服务器

您所在的位置:网站首页 anyconnect收费吗 使用ocserv搭建 Cisco Anyconnect 服务器

使用ocserv搭建 Cisco Anyconnect 服务器

2023-07-02 22:35| 来源: 网络整理| 查看: 265

最近更新:4th 9月, 2022

前段时间的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 ,好,我们现在来下载源码:

12 wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.10.8.tar.xztar xvf ocserv-0.10.8.tar.xz

2.2 安装依赖

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

1234 sudo apt-get install build-essential pkg-config libgnutls28-dev libreadline-dev libseccomp-dev libwrap0-dev libnl-nf-3-dev liblz4-dev cd ocserv-0.10.8./configure

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

12345678910111213141516171819202122232425 ummary of build options:  version:              0.10.8  Host type:            x86_64-unknown-linux-gnu  Install prefix:       /usr/local  Compiler:             gcc  CFlags:               -g -O2 -Wall   PAM auth backend:     no  Radius auth backend:  no  GSSAPI auth backend:  no  Anyconnect compat:    yes  TCP wrappers:         yes  systemd:              no  (socket activation)  seccomp:              yes  Compression:          yes  LZ4 compression:      no  readline:             yes  libnl3:               yes  glibc (sha2crypt):    yes  local talloc:         yes  local protobuf-c:     yes  local PCL library:    yes  local libopts:        yes  local http-parser:    yes

2.3 编译安装

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

123 make sudo make install

3、配置OpenConnectServer 3.1准备证书

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

12345 cd ~ mkdir certificates cd certificates

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

12345678 cn = "Logcg.com" organization = "logcg.com" serial = 1 expiration_days = 3650ca signing_key cert_signing_key crl_signing_key

使用 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 ,内容如下:

123456 cn = "Your hostname or IP" organization = "logcg.com" expiration_days = 3650signing_key encryption_keytls_www_server

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

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

123 cp ca-cert.pem /etc/ssl/private/my-ca-cert.pemcp server-cert.pem /etc/ssl/private/my-server-cert.pemcp server-key.pem /etc/ssl/private/my-server-key.pem

3.2 准备配置文件

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

123 mkdir /etc/ocservcd ~/ocserv-0.10.8cp doc/sample.config /etc/ocserv/ocserv.conf

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

1234567891011121314151617181920212223242526272829303132333435 # 登陆方式,目前先用密码登录auth = "plain[/etc/ocserv/ocpasswd]" # 允许同时连接的客户端数量max-clients = 4 # 限制同一客户端的并行登陆数量max-same-clients = 2 # 服务监听的IP(服务器IP,可不设置)listen-host = 1.2.3.4 # 服务监听的TCP/UDP端口(选择你喜欢的数字)tcp-port = 9000udp-port = 9001 # 自动优化VPN的网络性能try-mtu-discovery = true # 确保服务器正确读取用户证书(后面会用到用户证书)cert-user-oid = 2.5.4.3 # 服务器证书与密钥server-cert = /etc/ssl/private/my-server-cert.pemserver-key = /etc/ssl/private/my-server-key.pem # 客户端连上vpn后使用的dnsdns = 8.8.8.8dns = 8.8.4.4 # 注释掉所有的route,让服务器成为gateway#route = 192.168.1.0/255.255.255.0 # 启用cisco客户端兼容性支持cisco-client-compat = true

3.3 测试服务器

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

123 root@iZ289z55gmrZ:~/ocserv-0.10.8# ocpasswd -c /etc/ocserv/ocpasswd testEnter password:Re-enter password:

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

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

12345678910111213 root@iZ289z55gmrZ:~# iptables -L -t natChain PREROUTING (policy ACCEPT)target     prot opt source               destination Chain INPUT (policy ACCEPT)target     prot opt source               destination Chain OUTPUT (policy ACCEPT)target     prot opt source               destination Chain POSTROUTING (policy ACCEPT)target     prot opt source               destinationMASQUERADE  all  --  192.168.1.0/24       anywhere

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

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

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

1234567891011121314151617181920 root@iZ289z55gmrZ:~# ocserv -f -d 1Parsing plain auth method subconfig using legacy formatSetting 'plain' as primary authentication methodlistening (TCP) on 0.0.0.0:110...listening (UDP) on 0.0.0.0:9000...ocserv[16104]: main: initialized ocserv 0.10.8ocserv[16105]: sec-mod: reading supplemental config from filesocserv[16105]: sec-mod: sec-mod initialized (socket: /var/run/ocserv-socket.16104)ocserv[16109]: GnuTLS error (at worker-vpn.c:468): A TLS fatal alert has been received.: Unknown certificateocserv[16104]: main: 60.0.14.48:9890 user disconnectedocserv[16105]: sec-mod: using 'plain' authentication to authenticate user (session: FXS0l)ocserv[16104]: main: 60.0.14.48:36627 user disconnectedocserv[16105]: sec-mod: initiating session for user 'test' (session: FXS0l)ocserv[16104]: main[test]: 60.0.14.48:9663 new user sessionocserv[16104]: main[test]: 60.0.14.48:9663 user logged inocserv[16104]: main: 60.0.14.48:46429 user disconnectedocserv[16104]: main[test]: 60.0.14.48:9663 user disconnectedocserv[16105]: sec-mod: temporarily closing session for test (session: FXS0l)ocserv[16105]: sec-mod: initiating session for user 'test' (session: FXS0l)ocserv[16104]: main[test]: 60.0.14.48:38135 new user sessionocserv[16104]: main[test]: 60.0.14.48:38135 user logged in

3.4 优化OpenConnectServer

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

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

12345 cd /etc/init.d ln -s /lib/init/upstart-job ocserv cd /etc/initvi  ocserv.conf

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

123456789101112 #!upstartdescription "OpenConnect Server" start on runlevel [2345]stop on runlevel [06] respawnrespawn limit 20 5 script    exec start-stop-daemon --start --pidfile /var/run/ocserv.pid --exec /usr/local/sbin/ocserv -- -f >> /dev/null 2>&1end script

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

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

12 cd ~/certificates/vi user.tmpl

写入如下内容:

12345 cn = "some random name"unit = "some random unit"expiration_days = 365signing_keytls_www_client

1234567 //User密钥 certtool --generate-privkey --outfile user-key.pem //User证书 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

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

1 certtool --to-p12 --load-privkey user-key.pem --pkcs-cipher 3des-pkcs12 --load-certificate user-cert.pem --outfile user.p12 --outder

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

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

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

12345678910 vi /etc/ocserv/ocserv.conf # 改为证书登陆,注释掉原来的登陆模式auth = "certificate" # 证书认证不支持这个选项,注释掉这行#listen-clear-file = /var/run/ocserv-conn.socket # 启用证书验证ca-cert = /etc/ssl/private/my-ca-cert.pem

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

4、智能分流

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

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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 # Dropboxroute = 108.160.0.0/255.255.0.0route = 199.47.0.0/255.255.0.0route = 205.189.0.0/255.255.0.0 # Facebookroute = 58.26.0.0/255.255.0.0route = 210.149.0.0/255.255.0.0route = 31.13.0.0/255.255.0.0route = 66.220.0.0/255.255.0.0route = 69.63.0.0/255.255.0.0route = 69.171.0.0/255.255.0.0route = 74.119.0.0/255.255.0.0route = 173.252.0.0/255.255.0.0route = 199.201.0.0/255.255.0.0route = 204.15.0.0/255.255.0.0route = 1.9.0.0/255.255.0.0 # Githubroute = 192.30.0.0/255.255.0.0route = 23.235.0.0/255.255.0.0route = 199.27.0.0/255.255.0.0route = 104.156.0.0/255.255.0.0 # Googleroute = 8.6.0.0/255.255.0.0route = 8.8.0.0/255.255.0.0route = 8.15.0.0/255.255.0.0route = 8.34.0.0/255.255.0.0route = 8.35.0.0/255.255.0.0route = 23.236.0.0/255.255.0.0route = 23.251.0.0/255.255.0.0route = 64.9.0.0/255.255.0.0route = 64.233.0.0/255.255.0.0route = 66.102.0.0/255.255.0.0route = 66.249.0.0/255.255.0.0route = 70.32.0.0/255.255.0.0route = 72.14.0.0/255.255.0.0route = 74.125.0.0/255.255.0.0route = 104.132.0.0/255.252.0.0route = 104.154.0.0/255.254.0.0route = 104.196.0.0/255.252.0.0route = 107.167.0.0/255.255.0.0route = 107.178.0.0/255.255.0.0route = 108.59.0.0/255.255.0.0route = 108.170.0.0/255.255.0.0route = 108.177.0.0/255.255.0.0route = 130.211.0.0/255.255.0.0route = 142.250.0.0/255.254.0.0route = 146.148.0.0/255.255.0.0route = 162.216.0.0/255.255.0.0route = 162.222.0.0/255.255.0.0route = 172.217.0.0/255.255.0.0route = 172.253.0.0/255.255.0.0route = 173.194.0.0/255.255.0.0route = 173.255.0.0/255.255.0.0route = 192.158.0.0/255.255.0.0route = 192.178.0.0/255.254.0.0route = 199.192.0.0/255.255.0.0route = 199.223.0.0/255.255.0.0route = 207.223.0.0/255.255.0.0route = 209.85.0.0/255.255.0.0route = 216.58.0.0/255.255.0.0route = 216.239.0.0/255.255.0.0#google ext 2015-08-27route = 111.168.0.0/255.255.0.0 # Twitterroute = 8.25.0.0/255.255.0.0route = 192.133.0.0/255.255.0.0route = 199.16.0.0/255.255.0.0route = 192.229.0.0/255.255.0.0route = 104.244.0.0/255.255.0.0route = 199.59.0.0/255.255.0.0route = 199.96.0.0/255.255.0.0 # Wikimediaroute = 91.198.0.0/255.255.0.0route = 185.15.0.0/255.255.0.0route = 198.35.0.0/255.255.0.0route = 198.73.0.0/255.255.0.0route = 208.80.0.0/255.255.0.0 # instagramroute = 54.0.0.0/255.0.0.0route = 52.0.0.0/255.0.0.0route = 72.246.0.0/255.255.0.0route = 23.32.0.0/255.255.0.0route = 125.56.0.0/255.255.0.0 #1024route = 162.159.246.97/255.255.255.255 #Linn Radioroute = 89.16.0.0/255.255.0.0 #Quaroroute = 192.33.31.60/255.255.255.255route = 103.243.12.60/255.255.255.255 #www.flinto.comroute = 103.245.0.0/255.255.0.0 #TELEGRAMroute = 91.108.0.0/255.255.0.0route = 149.154.0.0/255.255.0.0 #vfsglobal.comroute = 210.210.0.0/255.255.0.0

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

好了,就到这里吧!

ocserv

ocserv

参考文章:

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

Anyconnect VPN使用PAC来智能分流

 

 

本文由 落格博客 原创撰写:落格博客 » 使用ocserv搭建 Cisco Anyconnect 服务器

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

相关文章: 搭建 OpenConnect VPN 服务器 AnyConnect (ocserv) macOS 平台第三方输入法的生命周期到底是怎样的? Cisco ip helper-address 详解 main (int ac, char *av[])和 main(int argc,char *argv[])的一点自己理解 给服务器添加 ipv6 支持 以通过苹果审核 当SSH遇到“Write failed: Broken pipe”


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3