您的位置: 首页 » 翻越奥义 » 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,263,212

该脚本在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. HEY HEY

    请问freeradius认证有没有教程? 这个脚本是不是已经安装了数据库?

    1. 脚本仅仅安装的是freeradius客户端。要实现freeradius认证还需要部署服务端和数据库。
      可以参考下
      https://raw.githubusercontent.com/fanyueciyuan/ocserv-fork/master/doc/README.radius
      和谷歌搜索。

  2. AVC AVC

    ocserv-args.c:472:5: warning: suggest parentheses around arithmetic in operand of '|' [-Wparentheses]

    + OPTPROC_MISUSE ),

    已经完全不知道怎么办了。。。。

    1. 请告诉我您运行的环境以及这是什么时候出现的错误。
      如果在安装过程中,出现错误,会有错误日志的。
      cat /root/ocerror.log

  3. mon mon

    自定义设置里的最后的 Save the vars for fast mode or not? 是用干什么的?加速?

    1. mon mon

      最后出来的错误
      Generate client cert ok
      Set ocserv ok
      [....] Stopping ocserv (via systemctl): ocserv.serviceFailed to stop ocserv.service: Unit ocserv.service not loaded.
      failed!

      1. mon mon

        接上段
        [....] Starting ocserv (via systemctl): ocserv.serviceFailed to start ocserv.service: Unit ocserv.service failed to load: No such file or directory.
        failed!

        1. mon mon

          最后一行
          Ocserv start failure,ocserv is offline!

          1. mon mon

            试着用 /etc/init.d/ocserv restart, 可是提示
            ocserv.serviceFailed to restart ocserv.service: Unit ocserv.service failed to load: No such file or directory.
            failed!
            可是/etc/init.d/ocserv明明在的

    2. mon mon

      之前在另外一个vps上安装没问题的,这次不知怎么回事儿。都是在vultr上的vps,之前的是美国节点,这个弄的东京节点,这应该没关系吧?

    3. 用来记住自己的选择的,会在脚本所在文件夹内产生一个vars_ocservauto的文件,里面是自定义选项。完全重装或者部署新服务器时候,省的自己回答问题。
      https://raw.githubusercontent.com/fanyueciyuan/eazy-for-ss/master/ocservauto/vars_ocservauto

  4. mon mon

    试了下最新的这个脚本(支持debian8),成功!谢谢!

    只是有个小问题,生成p12证书时的common name是随机的吗?能不能自己定义?

    1. 那个随机编号是为了防止签新证书时候出现同名情况。
      由于证书登录根本没有必要输入用户名,感觉自定义意义不大,所以就没有做。

  5. shawn shawn

    运行后出现
    -bash: bashocservauto.sh: command not found
    请问如何解决?谢谢

    1. 应该是复制不全。用下面的命令逐条复制执行吧。
      rm -rf ocservauto.sh
      wget http://git.io/p9r8 --no-check-certificate -O ocservauto.sh
      bash ocservauto.sh

      1. shawn shawn

        谢谢,问题解决了XD

  6. oceanjc oceanjc

    请问楼主,使用证书认证方式的时候,如何实现自动登录不同组呢?谢谢!

    1. 如果你是要实现一个帐号自主选分流和全局的话,看下面的。
      https://github.com/fanyueciyuan/eazy-for-ss/blob/master/ocservauto/plain-ca-group.md
      好吧 证书分组 有bug

  7. HEY HEY

    安全网关已拒绝所有尝试的连接操作......新连接要求重新进行身份验证。。。版瓦工的VPS,请问怎么解决呀?

    1. 最近排查了一下 应该是
      cookie-timeout = 300
      这个时间的问题(单位秒),
      如果网络不是很好的情况下,请提高这个数字
      例如
      cookie-timeout = 86400
      情况有所改善。
      有些网络会对udp端口有限制,所以也可以注释掉udp端口试试。

    2. 可以退回到0.10.1版本的ocserv。
      我也是有时候会挂断,但是并不怎么频繁。
      不过貌似0.10.1版本的几率小。
      也可以试试
      tcp = 443
      udp = 53
      max-ban-score = 0

  8. JwhSir JwhSir

    很感谢博主。成功搭建了ss。但是这个有点问题...手机上一直提示“安全网关已拒绝所有尝试的连接操作......新连接要求重新进行身份验证”. 不知博主是否知道如何解决?

    1. 板瓦工64mb版部署使用正常。
      偶尔挂断需要重新手动连。
      解决方法未找到
      可以试试不同版本的ocserv
      另外除了未越狱IOS系统,ss是首先方案。

    2. JwhSir JwhSir

      已经成功使用了pptp. 不用解决这个问题了. 不过还是谢谢博主 !

      1. HEY HEY

        求解决方案。。我也是这个问题,不过我VPS里面什么都没装,用的版瓦工的VPS

  9. HEY HEY

    楼主好,请问pptp和ocserv可以同时运行吗?我装了两个,但是我pptp可以连接,但是anyconnect连接上了,上不了网。

    1. HEY HEY

      已解决。可以同时运行。

  10. HEY HEY

    楼主,为什么我装不了锐速加速呢?上面显示device (999)doesn‘t exist。。。我端口怎么会不存在呢。。

    1. https://www.v2ex.com/t/172292
      锐速加速是看网卡的

      1. HEY HEY

        还是不会解决。。。

        1. 我没用锐速 一般开了udp端口来用ocserv

          不过你可以试一下
          https://github.com/fanyueciyuan/eazy-for-ss/blob/master/ocservauto/Speeder_reload.md

          1. HEY HEY

            你这个脚本的前提我都达不到。
            我执行锐速的安装程序,然后就变成这个了。因为锐速是tcp加速,所以我只开通了tcp,在安装的时候。
            Device "999" does not exist.
            (license 6014E29A38936C21663fc508)
            Failed to write configuration: wanIf(999)

            1. 你填写999的地方应该填写你的出口网卡的名称
              比如eth0 或者venet0 什么的

              1. /serverspeeder/etc/config
                中直接修改
                accif=
                这一项=后面为你的出口网卡

              2. HEY HEY

                但是我直接回车也不行。直接回车就是默认的eth0,但是显示的时候还是Device "999" does not exist.

  11. HEY HEY

    当一个证书过期后,怎么续签呢?

    1. 原来证书作废 新签发一个证书
      bash ocservauto.sh gc

  12. HEY HEY

    你好,请问怎么设置端口数量限制呢?

    1. 端口数量限制指的是什么?
      如果问的是 同一个用户同时最大登录台数的话 这里默认没有限制
      可以用文本编辑器编辑 /etc/ocserv/ocserv.conf
      里面的
      max-same-clients = 0
      把 0 修改成你需要的数字

      1. HEY HEY

        谢谢,就是这个。

  13. Tdawn Tdawn

    安装失败
    E: Unable to correct problems, you have held broken packages.
    [libgmp3-dev] not be installed!

    1. 如果安装失败 会生成/root/ocerror.log的
      里面的错误信息比较有价值

  14. Wwocaaaa Wwocaaaa

    请问一下怎么把账号删除呢?比如我之前创建了一个账号,但是我不想要那个账号了,怎么删除呢?

    1. 如果是用户名密码方式的帐号的话
      sudo ocpasswd -d -c /etc/ocserv/ocpasswd 999
      999 是你要删除的帐号用户名
      更多帮助
      sudo ocpasswd -h
      如果是证书登录的话 直接吊销证书即可

      1. Wwocaaaa Wwocaaaa

        lz,如何查看现在有多少个账号呢?

        1. cat /etc/ocserv/ocpasswd
          用户名是明文
          密码是加密的
          或者直接
          cat /etc/ocserv/ocpasswd|grep -c ':.*:'
          显示数字是多少 就有多少用户

  15. WOQU WOQU

    求楼主大大改下程序,可不可以让过期日让我们自己填写呢?谢谢啦。

    1. 客户端证书签约天数可在脚本中定制 默认7777

  16. ShengHan ShengHan

    LZ,请问这个需要哪些依赖?最后安装失败提示缺少dependency

    1. 请务必重新下载最新的脚本
      然后如果安装失败
      可以
      cat /root/ocerror.log
      里面有错误信息和缺少的依赖提示

      1. ShengHan ShengHan

        谢谢楼主,我去看看。我安装的是新版,但是它总提示缺少依赖

        1. 我加了个错误输出
          不过刚才在digitalocean上试了下 没有发现问题

          1. ShengHan ShengHan

            我用的版瓦工和crowncloud都不行。
            之前版瓦工可以,运气成分好像比较大。
            Ocserv install failure,check dependencies! 这是提示。

            1. 看下日志
              cat /root/ocerror.log

              1. 请事先更新您的系统
                apt-get update && apt-get dist-upgrade -y
                然后删掉遗留下来的脚本以及错误信息
                rm -r ocserv*
                然后再进行安装

              2. mon mon

                我也是最后这个错误。日志显示:dwz.cn/IvB9Y
                但是不懂,怎么解决?

              3. cat 这里是命令 这里是利用这个命令查看文件内容
                查看 root文件夹下的ocserverror.log 文件
                直接在终端里面输入这行命令就行了

              4. ShengHan ShengHan

                为什么没有cat这个文件夹。。

  17. ShengHan ShengHan

    hello. 完成安装之后,用iPhone的anyconnect连接,能够连接上去,之前设置的80端口,好像网站都上不去,然后又装了一遍,99端口,可以上谷歌,但是速度非常非常慢,其他的网站都上不了。求解。还要就是我用win7的anyconnect连接,显示说我的地点被限制上网了。。求解。。。

    1. ShengHan ShengHan

      换成999端口后,确实打开速度有提升,但是U2B还是看不了视频。。

      1. ShengHan ShengHan

        修改了output-buff后,可以上网了,但是电脑用anyconnect可以连接上,但是上不了网。。。

  18. dun dun

    赞! 一次成功

  19. [...]二、一键安装OpenConnect Server(参考原文链接:http://www.fanyueciyuan.info/fq/ocserv-debian.html)[...]

  20. 新手 新手

    谢谢站长的脚本,请问是ftp关闭了吗?run到一半出现如下错误然后就跳出了

    Connecting to ftp.infradead.org (ftp.infradead.org)|2001:770:15f::2|:21... failed: Connection timed out.

    1. 新手 新手

      已解決,感謝站長的辛勞。^_^

      1. 小白 小白

        请问如何解决!!!

添加新评论