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

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

    按你的教程在openvz架构主机上成功部署了服务,ocserv版本是0.10.8,我根据你的教程修改了DPD数值,电信宽带下我改为60和80,但两种数值都不稳定,看YouTube1440P峰值数据都可以上9000-12000kbps,最多持续2-3秒就掉下至300-800kbps,10秒钟以内就会缓冲一下。同样的DPD数值在移动宽带下表现相当稳定。请问要怎么优化其它数值可以使数据稳定?

    1. 这种速度锐减的情况倒是像isp的限速机制。
      优化上还是得自己尝试,网络情况并不相同。
      比如,注释udp端口只使用tcp(理论上慢些,但是有些isp对udp限制,注释了反而快稳);
      使用vps本地较近的dns;
      https://www.v2ex.com/t/158768

      1. doraemon616 doraemon616

        设置断线自动重连时间的参数是哪个?没找到?

      2. doraemon616 doraemon616

        VPS本地DNS是指服务器所在地的DNS吗?

  2. Oicit Oicit

    想把IP地址由192.168.10.0段改为其他,例如10.10.0.0。可以吗?谢谢。

    1. 正常安装之后,直接在配置文件中修改.
      ipv4-network = 10.10.0.0
      ipv4-netmask = 255.255.0.0
      或者使用下面的方式

      An alternative way of specifying the network:ipv4-network = 10.10.0.0/16
      1. oicit oicit

        谢谢!
        还有个问题:在安装过程中因某些原因没能从github上安装LZ4。请问还能再单独安装吗?怎样操作?

        1. lz4可以单独安装,但是ocserv是要重新编译,才能开启lz4
          压缩。lz4压缩Anyconnect客户端不支持,只有openconnect客户端才支持。

  3. KBDXN KBDXN

    环境: Ubuntu 14.04 LTS 64bit

    安装过程没有发现问题,可以连接,但是连接上以后出现了不能上网的情况,浏览器提示是DNS的问题,排查之后发现好像跟服务器上面的NAT转发设置有关

    1. KBDXN KBDXN

      输入下面两条命令以后就一切OK了。
      iptables -t nat -A POSTROUTING -j MASQUERADE
      iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

      本地操作系统是Win10,Cisco Anyconnect版本是4.1.02011

      1. 在/etc/ocserv/server-up.sh文件里面是有iptables的,做了接口判断的。还是直接去掉判断吧。

  4. 安裝好之後可以連接上
    但是網頁都打不開..
    環境是ubuntu14.04

    1. 服务端使用调试模式 看看即时日志

      1. akw28888 akw28888

        pastebin.com/iSC4fWtA
        一段LOG

        1. ocserv本身收发包看起来没有什么问题,更新一下iptables脚本试试。

          wget git.io/ocservauto -O- --no-check-certificate|bash -
          然后重启一下ocserv

          1. akw28888 akw28888

            更新之後仍然無法打開網頁

            1. 您的客户端使用的是什么?
              您的服务端是否使用了其他防火墙工具?如ufw之类。
              请在服务端使用下面命令,看看您的iptables的内容
              iptables-save|grep ocserv

              1. 好吧,待我重新测试一下ubuntu14.04

              2. akw28888 akw28888

                anyconnect 3.x (windows)
                iptables以外沒別的了
                iptables-save|grep ocserv的話和腳本自動添加的是一樣的
                比較神奇的是我系統換成debian7就沒問題了
                但是重安裝ubuntu14.04還是 一樣的問題呢..(

  5. allen allen

    使用脚本成功配置,一万个赞,ios上测试是完全能用的,但是在电脑上,能够链接上,但是没办法打开任何网页。ios和电脑所在的网络环境是一致的。不知道是哪里不对,忧桑。

    1. 可以用用openconnect-gui的客户端试试。把wifi分享什么的都关掉。

      1. allen allen

        不能用TT Error setting up DTLS

        1. 您的桌面系统是什么?
          按照错误显示,可以先注释配置文件中的udp端口。

          1. allen allen

            是Windows10,难道真的不该用如此新的系统。配置文件的UDP端口已经是注销的了。

            1. win10还真是没测试过。

              1. 换换Anyconnect 最新的客户端或者Anyconnect3.x版本的
                开启win8兼容模式

                服务端使用调试模式 看看即时日志

              2. allen allen

                现在anyconnect能连上,但是就是没法打开网页,改udp似乎也没用。浏览器提示DNS_NO_INTERNET,看来只能展示在ios上用了。

  6. withisola withisola

    请问我用windows下的openconnect-gui客户端连接能正常连接,但是设置的no-route没法起作用,变成全局了,用cisco anyconnnect是不管是PC还是IOS都正常。这个是什么问题?我看了下openconnect-gui的连接日志是正常的,有X-CSTP-SPLIT-EXCLUDE字样下发路由表

    1. openconnect客户端各平台都不支持no-route。

      1. withisola withisola

        谢谢,那就是说只能用route了?难怪我刚用安卓试了下也不行。

        1. Toby Toby

          原来如此,翻到后边才看到。不过好消息是route没有了条数限制。

  7. 掌舵的鱼 掌舵的鱼

    请问下 这个可以多用户吗?

    1. 默认是没有限制的。可以从配置文件中找到相关的条目。

  8. ycyppq123 ycyppq123

    怎样禁止PC连接,只允许手机连接。

  9. Roy Roy

    谢谢,一次成功了!

  10. abu abu

    非常感谢,已经配置成功并正常使用。

  11. yinws yinws

    连接默认是全局,怎么才能使用路由表?

    1. 在/etc/ocserv/ocserv.conf的配置文件中都有详细说明。
      不过客户端有路由表数目限制,没有较为完善的非全局方案。
      在/etc/ocserv/config-per-group/Route文件中有个路由表,可以试试。

      1. yinws yinws

        谢谢了,,配置文件里的试过,之前noroute模式没成功

  12. jinrio jinrio

    我在搬瓦工上用这个脚本安装后,在安卓手机上用anyconnect很顺利。后来我迁移了服务器位置,ip地址变了,于是anyconnect连接时提示证书与服务器名称不符。请问这个要怎么避免?

    1. 所以这就为啥推荐使用域名的原因,如果你使用的是ip的话,需要重新签证书。

      1. jinrio jinrio

        不好意思,我是小白,请教一下如何用域名生成证书?需要一个可用的域名吗?我的服务器只装了几个翻越的软件,都是从网上搜的一键安装脚本,很方便,只是遇到这些细节的地方就不懂了。请指教!

        1. 注册个免费域名,然后A记录解析到自己的vps的ip。
          接着可以用openssl自签服务器证书,cn端要与自己域名相同。
          以上是大概流程。
          如果觉着各种麻烦,可以直接重新安装一边,重新输入自己的ip地址也可以。
          bash ocservauto.sh ri

          1. jinrio jinrio

            好的,谢谢!

  13. roy roy

    作者您好!各位好!
    startssl得到ssl.key解密后得到server-key.pem,ssl.crt更名为server-cert.pem,2个文件放在/etc/ocserv,使用作者提供的脚本生成客户证书p12,提示还是不信任的服务器,连接上网没问题,爬文结果就这样,麻烦大家帮忙分析一下哪里操作不对.
    还有ca-cert.pem和ca-key.pem就用安装脚本生成的?不需要理会对吗?

    1. roy roy

      找到原因了,正确的姿势是:
      把StartSSL给的crt和key修改名字为server-cert.pem、server-key.pem,并覆盖到/etc/ocserv/文件夹下面,
      其中key 需要先解密openssl rsa -in ssl.key -out server-key.pem
      然后重启服务
      service ocserv restart

      1. roy roy

        但是为什么IOS上面不会提示不信任服务器,但是同一个证书在android端会提示不信任

        1. 请点开详细进行查看,到底是哪个项目不信任。
          还有,请补全证书链。
          证书链顺序
          自己服务器证书--class1中级证书--StartSSL根证书

  14. jovy jovy

    我在越狱的ios端有一个问题,一旦连接一次,即使断开退出以后也还是连接状态,并且不能看youtube视频,不知道是不是服务端设置的原因呢

    1. 如果觉得这是服务端的问题,请在服务端开启调试模式,查看详细即时日志。

  15. Ng Ng

    Wow! 太感谢了!有这种超级详细的教程也能顺便学到不少linux姿势~

  16. lon lon

    采用了同一证书登陆不同服务方案可行,但是已经是同样的ca-cert.pem了,在BC服务器签发的证书ABC都使用不了呢,只能在A签发么?A吊销完的证书,如果没有把crl.pem
    同步到BC,那么证书在BC还是照常可以登陆的是这个意思吗。

    1. BC服务器只有ca-cert.pem没有CA的key,所以无法签署新的客户端证书。
      试过直接在CA证书里面添加在线吊销列表,没啥用,所以只能手动同步到BC本地,否则旧客户端证书在BC还是照常可以登陆。

      1. lon lon

        把/etc/ocserv整个目录同步到BC不晓得可以不,担心A当掉重做系统后,证书没办法管理

        1. 只要同步/etc/ocserv/crl.pem文件,这个吊销列表并不保密。可以公开挂着。
          证书管理的话,保存A的/etc/ocserv/CAforOC文件夹里面的ca-key.pem和ca-cert.pem到安全地方即可。

          1. lon lon

            如此的话,是否把CAforOC同步到BC,就可以用BC来管理证书了?

            1. 可以,但是不建议这么做。

              1. CAforOC里面有验证CA的key,相当于明文密码库。

              2. lon lon

                是说不安全么,还是

  17. moe moe

    可以上谷歌 但是推特 油管却不行

  18. 自己编译或是用你的安装,Anyconnect都是提示The VPN configuration received from the secure gateway is invalid. Please contact your network administrator,用openconnect可以连接上,但是全部都是只能建立连接,任何数据都不通过服务器转发

    1. 请在服务端使用debug模式,查阅错误日志。

  19. yinws yinws

    试了两台ubuntu的vps,都是出现连接成功却不能上外网,试了评论里的所有方法都不行。两台vps之前都有搭ipsec vpn。
    root@localhost:~# service iptables status
    iptables: unrecognized service
    ubuntu小白,求解答

    1. yinws yinws

      root@localhost:~# iptables-save | grep 'ocserv'有六条

  20. Harry Harry

    大神能整个centos的吗?

添加新评论