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

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

    楼主你好,用您的脚本配置多服务器共用证书登录的时候使用命令
    bash ocservauto.sh occ
    提示
    黄色 ERROR: Ocserv has been installed.
    青色 Root OK
    青色 Debian-based OK
    青色 TUN/TAP OK

    请问您遇到过这个错误吗,谢谢!

    1. 子服务器直接使用occ模式安装。请不要使用正常模式安装。

  2. oy0 oy0

    有時會出現 客戶端 虛擬網卡 接收 值 不變化的情況,此時網頁打不開。

  3. haffner haffner

    楼主,用这个脚本安装最新的0.11.0失败,似乎依赖版本太久。当然,0.10.11及之前的版本没有问题。是不是考虑更新下?

    1. lon lon

      也碰到了这个问题

      1. haffner haffner

        楼主两天前就更新了,请重装,因为依赖更新,所以直接ug不行。

  4. oy0 oy0

    在Vpn客户端用Origin这样的软件下载大文件,过几分钟下载速度就为0了,必须重新连接再继续下载才可以,怎么回事?
    Origin是一个游戏平台,在大陆无法使用该软件下载游戏,必须用Vpn才可以。
    另外我想要的tap模式,不一定是tap,只要是switch模式就可以(类似OpenVpn的tap模式)。

  5. commonhub commonhub

    谢谢博主!openvz也用上啦
    请问怎样设置可以让客户端设备使用自己的dns设置
    或者直接从客户端发起dns查询不走vpn呢?

    1. ocserv.conf 文件里面有设定dns相关的项目的。
      dns = 8.8.8.8 之类的。

      1. commonhub commonhub

        是的,这样发起的dns查询是走vpn的吧?感觉特别慢,而且国内主要网站都会被解析到海外cdn上。

  6. oy0 oy0

    请问除了ocserv外还有什么可以实现cisco vpn的linux软件么?

  7. oy0 oy0

    Ocserv支持TAP模式麼?

    1. 参见反馈邮件

      lists.infradead.org/pipermail/openconnect-devel/2015-February/002774.html

  8. oy0 oy0

    用的是证书验证
    现在遇到的问题
    电脑能连上 手机端连不上提示错误(证书已导入)
    但如果用用户名验证的话就无问题
    我用的是openssl制作的https服务器证书。
    另外对于用certtool生成的pem证书 怎么导出为crt格式?

    1. 证书有PEM形式(未加密)和DER形式(加密),后缀未必和内部形式挂钩,一般pem后缀是未加密形式的证书。crt后缀可能是加密形式,也可能是未加密形式。
      PEM>DER
      openssl x509 -in myCert.pem -inform pem -outform der -out myCert.crt

  9. mike mike

    请问博主知道针对个别用户组、用户的限速怎么设置吗

    1. ocserv官网文档有config-per-user用户限速设置说明。

  10. oy0 oy0

    用電腦的AnyConnect連線到VPS就無問題
    手機的AnyConnect就不行
    一连上VPN然后马上断开
    提示:无法应用系统设置

  11. oy0 oy0

    用電腦的AnyConnect連線就無問題
    手機的就不行
    提示:無法載入系統設定
    ocserv[965]: main[xxxx]: x.x.x.x:43457 user disconnected
    ocserv[966]: sec-mod: temporarily closing session for xxxx(session: CQu9Q)

  12. oy0 oy0

    謝謝。
    我用的是Z.com的VPS,為什麼部署好ocserv之後卻出現 電腦端連上VPN後卻只能訪問VPS主機的情況,8.8.8.8 PING不通。

    1. 你好,可以使用debug模式看看错误输出。
      使用iptables-save看看防火墙规则。
      用户连接时候,使用ifconfig查看是否有新虚拟网卡产生。

  13. guoke guoke

    这个脚本的安全性如何啊?
    有些担心服务器的安全!
    博主别多心哦……*……

  14. zjl12321 zjl12321

    我这里用台湾dler的vps经常是连上了,然后打开youtube看了几秒就没数据返回了,received一直没有增加但是sent一直在增加,本地是上海电信,请问这个是什么原因

  15. 小白程序爱好者一名 , Google了很多 anyconnect 的方案, 不同操作系统的,原来都是浪费时间,知道发现了这篇最傻瓜的教程

    天啊 几分钟就搞定了, 准备给使用IOS的女友一个惊喜

    真不知该怎么感谢你! 楼主太厉害 膜拜膜拜 !

    我希望像你一样灵活应用技术创造不一样的东西,让生活更美好,是怎么做到的,该去看什么书 ,好苦恼

    大神请不吝赐教

  16. wei wei

    请问博主,开启了ipv6,连接两个客户端一切正常,直到连接第三个时候debug报
    ocserv[24728]: main: ip-lease.c:415: could not figure out a valid IPv6 IP
    这是咋回事呢?(均使用同一个用户名登陆,未做最大连接限制。ipv6用的/124。若仅开ipv4可以连接三个以上客户端)

  17. 囧

    请问博主,我有两台服务器,都是通过用户名和密码登录的要怎么弄才能同步啊 ?

  18. 博主你好我又来了,有时会有连接缓慢的问题,我认为是由于dh.pem强度过大造成的(改用ultra级别和high还有medium做对比),看到博主默认的是high,不知道可不可以将缺省值改为medium?

    1. 感谢反馈。
      以前gnutls-bin包太久,certtool在2.12.20版本不支持medium选项。
      现在都升级到了3.3.8,medium相当于2048bit的。

      1. 没错看了一下,好像certtool和oepnssl生成的dh.pem不一样,同样是2048bit的使用后者生成的在iphone上打开网页比用certtool生成的慢许多,我现在已经改用low了,不过legacy(1773bit)应该更合适一些,说实在的对于交换强度没有概念,只是nginx上给网站用的dh.pem用的是openssl生成的2048bit。

  19. wei wei

    博主,搬瓦工ipv6调通了。同时做了个实验:在配置文件中写了dns = 2001:4860:4860::8844,并且注释掉ipv4-network。但是客户端连接以后获取不到dns,必须在windows手动配ipv6dns才能正常访问,难道服务端不主动推动下来吗?就像ipv4推的8.8.8.8一样

  20. Tommy Tommy

    博主你好!
    之前一段时间一次性设置成功之后就可以用了。
    但是后来重启一次服务器之后anyconnect可以照常连接至服务器但是打不开任何页面或者站点。我已经尝试重装,但是仍然没有效果

添加新评论