打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【20140113更新】修改pppd的并发多拨,重新编译
 本帖最后由 qqdwtypm 于 2014-1-13 22:28 编辑

更新ar71xx/91xx:
楼主在事隔一年之后终于狠下心买了个二手的4530r,所以也就有了ar系列的修改版并发多拨。
使用注意事项:
1. 在linux 3.3.8和3.10的trunk上都测试过可用,2.6没测试,应该也可以用
2. openwrt从3.3.8开始使用netifd来管理网络,因此在3.3.8及以上版本还需要修改系统自带的拨号脚本,具体位置为/lib/netifd/proto/ppp.sh,需将第42-58行拨号命令注释掉并替换为我们的并发拨号脚本/root/pppoe-my start,也可直接用附件中修改好的来覆盖。
3. 3.3.8及以上netifd会自动执行拨号脚本,不用再在开机启动中设置,只需计划任务中添加断线检测脚本autodetect即可。

此外,对多拨的脚本pppoe-my也做了一些更新,包括
1. 判断当前是否有别的pppoe-my脚本在运行
2. 正常kill pppd程序,减少非正常断线造成的冷却时间
3. 每次拨号随机更换mac地址(主要是楼主这里的网管太变态)
4. 拨号成功后自动重启nwan(针对使用linux2.6的同志)
5. 自动去掉路由表cache(hg255d建议寻找最适合自己的多拨数,去掉路由表cache后,单线程网速下降,多线程同地址网速上升,例如6拨时单线程可到8m/s,多线程同址可到4-5m/s,建议自己依据自己的网速去测试寻找)
6. 各种sleep时间仍然需要自己去调出最适合自己路由器和运营商的参数。


更新:hg255d的脚本中,需要将eth0改为eth0.2,之前忘了说了,感谢15楼指出。已将脚本分开,hg255d直接下载打包里的。
hg255d大部分的固件里wan口对应的物理设备名为eth0.2,也有的固件里为eth2.2,这个值可以在“网络-接口-对应的wan口-修改-物理设置”里看到,把这个值在脚本里的eth0处对应修改即可。


更新:增加hg255d的文件,用法同db120。

也可直接刷我自编译的固件,地址:
发布一个hg255d自编译固件,支持并发多拨
http://www.openwrt.org.cn/bbs/fo ... 9&fromuid=26665



更新脚本:会在全部拨上等几分钟后,断开最后一个wan口,用来解决开无线掉速及nwan性能下降的bug,db120满载可达6-7m,hg255d可达8-9m。可自己调整最后几行中的sleep 300中的等待时间,可通过观察日志时间判断何时拨号结束(即nwan、添加防火墙那些都结束了),何时开始结束最后一个wan口,以结束不必要的等待。db120 32m内存8拨,该值建议为300秒,hg255d 64m内存16拨,等待180s即可,其他请自己观察。



参考帖子[120425改进同步方式]修改pppd提高多拨成功率
http://www.openwrt.org.cn/bbs/fo ... 7&fromuid=26665

其0419的版本无法运行,总是提示sem open fail,但其旧版本的已经不提供下载,所以自己用其0408的代码在最新的dreambox源码上重新编译了一下,trunk version @557,ppp的版本为2.4.5-4

测试平台:db120,120201-openwrt-RG100A_DB120-squashfs-STA-full-testing.bin,最新的固件应该都可以

使用方法:
1. 安装ppp-mod-pppoe_2.4.5-4_brcm63xx.ipk,ppp_2.4.5-4_brcm63xx.ipk
2. 将syncpppinit复制到/usr/sbin/目录下,改权限
3. 拨号脚本pppoe-my,设置里面的几个参数,如拨号次数、几拨等等,此外在拨号前会等待100s,代码为sleep 100,大家可以自己修改,逐步尝试看自己的运营商的冷却时间是多少。
4. 将拨号脚本放至任意目录,改权限,添加开机运行。
5. 将检测脚本放至任意目录,改权限,添加计划任务运行,5分钟即可。

可以在ssh里先运行一下脚本,看看输出:
  1. /root/pppoe-my start

复制代码
脚本pppoe-my:
  1. #!/bin/sh /etc/rc.common

  2. # Copyright (C) 2008 OpenWrt.org

  3. START=99

  4. #number是重拔次数

  5. #n是几拔

  6. #ok是拔上几次后退出拔号

  7. number=10

  8. n=10

  9. ok=4

  10. start() {

  11.    for q in $( seq 1 $number )

  12.    do        

  13.         echo

  14.         echo ___________________________________________________

  15.         echo 开始第$q次拔号...........

  16.         #取得wan口的账号和密码,用来多拨

  17.         user=`uci get network.wan.username`

  18.         pass=`uci get network.wan.password`

  19.         killall -q -SIG pppd

  20.         killall -q -SIG syncpppinit

  21.         sleep 100

  22.         syncpppinit $n &

  23.         sleep 1

  24.         echo 正开始并发拔号中.............

  25.         for i in $( seq 0 $(($n-1)))

  26.         do

  27.           if [ "$i" == "0"  ] ;

  28.           then

  29.                interface=wan

  30.                 #db120为eth,hg255d可能为eth0.2或eth2.2,在下方对应修改

  31.                 ifname=eth0

  32.           else

  33.                interface=wan$i

  34.                 ifname=vth$i

  35.           fi

  36.            #ifname=`uci get network.$interface.ifname`

  37.            #user=`uci get network.$interface.username`

  38.            #pass=`uci get network.$interface.password`

  39.            #echo pppoe账号:[$user]                pppoe密码:[$pass]        pppoe接口:[$ifname]

  40.            /usr/sbin/pppd plugin rp-pppoe.so syncppp mtu 1492 mru 1492 nic-$ifname nopersist usepeerdns nodefaultroute user $user password $pass ipparam $interface ifname pppoe-$interface nodetach &

  41.         done

  42.         echo 正在并发拔号中.............

  43.         echo 等待20秒.............

  44.         sleep 10

  45.         j=`ifconfig|grep -c inet.*P-t-P`

  46.         echo [$n]拔[$j]拔成功.....

  47.         ! [ "$j" -ge "$ok" ] && echo 成功[$j]拔, 小于设定的[$ok]拔将重新拔号...

  48.         [ "$j" -ge "$ok" ] && echo 成功[$j]拔, 大于或等于设定的[$ok]退出拔号...   

  49.         [ "$j" -ge "$ok" ] && killall -q -SIG syncpppinit

  50.         [ "$j" -ge "$ok" ] && sleep 300

  51.         [ "$j" -ge "$ok" ] && kill `pidof pppd | awk '{print $1}'`

  52.         [ "$j" -ge "$ok" ] && exit

  53.     done

  54. }

复制代码
脚本autodetect:
  1. #!/bin/sh /etc/rc.common

  2. state=`ps|grep -c pppoe-my`

  3. [ "$state" -ge "2" ] && exit

  4. n_connected=`ifconfig|grep -c inet.*P-t-P`

  5. ! [ "$n_connected" -ge "1" ] && /root/pppoe-my start 

复制代码
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
x86版openwrt并发拨号ppp插件以及拨号脚本.
【新提醒】云路由手动配置【多号多拨】教程
linux中PPP、PPPoE连接管理命令
3g移植
PPP协议体系的实现
“免费”PHICOMM 斐讯 K2 路由器刷OpenWRT开源固件(实战MWAN多宽带链路网速叠加)...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服