Ocserv 的 TCP 加速问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
通过以下 Referral 链接购买 DigitalOcean 主机,你将可以帮助 V2EX 持续发展
DigitalOcean - SSD Cloud Servers
jaleo
V2EX    VPS

Ocserv 的 TCP 加速问题

  •  
  •   jaleo 2015-02-23 13:41:15 +08:00 2989 次点击
    这是一个创建于3965 天前的主题,其中的信息可能已经有所发展或是发生改变。

    VPS装了Ocserv、SS和LotServer,Lotserver的配置文件里accif="eth0 vpns0",对两个接口都进行加速,
    但vpns0这个接口由Ocserv产生,但在anyconnect断开连接后就消失了,因此每次连接anyconnect,都得在服务器上重新加载Lotserver的配置文件,否则Lotserver不会对vpns0接口加速。
    我对Linux不熟悉,有什么办法可以让vpns0接口固定下来?

    第 1 条附言    2015-02-25 08:36:04 +08:00
    http://xmodulo.com/how-to-run-startup-script-automatically-after-network-interface-is-up-on-centos.html#comment-10246
    看起来自动执行脚本可以实现,set up a startup script for a specific network interface on CentOS.
    /etc/sysconfig/network-scripts/ifup-post 最后一段是
    #!/bin/sh
    if [ -x /sbin/ifup-local ]; then
    /sbin/ifup-local ${DEVICE}
    文章说新建一个/sbin/ifup-local 文件,我于是建了一个
    #!/bin/sh
    if [[ "$1" == "vpns0" ]]
    then
    /appex/bin/lotServer.sh reload
    fi
    最后chmod +x /sbin/ifup-local
    但没有效果,本人对linux不熟悉,是不是因为vpns0是Tun的接口类型,上面的方法不管用?
    哪位指点一下?
    第 2 条附言    2015-07-12 22:36:34 +08:00
    2015年7月12日更新:

    经过一段时间测试,发现用anyconnect,时常无法获得加速,似乎reload Lotserver配置不是每次都有效果,什么原因不清楚。
    但是每次连接的时候restart Lotserver配置就OK了。
    --------------------------------------------------------------------------------
    vi /usr/local/etc/ocserv/ocserv.conf
    connect-script = /usr/local/etc/ocserv/ocserv-connect (脚本路径)
    disconnect-script = /usr/local/etc/ocserv/ocserv-disconnect (脚本路径)

    systemctl restart ocserv

    vi /usr/local/etc/ocserv/ocserv-connect
    #!/bin/sh
    wanif=$(ip a|grep vpns|grep inet|awk '{print $NF}')
    sed -i "s/^accif=.*\$/accif=\"eth0 $(echo $wanif)\"/" /appex/etc/config
    /appex/bin/lotServer.sh restart

    vi /usr/local/etc/ocserv/ocserv-disconnect
    #!/bin/sh
    wanif=$(ip a|grep vpns|grep inet|awk '{print $NF}')
    sed -i "s/^accif=.*\$/accif=\"eth0 $(echo $wanif)\"/" /appex/etc/config
    /appex/bin/lotServer.sh reload

    chmod +x /usr/local/etc/ocserv/ocserv-connect
    chmod +x /usr/local/etc/ocserv/ocserv-disconnect
    43 条回复    2016-03-08 18:24:35 +08:00
    jaleo
        1
    jaleo  
    OP
       2015-02-25 20:32:41 +08:00
    经过推特网友指点,终于搞定了Cisco anyconnect TCP加速。

    1. 随便在某个目录下建一个脚本 比如ocserv-script,内容:
    #!/bin/sh
    /appex/bin/lotServer.sh reload

    2. chmod +x ocserv-script

    3. vi /usr/local/etc/ocserv/ocserv.conf
    找到 #connect-script = /scripts/ocserv-script
    修改为 connect-script = ocserv-script (此处填写脚本的实际路径)

    4. systemctl stop ocserv systemctl start ocserv

    5. vi /appex/etc/config
    修改为 accif="eth0 vpns0"

    ok了。只要移动端的anyconnect连接上,就会自动执行脚本,重新加载Lotserver配置文件。

    以上在Centos 7系统通过。

    希望对大家有用。
    现在的ipad上有越狱版的SS和anyconnect,单位100M电信下,youtube可以5MB/s。
    hejiaxian
        2
    hejiaxian  
       2015-02-25 20:55:23 +08:00
    其实ac只要udp不出问题,都是用发的udp包,除非你在ocserv.conf下把udp端口注释掉。
    jaleo
        3
    jaleo  
    OP
       2015-02-25 21:13:16 +08:00
    @hejiaxian UDP端口没注释掉,这么说Lotserver对UDP也有效?不加速的话速度真的很慢,家里只有100-200KB/s,单位里最多500多KB/s,
    hejiaxian
        4
    hejiaxian  
       2015-02-25 22:25:37 +08:00
    @jaleo 锐速只对tcp有效吧,虽然配置文件里面有个选项可以配置对udp加速,但是据说是没用的,我自己没试过。我锐速就对ac没效,同一台vps,我ss能跑60+mbps,但是ac就大概20Mbps左右。
    jaleo
        5
    jaleo  
    OP
       2015-02-26 08:59:30 +08:00
    @hejiaxian 有些服务器装了加速软件后,速度会变慢,按照网上的教程,把rsc="1"打开速度就快了。
    关于加速软件为何可以对UDP有效,我也不清楚。但速度确实挺快的。
    hejiaxian
        6
    hejiaxian  
       2015-02-26 10:34:31 +08:00
    @jaleo 我知道,DO linodo这些都要打开rsc,这是收发合并
    iCodex
        7
    iCodex  
       2015-03-05 01:00:26 +08:00
    接口写死是会出问题的。建议写多一个读取网卡接口的判断,比如下面这样,放到一个文件里,赋予执行权限

    ```
    wanif=$(ip a|grep vpns|grep peer|awk '{print $NF}')
    sed -i "10s/^accif=.*$/accif=\"eth0 $(echo $wanif)\"/" /serverspeeder/etc/config
    sleep 1
    /serverspeeder/bin/serverSpeeder.sh reload
    ```

    connect-script = /usr/local/sbin/Speeder_reload.sh
    disconnect-script = /usr/local/sbin/Speeder_reload.sh
    然后连接上的来执行一次,断开也执行一次
    iCodex
        8
    iCodex  
       2015-03-05 02:25:36 +08:00
    后来才看到有一个更简单的办法。直接执行/serverspeeder/bin/setConfig.sh wanIf vpns0即可
    jaleo
        9
    jaleo  
    OP
       2015-03-05 09:13:34 +08:00
    @iCodex 谢谢你的建议,这个脚本不错。
    我Linux新手,有几个问题不明白。
    1、脚本里的wanif会获取所有的tun接口,对吗?
    2、sed -i 的用法不熟悉,10s什么作用? -i 后为何是双引号?我在centos 7里测试,只能单引号成功,比如sed -i 's/accif="eth0"/accif="eth0 vpns0"/g' /appex/etc/config
    3、cisco anyconnect断开后,vpns*接口会消失,这个disconnect脚本的执行是在接口消失之前还是之后?
    jaleo
        10
    jaleo  
    OP
       2015-03-05 14:25:29 +08:00
    @iCodex 我把grep后面的peer改成inet,另外10s是不是第10行的意思?,我改成了s。
    wanif=$(ip a|grep vpns|grep inet|awk '{print $NF}')
    sed -i "s/^accif=.*\$/accif=\"eth0 $(echo $wanif)\"/" /appex/etc/config
    /appex/bin/lotServer.sh reload

    成功了,这样多人使用anyconnect客户端加速也没有问题了。
    非常感谢。
    kkxxxxxxx
        11
    kkxxxxxxx  
       2015-03-09 15:16:42 +08:00
    @jaleo 对Ocserv vpnsXX 的最终加速脚本是怎样的,也会对后面连接的用户端口生效么
    jaleo
        12
    jaleo  
    OP
       2015-03-09 15:58:53 +08:00
    @kkxxxxxxx 可以的,上面的脚本就是这个效果。在ocserv的配置里修改connect-script和disconnect-script的路径为脚本的路径即可。
    kkxxxxxxx
        13
    kkxxxxxxx  
       2015-03-09 16:34:39 +08:00
    @jaleo 我按你最后面这个内容建了个文件,chmod +x,然后 ocserv配置里添加路径。(放在哪里都不影响吧)。客户端重新连接anyconnect,再./lotServer status查看,还是只有eth0的信息。这样算执行了么
    kkxxxxxxx
        14
    kkxxxxxxx  
       2015-03-09 16:40:50 +08:00
    @jaleo 可以,谢谢
    jaleo
        15
    jaleo  
    OP
       2015-03-09 17:13:37 +08:00
    @kkxxxxxxx 搞定了?
    kkxxxxxxx
        16
    kkxxxxxxx  
       2015-03-09 17:32:26 +08:00
    @jaleo 嗯,搞定了,非常感谢,./lotServer status 有看到多了个vpns0,应该就可以了吧
    jaleo
        17
    jaleo  
    OP
       2015-03-09 18:13:07 +08:00
    @kkxxxxxxx 是这样的,祝贺。
    kkxxxxxxx
        18
    kkxxxxxxx  
       2015-03-10 09:10:44 +08:00
    @jaleo 现在有个问题是运行一段时间lotserver就当掉了,启动报错:Device "vpns0" does not exist(有时候是vpns1...)
    kkxxxxxxx
        19
    kkxxxxxxx  
       2015-03-10 09:13:45 +08:00
    @jaleo 似乎是anyconnect客户端断开后,有时候没有执行脚本,/appex/etc/config里仍然保留了断开的端口,导致lotServer服务无法加载配置中止
    jaleo
        20
    jaleo  
    OP
       2015-03-10 09:46:44 +08:00
    @kkxxxxxxx 你是linode的vps吗?
    kkxxxxxxx
        21
    kkxxxxxxx  
       2015-03-10 10:17:47 +08:00
    @jaleo Vultr JP
    jaleo
        22
    jaleo  
    OP
       2015-03-10 10:56:43 +08:00
    @kkxxxxxxx 那不会呀,我在vultr里也装过了。你有没有在ocserv的配置文件里设置disconnect-script的脚本路径?
    kkxxxxxxx
        23
    kkxxxxxxx  
       2015-03-10 17:10:22 +08:00
    @jaleo 开和关路径都有添加。中午的时候不知怎么的VPS直接PING不到了,服务器后台查看好好的,以为IP被墙,马上又去开通了台,弄好新的后,随手把旧的重启下居然又恢复了。。。
    我把我设置的步骤写下你帮我看下哪错了。

    1.vi /etc/ocserv/ocserv-script
    #!/bin/sh
    wanif=$(ip a|grep vpns|grep inet|awk '{print $NF}')
    sed -i "s/^accif=.*\$/accif=\"eth0 $(echo $wanif)\"/" /appex/etc/config
    /appex/bin/lotServer.sh reload

    2.chmod +x /etc/ocserv/ocserv-script

    3.vi /etc/ocserv/ocserv.conf
    connect-script = /etc/ocserv/ocserv-script
    disconnect-script = /etc/ocserv/ocserv-script

    4.systemctl restart ocserv
    jaleo
        24
    jaleo  
    OP
       2015-03-10 20:57:10 +08:00
    @kkxxxxxxx 频繁吗?每天都会发生?
    kkxxxxxxx
        25
    kkxxxxxxx  
       2015-03-10 23:02:22 +08:00
    @jaleo 使用lotServer加速VPNS0的话,AnyConnect经常掉线后没连上去
    jaleo
        26
    jaleo  
    OP
       2015-03-11 16:40:47 +08:00
    @kkxxxxxxx 我是用网上的centos 7 一键脚本,偶尔会发生你这种情况,一周出现一次,还在继续观察中。但像你这样频繁,估计有其它的问题了。
    kkxxxxxxx
        27
    kkxxxxxxx  
       2015-03-12 11:28:35 +08:00
    @jaleo 我也是一键脚本...好吧,我慢慢折腾配置去
    kkxxxxxxx
        28
    kkxxxxxxx  
       2015-03-20 01:01:54 +08:00 via iPhone
    @jaleo 你的Anyconnect是否只有一个用户在使用
    jaleo
        29
    jaleo  
    OP
       2015-03-20 09:52:24 +08:00
    @kkxxxxxxx 有2个人使用,我自己也测试过 更多的人数用 我没有试过 你的服务器用的人很多?
    kkxxxxxxx
        30
    kkxxxxxxx  
       2015-03-20 11:26:47 +08:00
    @jaleo
    脚本是在AnyConnect启动的时候触发lotServer 添加vpns0加速更新配置,
    关掉AnyConnect再次触发lotServer取消vpns0加速再更新一次配置.
    (看不懂脚本,不晓得是AnyConnect开关来触发,还是vpns0的出现消失来触发.)

    iOS设备在锁屏VPN掉线的情况下,查询服务器状态,vpns0也是跟着消失的.
    iOS解锁恢复vpn连接,,vpns0出现。

    那么,在第一个iOS设备掉线的情况下,第二台iOS设备账号启动AnyConnect,
    会生成vpns1,然后更新lotServer配置,因此时配置中已保留对vpns0的加速,但vpns0因锁屏掉线并不存在,
    导致lotServer配置报错无法启动.AnyConnect启动无法正解执行脚本也无法正常连接.

    不晓得分析得对不对
    jaleo
        31
    jaleo  
    OP
       2015-03-20 15:32:43 +08:00
    @kkxxxxxxx

    我测试了,是这样的:
    1、IOS-1连接anyconnect,tun接口有vpns0。lotserver修改配置accif="eth0 vpns0 "。
    2、IOS-1锁屏,anyconnect断开,vpns0消失,lotserver修改配置accif="eth0 "。
    3、IOS-2连接anyconnect,tun接口生成vpns0。lotserver修改配置accif="eth0 vpns0 "。
    4、IOS-1解锁后,再次连接anyconnect,tun接口有vpns0 vpns1。lotserver修改配置accif="eth0 vpns0 vpns1 "。
    youngx
        32
    youngx  
       2015-06-01 02:30:28 +08:00
    请教大神有什么用锐速能做到同时加速ss以及anyconnect呢?
    开启锐速,SS速度飞快,anyconnect极慢
    关闭锐速,SS比较慢,anyconnect极快。(Ocserv有用脚本,在连接和断开时候刷新ssserver配置)

    想请问高人有没有两全其美的办法。
    jaleo
        33
    jaleo  
    OP
       2015-07-12 22:40:31 +08:00
    @youngx 有这样的问题?下次我试试看
    xy2938
        34
    xy2938  
       2015-08-04 18:05:48 +08:00
    想问一下,在disconnect的时候,脚本没有跑怎么办,锐速后台的log是显示appex down, appex del
    jaleo
        35
    jaleo  
    OP
       2015-08-04 22:27:16 +08:00
    @xy2938 是什么主机 linode吗?linode的vps 执行disconnect脚本有问题
    xy2938
        36
    xy2938  
       2015-08-04 23:02:33 +08:00
    ultravps廉价鸡KVM,不过应该是一样的,connect的时候应该是上去了,速度能跑满带宽。
    但是当要断线的时候,会提示unregister_netdevice: waiting for ocserv-vpn0 to become free. Usage count = 1, ocserv-vpn0是我起的设备名,然后把ocserv的LOG开起来,看到的是

    Aug 4 14:04:55 ocserv[10140]: worker[phone]: x.x.x.x sent periodic stats (in: 151753, out: 3025091) to sec-mod
    Aug 4 14:04:55 kernel: [13136.276119] appex: is down
    Aug 4 14:04:55 ocserv[10105]: main[phone]: x.x.x.x:61259 command socket closed
    Aug 4 14:04:55 ocserv[10105]: main[phone]: x.x.x.x:61259 user disconnected
    Aug 4 14:04:55 ocserv[10105]: main[phone]: x.x.x.x:61259 sending msg sm: session close to sec-mod

    感觉应该是脚本根本跑不到,锐速的内核直接崩了,去看了代码,应该是ocserv把worker的相关网卡结构先释放了,然后才跑脚本;但是锐速在还没有跑脚本之前,就认为这个网卡down了,结果后面不会去跑这个脚本里面的东西。
    但是如果这个时候我在命令行直接运行这段脚本,锐速立马就正常了,所以我估计是锐速的执行卡住了,不知道有没有大侠能去ocserv那边反馈一下"比如说一开始接收到client的断开请求就执行脚本,而不是先释放虚拟网卡"。不过看情况好像他们是说安全模块(sec-mod)、worker以及主函数是分开的,所以也可能他们会不愿意改,反正我是不想去看这么长的代码了,也看不懂。
    jaleo
        37
    jaleo  
    OP
       2015-08-04 23:08:55 +08:00
    @xy2938 这个情况和Linode的一样,当时我试过centos、ubuntu的不同版本,都有问题,可能与Linode的内核不兼容有关。在其它使用发行版内核的vps上都正常。
    xy2938
        38
    xy2938  
       2015-08-04 23:25:58 +08:00
    @jaleo 你确定其他内核都可以?我这边装的是ubuntu14.04lts的,断开链接才有的问题,应该不是内核的关系吧,况且内核是可以换的,linode也支持换内核,还有官方的文档,你可以查一下断开没有问题的内核版本号,然后试一下更换内核会不会有问题?
    用uname -r 查到的我的内核号: 3.13.0-24-generic,锐速的版本是3.10.61.0
    TSOM
        39
    TSOM  
       2016-03-08 11:05:45 +08:00
    按照上面的脚本试了,没有加速效果。在 AnyConncet 连接以后手动添加网卡并重启锐速也没有用。请问各位的 Ocserv 加速现在正常吗?
    jaleo
        40
    jaleo  
    OP
       2016-03-08 11:41:11 +08:00
    @TSOM
    7 月 12 日更新后的脚本 我一直是有效的 只在 centos 7.x 上试过
    TSOM
        41
    TSOM  
       2016-03-08 16:59:21 +08:00
    @jaleo 谢谢您。我这边用的 Debian 7 和锐速,上面脚本可以添加网卡到锐速,但是没有加速效果,提示:
    appex: unknown dev vpns0, type65534

    另外您用的 LotServer 是哪里的,可以私聊一下吗?
    jaleo
        42
    jaleo  
    OP
       2016-03-08 17:06:23 +08:00
    @TSOM QQ:1585887
    TSOM
        43
    TSOM  
       2016-03-08 18:24:35 +08:00
    @jaleo 谢谢,已经加了。

    在 Linode 上测试 Centos 7 ,同样会有这个提示:
    appex: unknown dev vpns0, type65534
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2287 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 135ms UTC 05:48 PVG 13:48 LAX 21:48 JFK 00:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86