您的位置: 首页 » 翻越奥义 » OpenConnect server(ocserv) 一键脚本 for deibian 7+

OpenConnect server(ocserv) 一键脚本 for deibian 7+

作者:liyangyijie / 时间:January 21, 2015 /分类:翻越奥义 / 标签:ocserv, debian, ubuntu, anyconnect, jessie, user-friendly script /阅览次数:1,276,873

该脚本在deibian 7+/ubuntu 14.04-15.10(2015-10-31)上进行过测试,默认使用密码方式登录,思科anyconnect客户端可连可用。

AnyConnect是思科的安全远程接入解决方案,之前只有思科的设备才支持。

ocserv(OpenConnect server)是一个OpenConnect SSL 协议服务端,0.3.0版后兼容使用AnyConnect SSL 协议的终端。

官方主页:http://www.infradead.org/ocserv/

2015年7月6日 
更新和提示:
1,默认使用ocserv的0.10.6版本,由于移除了服务端路由规则数量限制,脚本不再询问路由规则限制数。
2,自签证书全部使用sha256签名算法,且完善证书链。
3,增加支持ubuntu 14.10、15.04。(但不建议使用非LTS版本ubuntu)
4,证书登录方式增加支持自定义客户端证书的CN名。
5,添加了更加完整的安装日志。
6,更新启动管理脚本,增加debug模式,下文说明。
7,支持用户名密码登录和证书登录同时开启,下文说明。
8,增加了相同客户端证书可以登录多个服务器的方案,下文说明。
9,修复一些其他小问题。
2015年5月1日 
更新和提示:
1,编译安装freeradius-client-1.1.7,便于freeradius认证。(/etc/radiusclient/radiusclient.conf) 
2,编译安装lz4。(/usr/local)
3,随机字符串获取剔除容易识别错误的字符例如0和O等等。
4,增加DH parameters。
5,关于GSSAPI认证,开启支持下文说明。
6,兼容debian 8 (jessie)。
7,在没有卸载依赖的情况下,支持平滑升级降级,升降级之后原来用户数据保留;也可以选择强制重装,抹掉原来数据。 
2015年4月8日
更新和提示:
1,允许自定义客户端证书的到期日期。
2,默认从github编译安装依赖包lz4,避免某些情况下会破坏系统,但仍然可以选择强制从debian Jessie更新liblz4-dev。
3,增加对ubuntu 14.04的支持 。 
2015年3月25日 
更新与提示:
1,增加了ocserv最新版本检测,默认推荐使用0.10.1版本 。
2,如果为了稳定使用,这里并不推荐使用最新版本,有些最新发行版由于存在严重bug很快被更新的版本替代。  
3,增加支持证书登录以及吊销证书。
4,默认开启lz4压缩,据说能极大提升速度。
5,默认是tcp和udp同时开启,若速度不佳,可在安装时选Only use tcp-port,或在配置文件里面注释掉udp端口。
6,曾经使用过该脚本安装的朋友,可以通过下面提到的命令升级重装。
2015-01-27 
更新:依然使用0.8.9版本进行编译安装,增加了一些自定义选项,但不支持证书登录。 

由于各种依赖较新,debian 7以下不支持。openvz需要支持打开tun/tap服务。

关于这个一键脚本的github放置点

https://github.com/fanyueciyuan/eazy-for-ss/tree/master/ocservauto

编译安装总结(jessie)



一,安装步骤:

1,安装与调试

如果这是纯净新系统的话,请先更新一下系统。

apt-get update && apt-get upgrade -y

首次安装,终端输入以下命令

wget git.io/p9r8 --no-check-certificate -O ocservauto.sh&&bash ocservauto.sh

如果您以前使用了该脚本进行安装,只需要输入下面命令更新(只更新相关脚本,服务器不会更新)

wget git.io/ocservauto -O- --no-check-certificate|bash -

如果使用自动安装,默认是使用用户名和密码登录,只需要输入初始用户名和密码,回车即可自动安装完成。

如果使用自定义安装,请输入自己的要求来完成安装。

下面是进入脚本之后一些选项说明解释。

如果安装顺利,最后给出您的相应信息,例如

如果安装失败可以查阅安装日志,即脚本所在文件夹的ocinstall.log文件,可以使用下面命令逐步阅读

more ocinstall.log

空格键,向下滚动一屏;Ctrl+b,返回上一屏;q,退出。

一般情况下安装成功之后,服务器就在启动状态了。

这里可以简单使用本地浏览器查看服务器信息,在本地浏览器输入https://IP或域名:(英文冒号)端口

如果您仍然无法连到服务器或者出现其他问题,那么请使用debug模式。

