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 · 2441 次点击
    这是一个创建于 3565 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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   ·   实用小工具   ·   1401 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 118ms · UTC 23:48 · PVG 07:48 · LAX 15:48 · JFK 18:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.