如果您以前使用了该脚本进行安装,这里请先通过前面所说的,更新一下脚本。

首先关闭服务器,然后开启调试模式

/etc/init.d/ocserv stop
/etc/init.d/ocserv debug

此时不要关闭终端,使用客户端登录服务器,在终端屏幕下就会显示即时日志,以供调试改错。

2,简单用户管理

a,用户名密码验证方式

若要新建可用用户,输入以下命令

sudo ocpasswd -c /etc/ocserv/ocpasswd 999

这里的 “999”是新建的用户名。接着输入两次同样的密码,完成新建用户。

b,证书登录方式

所有用户的p12证书文件可以在放置脚本的目录下找到,导入证书时请输入自己设定的密码。

新建客户证书用以下命令

bash ocservauto.sh gc



吊销客户证书请使用下面命令

bash ocservauto.sh rc


3,脚本其他参数说明

a,平滑升级ocserv

请输入以下命令,原来的用户数据都会保留

bash ocservauto.sh ug

b,强制重装ocserv

请输入以下命令,注意这会使您的用户数据和配置丢失

bash ocservauto.sh ri

c,同时开启证书登录和用户名密码登录

请务必首先选择任意一种登录方式来完成安装,接着再使用下面命令

bash ocservauto.sh pc

d,关于相同客户端证书可以登录多个服务器的方案

假定我们有三台服务器ABC。

在A服务器上,通过本脚本安装ocserv并选择使用证书登录方式。

于/etc/ocserv目录下可以找到ca-cert.pem文件。这里复制备用,ca-cert.pem不用保密,可以直接挂在公网上。

在BC服务器上下载本脚本,并且请在同文件夹下放置A服务器上的ca-cert.pem,然后执行

bash ocservauto.sh occ

这里ABC服务器共用了A服务器的验证证书。

想要获取新证书,请在A服务器上执行

bash ocservauto.sh gc

也可以使用该客户端证书登录BC服务器。

如想要吊销证书,请在A服务器上执行

bash ocservauto.sh rc

吊销所有想要吊销的证书。

由于不支持在线吊销证书列表,所以必须还要把A服务器上的/etc/ocserv/crl.pem文件同时复制到BC服务器相同位置,且把ocserv的配置文件中的

#crl = /etc/ocserv/crl.pem

去掉注释,最后重启BC服务器的ocserv。


二,使用步骤

这里以安卓为例,由于是自签证书,需要关掉客户端设置中的“阻止不信任的服务器”。


服务器需要填写的是自己服务器的地址加端口,例如9.9.9.9:999,必须要填写自己的端口

关于客户端的获取,安卓、IOS、WindowsPhone在官方市场可以获取,特殊说明的是WindowsPhone是BETA版,如下

http://www.fanyueciyuan.info/jsxj/wp-anyconnect.html

三,附加说明

1,所有配置文件统一放到了/etc/ocserv/文件夹下,管理脚本为/etc/init.d/ocserv 。自行修改配置后,可以使用下面命令重启服务。

/etc/init.d/ocserv restart

2,该脚本下ocserv的证书逻辑。

a,用户名密码登录

自签CA(证书授权中心),取得ca-cert.pem(不需要保密,类比公钥)和ca-key.pem(需要保密,类比私钥)。

CA签发信任服务器证书,取得server-cert.pem(不需要保密,类比公钥)、server-key.pem(需要保密,类比私钥)。

该模式下,密码库是/etc/ocserv/ocpasswd文件。

如果想使用购买的服务器证书,请参考Nginx服务器证书配置,只需将对应的crt、key 文件重命名为server-cert.pem、server-key.pem,并覆盖到/etc/ocserv/文件夹下面。

b,证书登录

自签CA(证书授权中心),取得ca-cert.pem(不需要保密,类比公钥)和ca-key.pem(需要保密,类比私钥)。

CA签发信任服务器证书,取得server-cert.pem(不需要保密,类比公钥)、server-key.pem(需要保密,类比私钥)。

CA签发信任客户端证书,最终取得username.p12。

这里证书授权中心的ca-cert.pem既当作服务器证书的根证书,也当作客户端证书的验证证书。

由于CA证书当作验证证书,签发客户端证书就需要这个ca-key.pem,可以比同为密码库。

如果想使用购买的服务器证书,请参考Nginx服务器证书配置,只需将对应的crt、key 文件重命名为server-cert.pem、server-key.pem,并覆盖到/etc/ocserv/文件夹下面。

3,改善优化

修改的参数都在/etc/ocserv/ocserv.conf文件中。

a,对于某些移动宽带、长城带宽等,往往经过了很多重NAT,容易出现连接成功但是无法打开网页情况,请改小dpd、mobile-dpd数值。

b,如果vps对于本地延迟甚高,取消注释output-buffer项。

上一篇 : nginx反代 下一篇 : DMM RSS

已有 570 条评论

  1. ycyppq123 ycyppq123

    请问锐速能否加速AnyConnect VPN,用了锐速之后反而AnyConnect VPN速度变慢了。

    1. 锐速加速的是tcp,ocserv只用tcp端口,另外有时候锐速加速效果不佳时候得修改rsc选项为1
      由于是使用tun设备,所以还得使用这个脚本把虚拟接口实时添加。
      https://github.com/fanyueciyuan/eazy-for-ss/blob/master/ocservauto/Speeder_reload.md

      1. mk mk

        用了贴的脚本后,vps出现很多这个信息,是怎么回事呢?

        ......
        Message from syslogd@install at Aug 9 21:53:41 ...
        kernel:[ 2656.648089] unregister_netdevice: waiting for vpns0 to become free. Usage count = 1

        1. 更正试试
          connect-script = /etc/ocserv/Speeder_reload.sh

          disconnect-script = /etc/ocserv/Speeder_reload.sh
          1. 85hou 85hou

            更正了之后,还是有这个问题出现。。。

            1. 只是让锐速不会崩溃而已,错误日志还会有的。

          2. ycyppq123 ycyppq123

            VPN在windows客户端上连接刚好40分钟的时候,YouTube速度变得很慢,之前一直正常,是不是有什么设置可以改一下让40分钟之后不会有速度上的限制?

            1. ocserv的默认配置里面没有设定任何速度上的限制,如果很多次都是40分钟的话,倒不如说像是isp的定时限速,也许换成80 443端口能回避这个问题。

      2. ycyppq123 ycyppq123

        /serverspeeder/etc/config 配置单中,accif="eth0" 能否加速成功?还是必须要:accif="eth0 vpns0"

      3. purrhudite purrhudite

        这个脚本在ubuntu14.04上面会有问题啊,我反馈到了v2ex上那个链接,但是好像只有我的有问题啊,请问是什么问题啊,内核要换么?
        地址是https://www.v2ex.com/t/172292

      4. ycyppq123 ycyppq123

        感谢,设置后速度很快。

  2. seramat seramat

    请问楼主,之后我申请了comodo的ssl证书,如何把证书引入到ocserv呢?
    谢谢!

    1. 将对应的证书、私钥文件命名为server-cert.pem、server-key.pem,并覆盖到/etc/ocserv/文件夹下面。

  3. roy roy

    求指导,openvz架构vps,部署以证书登录,可连上但不能上网,请问要如何解决?多谢!

    https://www.evernote.com/shard/s218/sh/ec0e6785-e22b-4b56-bc38-b5792de972ef/84bd2196b407bf5817f406153367ae73

    1. 看起来像是iptables无法正常工作
      sudo modprobe ip_tables
      sudo echo 'ip_tables' >> /etc/modules
      试试上面开启载入iptables的命令

  4. lon lon

    请问同时支持证书和用户名密码验证是怎么弄的,没看到你下文有说明.安装的时候我选择的证书验证,然后去配置里把用户密码验证也打开了,两个同时开启的话,默认还是先验证证书,然后就找不到证书连接失败,此时禁用证书验证就可以用户密码登陆

    1. auth = "plain[passwd=/etc/ocserv/ocpasswd]"
      enable-auth = certificate
      开头的验证相关选项,只开启上面两项

      1. lon lon

        搞定了,谢谢,又有新问题请教:1启用了分组策略,用户密码验证可以选择分组,证书验证只能全局么,2要解决不受信任的连接提示,是要购买证书,然后安装Ngnix导入么,购买证书安装这个一直没搞懂

        1. 证书验证分组策略 ios客户端有bug,无法实现分组。
          获取证书之后,不需要安装nginx,这里仅仅是说如何获取ocserv能使用的证书格式。
          获取的crt和key要修改名字为server-cert.pem、server-key.pem,并覆盖到/etc/ocserv/文件夹下面。

          1. lon lon

            把StartSSL给的crt和key修改名字为server-cert.pem、server-key.pem,并覆盖到/etc/ocserv/文件夹下面,
            重启ocserv报错无法连接:GnuTLS error (at sec-mod.c: 620): Decryption has failed.
            连接被是拒,是证书格式不对么

            1. StartSSL private key 需要解密
              openssl rsa -in ssl.key -out server-key.pem

              1. lon lon

                太棒了,都搞定了,一键开启,再也没有烦人的不受信任服务器提示和用户密码输入问题了。太感谢了。证书分组的问题是不是只能等Ocerv更新解决bug了

  5. ycyppq123 ycyppq123

    请问那个999端口号在哪个文件里修改?

    1. /etc/ocserv/ocserv.conf
      tcp-port选项

      1. ycyppq123 ycyppq123

        非常感谢,debian7一次成功。

  6. joe joe

    刚开始正常,使用一段时间之后出现问题,只能打开少数网站百度 ip138等,谷歌 youtube都打不开,清除数据方式重装也无效,如何解决,谢谢

  7. AVC AVC

    服务启动脚本在有双出口网卡(eth0/eth1)的时候会失败,程序运行了但是iptables没有设置。建议增加判断

    1. openconnect 只支持route 不支持no-route;
      ip route show|sed -n 's/^default. dev (1).*/\1/p'
      上面命令是基于路由表来提取出来现在出口网卡。
      修改/etc/ocserv/ocserv-up.sh文件里面的
      gw_intf_oc=ip route show|sed -n 's/^default.* dev \([^ ]*\).*/\1/p'

      gw_intf_oc=eth0
      之类的

      1. wang wang

        作者你好,一键脚本很强悍,有个问题第一次连上后可以连接网站,以后再连,可以连上但不能上任何网站?
        还有个问题,输入测试命令方式 ocserv -c /etc/ocserv/ocserv.conf -f -d 1,死活连接不上,连接上的同时PUTTY马上断开并不能上网,只能用/etc/init.d/ocserv/ocserv start,这样PUTTY不会断开,且能上网。

        1. 测试方式只是让您能够进行测试,这样终端能够显示即时日志,能够进行错误排查。

  8. AVC AVC

    使用no-route添加了5300条不路由的路由表,客户端能够过认证,但是会提示连接失败。Ubuntu 14.04 x64&Android Anyconnect4.0.01332

    1. 建议使用简化版路由表,5300多条对于这种测试软恐怕没那么好用。
      https://github.com/CNMan/ocserv-cn-no-route

      1. AVC AVC

        这个看过,会漏掉很多,像DMM的IP 124.147.10.210就会在no-route=124.0.0.0/255.0.0.0里面而不走代理,还有一大堆的akamai节点也会漏,导致instagram经常加载不出图

        1. 路由表的话,没发现最优解决方案。
          现在的选择项,
          1,自己蛋疼地编写适应自己的路由表
          2,反馈给ocserv-cn-no-route,开个new issue,详细反馈情况
          3,全局

          1. AVC AVC

            有点伤心,以为服务端没限制了就没问题了

            1. 这个服务端和客户端都得无缝支持才行。你可以试试openconnect的客户端。

              1. AVC AVC

                尝试了一下,openconnect能接收所有路由表,但是仍然是全局,没有效果

  9. minh minh

    您好,最新的这个版本确实编译0.10.6的话会不行,我试了一下,如果安装0.10.3就没问题。debian7 32位系统,错误日志和前面那位的一模一样

    1. 脚本已经修复了。
      重新安装即可。

  10. kevin kevin

    你好,7月6号更新的版本好像有个问题,在debian7上装不了,用的是linode的vps,换成debian8才行,之前5月1号的版本在debian7上安装没有问题……因为锐速现在还不支持debian8,所以请求修复一下这个问题

    1. 感谢您的反馈,抽时间完成修复。

  11. Sam Sam

    你在文章最后证书登录部分也提到了“如果想使用购买的服务器证书,请参考Nginx服务器证书配置,blablabla..”

    请问我能否使用已购买的SSL证书用到ocserv来做证书登录呢?如何签发客户端证书?ca-cert.pem 可以用商家的CA,但是ca-key这个怎么来呢?

    还是说购买的证书只能用户名密码登录?

    1. 可以用商家ssl做服务器证书,手机客户端之所以显示不受信任,是自签服务器证书的缘故。请不要用商家的根证书作验证证书!那就意味着商家签发的任意客户端证书都能登录你的服务器!

      1. Sam Sam

        感谢提醒,已经搞定,CA还是自签,客户端证书也是用脚本 来签发,只不过连接过程中的server-cert.pem 和 server-key.pem 这两个换成自己购买的证书。完美实现证书登陆+没有不信任证书提示。

  12. xp xp

    ERROR: Ocserv install failure,check /root/ocinstall.log

    弄到最后 出现而来这个。

    1. more /root/ocinstall.log
      请查看日志文件。

      1. marka marka

        make[2] : Leaving directory '/root/ocserv-0.10.6/tests'
        make[1] : 同上
        make[1] : Entering directory '/root/ocserv-0.10.6'
        make[1] : Notning to be done for 'clean-am'.

        请问着重看日志哪些地方?

        1. 脚本已经修复了。
          重新安装即可。

          1. marka marka

            感谢,已经可以编译成功

  13. [...]感谢 liyangyijie 作者提供一键脚本[...]

  14. zzmfreeman zzmfreeman

    客户端anyconnect连接成功,但是无法上网。服务器端把防火墙配置全部清空了也不行,有什么办法可以debug服务器端信息吗?

    1. 首先关闭服务器。
      然后iptables设置,
      bash /etc/ocserv/start-ocserv-sysctl.sh
      然后开启debug模式
      ocserv -c /etc/ocserv/ocserv.conf -f -d 2
      ctrl+c结束

  15. [...]感谢 liyangyijie 作者提供一键脚本[...]

  16. 成功导入 CA 证书后,客户端连不上,提示:无法连接到服务器。请验证 Internet 连接和服务器地址。
    端口删了,测连,提示:无法连接到此网关。请选择其他网关并重试。
    我傻眼了,我设置了防火墙?可是iptables-save | grep 'ocserv'后有端口,凌乱了……

    1. 我想问问有没有捐助的,因为你的脚本太棒了,以至于想捐助一点点……只是一点点……

      1. 感谢您的使用,您的使用是对我最大的赞助。

    2. 你好,请确认您的服务器地址没有填错。在服务器端查阅服务器日志。

      1. 其实,你应该放开所有你在sh里面的中文解释,我是在里面一个个看才知道怎么做的……
        同时貌似木有针对ssl的解释和说明。
        不过还是非常感谢你提供的脚本,真的超级棒!
        只不过移动宽带下好像……有点烦。
        ——结

  17. jovy jovy

    你好,我也是出现了安装成功,然后用手机端连接了,能够脸上,但是上不了网的情况,不知道你这个如何完全卸载呢?我想试试重新安装,谢谢,辛苦你了

    1. 能够连上但是无法连接外网 一般是防火墙的的问题。
      可以重启一下
      service ocserv restart
      卸载重装的话
      bash ocservauto.sh ri

      1. jovy jovy

        请问怎么解决呢?

      2. jovy jovy

        listening (TCP) on [::]:999...
        bind() failed: Address already in use
        Could not listen to any TCP or UNIX ports
        也有这个

      3. jovy jovy

        Setting 'plain' as primary authentication method
        listening (TCP) on 0.0.0.0:999...
        bind() failed: Address already in use
        有这个

      4. jovy jovy

        重启我试过了,但是还是没有用,我之前的vps上部署过这个,可以连上,但是这回不行,不知道如何设置防火墙呢?

        1. 你的999端口已经被占用了。

          你可以试一下重新安装一遍试试
          wget git.io/p9r8 -O ocservauto.sh&&bash ocservauto.sh ri

          1. jovy jovy

            那请问还需要设置iptables吗?怎么设置呢?

            1. 脚本是使用iptables来设置防火墙的,如果你没有配置过,一般没有必要进行额外配置。

  18. dongming dongming

    The secure gateway has rejected the connection attempt. A new connection attempt to the same or another secure gateway is needed, which requires re-authentication

    ios连接时出现上面提示,怎么解决,谢谢

    1. 一般网络状况不好的时候,容易断线。
      需要重新连接一下。
      在高延迟环境,或者高丢包环境,建议修改/etc/ocserv/ocserv.conf文件中的

      output-buffer = 23000

      去掉注释。

  19. mon mon

    安装最后出现这个,之前步骤都正常。请教下,这么出的什么问题?

    1. 刚才打错了。
      使用下面命令
      systemctl daemon-reload

  20. yinws yinws

    按照教程,能脸上却不能上网。安装过程中也没错误提示

    1. 这说明一般是iptables的问题。
      您是否使用了防火墙?
      您以前是否使用了其他脚本或者方法安装过ocserv?

      1. yinws yinws

        有google过,把配置文件#output-buffer = 23000注释去掉,也没用,另外/etc/ocserv只有ocserv.conf吗?好像github上的那些文件都没有啊?

        1. 核心配置文件就是
          ocserv.conf
          start-ocserv-sysctl.sh
          stop-ocserv-sysctl.sh

      2. yinws yinws

        新系统呢,,linux新手,怎么修改防火墙?ubuntu下

        1. 首先重启一下服务试试
          /etc/init.d/ocserv restart
          限于评论200字数限制
          错误反馈的话 请发邮件
          liyangyijie@gmail
          或者
          https://github.com/fanyueciyuan/eazy-for-ss/issues/new

添加新评论