ubnt解决方案
楼主: 暴走吧

[求助] 求助一个咖啡厅布无线的问题

[复制链接]

155

回帖

696

积分

312 小时

在线时间

中尉

注册时间
2009-9-16
金币
493 个
威望
1 个
荣誉
0 个
累计签到:7 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-19 11:27
理想的QOS是让丢弃的每个包都是由QOS设备基于优先&公平的原则进行,不能让运营商把包丢了,不能让交换机把包丢了,也不能被WIFI空口丢弃,因为这些包的丢失不是基于自定义策略进行的,只是因为满载而被随机丢弃,一个用户拖跨一个网络也正因如此。。。

155

回帖

696

积分

312 小时

在线时间

中尉

注册时间
2009-9-16
金币
493 个
威望
1 个
荣誉
0 个
累计签到:7 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-19 13:10
dato 发表于 2017-9-19 11:02
不懂抓包,一直搞不懂ros的小包概念。正宗的linux有tc+iptables完成qos设置。小包就变成arp,icmp,ack,syn,f ...

LINUX的TC在ROS里就是simple queue,ROS6.0后优化了不再遍历规则,性能比TC更好,但一搬人不用它,因为灵活性不够好。可以确定的是,在功能上很难找到能与ROS比较的设备。看你的说话很明显你对ROS不够了解,值得你深入学习的,有本电子书《RouterOS 入门到精通》。谁用谁知道

641

回帖

2840

积分

1721 小时

在线时间

少校

注册时间
2010-1-31
金币
1969 个
威望
5 个
荣誉
1 个

尚未签到

发表于 2017-9-19 14:07
2014年买了个rb2011本来想深入学习ros的,但是很快就放弃了。ros wiki确实是有很多独到的文档,但是只要有linux经验很快就能将这些文档转换成openwrt下运行。https://wiki.mikrotik.com/wiki/ 。很多linux命令,ros的命令行也只是支持部分参数,必竟ros只是linux的子集,它用了一套它自己的语法格式对linux命令重新进行解释。当然当时放弃ros的最主要问题是脚本写起来太累人了。用linux gnu工具几句的事情,转换成ros运行的脚本可不容易。说到linux的qos,按说ros现在才仅仅有包到链接的过程,这都非常过时了。linux有connmark结构,这个就是所谓的包标记到链接的标记过程。但是最终都命中第一条规则。ros的我至今搞不清楚它是否是这种结构,按linux下的iptables规则自上而下的遍历过程,如果ros也这样遍历规则显然它比connmark结构低效,但是如果ros后台显示这样的规则,而真正的底层也是connmark结构,那也只能说不相上下。当然linux还有很多高级的用法。假如有13个vlan接口难道每个vlan都做1套qos?linux 有ifb接口,可以将所有的13个vlan流量都定向到统一的一个ifb0接口,统一做qos控制。

  1. iptables -A POSTROUTING -t mangle -j CONNMARK --restore-mark
  2. iptables -A POSTROUTING -t mangle -m mark ! --mark 0 -j ACCEPT
  3. iptables -A POSTROUTING -p tcp --dport 21 -t mangle -j MARK --set-mark 1
  4. iptables -A POSTROUTING -p tcp --dport 80 -t mangle -j MARK --set-mark 2
  5. iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark
复制代码

ros的v6 queue tree
  1. add chain=prerouting protocol=tcp dst-port=53,22,23,123,3389,8123 in-interface=bridge2 action=mark-connection \
  2.     new-connection-mark=High-conn passthrough=yes comment=tcp_2
  3. add chain=prerouting protocol=udp dst-port=53 in-interface=bridge2 action=mark-connection \
  4.     new-connection-mark=High-conn passthrough=yes comment=udp_2
  5. add chain=prerouting in-interface=bridge2 connection-mark=High-conn action=mark-packet new-packet-mark=High passthrough=no
  6. #偷懒了就只写了一句

  7. add chain=prerouting protocol=tcp dst-port=80,443,1080,1863,4662,8080,12000,14000 in-interface=bridge2 action=mark-connection \
  8.     new-connection-mark=Medium-conn passthrough=yes comment=tcp_3
  9. add chain=prerouting protocol=udp dst-port=4000-4030,4772,8000-8001 in-interface=bridge2 action=mark-connection \
  10.     new-connection-mark=Medium-conn passthrough=yes comment=udp_3
  11. add chain=prerouting in-interface=bridge2 connection-mark=Medium-conn action=mark-packet new-packet-mark=Medium passthrough=no
复制代码


tc这工具太高深,用不来。只是用它来放行tcp握手包,而不是ros下的iptables length也就是所谓的小包匹配
  1. #$TC filter add dev $UDEV parent 1:0 prio 12 protocol arp handle 1 fw classid 1:20 # Arp traffic
  2. $TC filter add dev $UDEV parent 1: prio 13 protocol ip u32 match ip protocol 1 0xff flowid 1:20 #ICMP
  3. #$TC filter add dev $UDEV parent 1: prio 14 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:20 #ACK
  4. $TC filter add dev $UDEV parent 1: prio 15 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x02 0x02 at 33 flowid 1:20 #SYN
  5. $TC filter add dev $UDEV parent 1: prio 17 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x01 0x01 at 33 flowid 1:20 #FIN
  6. $TC filter add dev $UDEV parent 1: prio 19 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x04 0x04 at 33 flowid 1:20 #RST

复制代码
以前做的端口qos,由于没有tc也就只能这样了。

  1. #http://wiki.mikrotik.com/wiki/Manual:Queues_-_PCQ_Examples
  2. /ip firewall mangle add chain=forward dst-address=192.168.88.0/24 out-interface=bridge2 action=mark-connection new-connection-mark=Download-conn passthrough=yes
  3. /ip firewall mangle add chain=forward out-interface=bridge2 connection-mark=Download-conn action=mark-packet new-packet-mark=Download  passthrough=no
  4. #google关键词:实作RouterOS的HTB
  5. #这么多年一直对这个接口方向无法做到图形记忆,可以google 上面的关键词,作者简单的几句话就很容易理解
  6. #由于放在forward链所以用的out-interface接口
  7. /queue type add name=download-queue kind=pcq pcq-classifier=dst-address

  8. /queue tree add name=Download parent=global max-limit=5300k
  9. /queue tree add name=PCQ_D parent=Download packet-mark=Download queue=download-queue priority=1  

  10. ###########################################################################################
  11. /ip firewall mangle
  12. add chain=prerouting protocol=icmp in-interface=bridge2 new-packet-mark=SP1 action=mark-packet passthrough=no comment=icmp
  13. add chain=prerouting protocol=tcp in-interface=bridge2 new-packet-mark=SP1 action=mark-packet passthrough=no tcp-flags=ack packet-size=0-123 comment=ack
  14. add chain=prerouting protocol=tcp in-interface=bridge2 new-packet-mark=SP1 action=mark-packet passthrough=no tcp-flags=syn packet-size=0-666 comment=syn
  15. add chain=prerouting protocol=tcp in-interface=bridge2 new-packet-mark=SP2 action=mark-packet passthrough=no tcp-flags=fin comment=fin
  16. add chain=prerouting protocol=tcp in-interface=bridge2 new-packet-mark=SP2 action=mark-packet passthrough=no tcp-flags=rst comment=rst

  17. #上面是一些以包标记实现的所谓小包规则,但是我不知道如何验证它的效果,linux下是用tc u32匹配的。ros下google不到任何跟tc有关的资料。它的这些pack-size更像是linux下的iptables语法。
  18. #tc filter add dev $UDEV parent 1: prio 13 protocol ip u32 match ip protocol 1 0xff flowid 1:20 #ICMP
  19. #tc filter add dev $UDEV parent 1: prio 14 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:20 #ACK
  20. #tc filter add dev $UDEV parent 1: prio 15 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x02 0x02 at 33 flowid 1:20 #SYN
  21. #tc filter add dev $UDEV parent 1: prio 17 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x01 0x01 at 33 flowid 1:20 #FIN
  22. #tc filter add dev $UDEV parent 1: prio 19 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x04 0x04 at 33 flowid 1:20 #RST


  23. /ip firewall mangle
  24. add chain=prerouting protocol=tcp dst-port=2099,5060,5222,5223,6060,8088,8393-8400 in-interface=bridge2 action=mark-connection \
  25.     new-connection-mark=Highest-conn passthrough=yes comment=tcp_1
  26. add chain=prerouting protocol=udp dst-port=5000-5500,5060,6060,8088 in-interface=bridge2 action=mark-connection \
  27.     new-connection-mark=Highest-conn passthrough=yes comment=udp_1
  28. add chain=prerouting in-interface=bridge2 connection-mark=Highest-conn action=mark-packet new-packet-mark=Highest passthrough=no

  29. #一直在纠结Highest-conn跟Highest到底怎么写,最后在官方2011年文档里发现还是区别写的,按以前linux下的说法包标记和链接标记的位置#是有差别的,所以也区别写的。
  30. #QoS Best Practice [url=home.php?mod=space&uid=610341]@[/url] MUM USA 2009, pdf by Janis Megis, MikroTik  
  31. #in-interface=bridge2 内网接口,填上主要避免与其它接口的数据包匹配
  32. #passthrough=no  怎么理解,不通过吗?linux下的数据包在iptables 链里面都是从你书写的规则里自上而下匹配的,除非你指定了#RETURN。那么这个passthrough=no的意思就是当数据包和这条带有passthrough=no 的规则匹配成功时,则不再匹配这规则下面的剩余规则。如果规则特别多的时候,网络又异常繁忙,那#它就能大大减少匹配时间,提升效率。

  33. add chain=prerouting protocol=tcp dst-port=53,22,23,123,3389,8123 in-interface=bridge2 action=mark-connection \
  34.     new-connection-mark=High-conn passthrough=yes comment=tcp_2
  35. add chain=prerouting protocol=udp dst-port=53 in-interface=bridge2 action=mark-connection \
  36.     new-connection-mark=High-conn passthrough=yes comment=udp_2
  37. add chain=prerouting in-interface=bridge2 connection-mark=High-conn action=mark-packet new-packet-mark=High passthrough=no
  38. #偷懒了就只写了一句

  39. add chain=prerouting protocol=tcp dst-port=80,443,1080,1863,4662,8080,12000,14000 in-interface=bridge2 action=mark-connection \
  40.     new-connection-mark=Medium-conn passthrough=yes comment=tcp_3
  41. add chain=prerouting protocol=udp dst-port=4000-4030,4772,8000-8001 in-interface=bridge2 action=mark-connection \
  42.     new-connection-mark=Medium-conn passthrough=yes comment=udp_3
  43. add chain=prerouting in-interface=bridge2 connection-mark=Medium-conn action=mark-packet new-packet-mark=Medium passthrough=no

  44. add chain=prerouting protocol=tcp dst-port=20,21,25,1024-65535 in-interface=bridge2 action=mark-connection \
  45.     new-connection-mark=Low-conn passthrough=yes comment=tcp_4
  46. add chain=prerouting protocol=udp dst-port=1-65535 in-interface=bridge2 action=mark-connection \
  47.     new-connection-mark=Low-conn passthrough=yes comment=udp_4
  48. add chain=prerouting in-interface=bridge2 connection-mark=Low-conn action=mark-packet new-packet-mark=Low passthrough=no

  49. {
  50. :local UPLINK 800;
  51. :local High 0
  52. :local Medium 0
  53. :local Mediuml
  54. :local Lowm 0
  55. :local Lowl 0
  56. :local k k;

  57. /queue tree
  58. add name=Upload parent=global max-limit="$UPLINK$k"
  59. :set Medium ($UPLINK * 8 / 10)
  60. add name=Queue_1:2 parent=Upload max-limit="$Medium$k" limit-at="$Medium$k"

  61. add name=1_Highest parent=Upload packet-mark=Highest limit-at="$Medium$k" max-limit="$UPLINK$k" priority=1

  62. add name=Queue_ICMPACKSYN parent=Upload packet-mark=SP1 limit-at="$Medium$k" max-limit="$UPLINK$k" priority=2
  63. add name=Queue_FINRST parent=Upload packet-mark=SP2 limit-at="$Medium$k" max-limit="$UPLINK$k" priority=3

  64. :set High ($UPLINK * 1 / 10)
  65. add name=2_High parent=Upload packet-mark=High limit-at="$High$k" max-limit="$UPLINK$k" priority=4

  66. :set Mediuml ($UPLINK * 5 / 100)
  67. add name=3_Medium parent=Queue_1:2 packet-mark=Medium limit-at="$Mediuml$k" max-limit="$Medium$k" priority=5  
  68. :set Lowm ($UPLINK * 70 / 100)
  69. :set Lowl ($UPLINK * 3 / 100)
  70. add name=4_Low parent=Queue_1:2 packet-mark=Low limit-at="$Lowl$k" max-limit="$Lowm$k" queue=hotspot-default priority=8
  71. #按60/80 流量和延迟对比关系做的htb实现
  72. }

  73. 简单说一下simple queue 和 pcq的差别。
  74. 官方有关pcq的具体实现只是简单的说它是sfq的一种类型,从我自己测试过程也没注意到类似官方wiki的那种平分带宽的过程。倒是指定了pcq-rate值以后看到了限制。pcq主要是来解决simple queue亢长匹配而导致的效率问题。虽然官方提到在v6版本simpe queue效率提升了很多,单机没采用上行端口QOS的情况,特别还有web下载的时候感觉很慢啊。下面的3段代码实现了以前linux下一个根据udp数量来限速的过程。按官方文档QOS流量方向queue tree>>>>>simple queue,所以再用simple queue对特定IP进行限速没问题。

  75. #生成LAN IP地址列表
  76. / ip firewall mangle
  77. add chain=prerouting src-address=192.168.88.0/24 action=add-src-to-address-list \
  78.     address-list=LAN address-list-timeout=1m comment="" disabled=no
  79. #
  80. {
  81. :local ip 0;
  82. :local udpn 0;
  83. :foreach a in=[/ip fir address-list find where list=LAN address!=192.168.88.1] do={
  84. #不包含网关ip
  85. :set ip [/ip fir address-list get $a address]

  86. :set udpn [/ip firewall connection print count-only where src-address~"^$ip:" and protocol="udp"]
  87. #对UDP超限的用户生成simple队列,由于simple在htb后面,有效
  88. :if ($udpn>10) do={/queue simple add name=$ip target="$ip" max-limit=800K/800K queue="hotspot-default" disabled=no} else={:put false}
  89. }
  90. }

  91. #批量删除所有simple queue
  92. /queue simple
  93. :foreach i in=[find] do={ remove $i; }

  94. Manual:Queues - PCQ
  95. http://wiki.mikrotik.com/wiki/Manual:Queues_-_PCQ
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x

1

回帖

18

积分

3 小时

在线时间

新兵上阵

注册时间
2017-9-18
金币
16 个
威望
0 个
荣誉
0 个
累计签到:1 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-19 14:46
achengit 发表于 2017-9-18 23:09
200M一条已经有余,这样的环境重点在于带宽管理、无线管理,否则你装十条也无用武地(设置得好100M就可以很 ...

老铁,留个联系方式 我私聊你

155

回帖

696

积分

312 小时

在线时间

中尉

注册时间
2009-9-16
金币
493 个
威望
1 个
荣誉
0 个
累计签到:7 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-19 15:16
本帖最后由 achengit 于 2017-9-19 15:22 编辑
暴走吧 发表于 2017-9-19 14:46
老铁,留个联系方式 我私聊你

QQ 86022029

155

回帖

696

积分

312 小时

在线时间

中尉

注册时间
2009-9-16
金币
493 个
威望
1 个
荣誉
0 个
累计签到:7 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-19 15:44
dato 发表于 2017-9-19 14:07
2014年买了个rb2011本来想深入学习ros的,但是很快就放弃了。ros wiki确实是有很多独到的文档,但是只要有l ...

“按说ros现在才仅仅有包到链接的过程”这句话我不好理解,ROS一直都有connection mark和packet mark,如果你接触过ROS没理由会不知道的啊,

从系统角度来说可玩性当然LINUX更高更自由, ROS是为优化LINUX的网络功能和使用难度而产生,从这角度看ROS的网络功能与性能都要优于LINUX,使用上也更直观更易上手。

附一图你参考

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x

198

回帖

455

积分

121 小时

在线时间

少尉

注册时间
2014-4-14
金币
238 个
威望
1 个
荣誉
0 个
累计签到:2 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-24 16:07
呵呵~

从ROS的技术性角度我 没楼上achengit 这个哥们的技术号

但从实际使用的角度来说,,

一条200M 带50+客户是不足够的。。

并不是带宽不够。。。这点要注意,,,而是电信有连接数限制。。

在某些连接数过多的情况下,会对用户的线路进行reload 重载数据。这个时候往往就出现掉线情况。

另外说一句。。。

爱快那么简单好用的产品,何必用ROS 那么复杂?


198

回帖

455

积分

121 小时

在线时间

少尉

注册时间
2014-4-14
金币
238 个
威望
1 个
荣誉
0 个
累计签到:2 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-24 16:09
achengit 发表于 2017-9-19 10:16
用2条光纤无法实现漫游,就算配置成漫游游戏也会断线,楼主的场所有大量游戏用户,必须做好无线限速来保 ...

就算配置100条 光纤 也跟漫游没关系啊!

漫游只是跟无线的接入方式有关系。。。


2条光纤,我只是游戏和其他分流。

跟漫游没任何关系的。。哥们可懂?


无线限速并不代表可以稳定游戏的低延迟,不知道你做过方案没?

641

回帖

2840

积分

1721 小时

在线时间

少校

注册时间
2010-1-31
金币
1969 个
威望
5 个
荣誉
1 个

尚未签到

发表于 2017-9-24 17:09
本帖最后由 dato 于 2017-9-24 17:13 编辑

并发限制也是常见的电信用于区分专线的一个特征。根据观察正常的办公环境也就80左右的并发,迅雷时会一下高达1200个马上让家庭带宽异常。对于一个专线20/67 可能只有6000个并发的线路,怎么带145ip?tcp的握手过程,丢包本身就可以抑制并发的发起。tcp/udp timeout的优化可以加速这个连接的快速老化,用iptables reject代替drop也可以加速并发的快速消亡,qos的优先级出列也可以保障高优先级的数据包优先出列丢弃低优先级的数据包。

以前通过侦测大并发用户,再用limit限制lan ip发往路由的不同端口进行并发抑制,根据tcp的握手过程可以有效的抑制住迅雷的并发。这个实例优先保障了看得见的tcp 80/443端口的并发,限制其它端口更小的并发数量发起,iptables limit是个非常平和的并发限制模块,不会像其它模块一旦并发受限马上连接异常。

  1. iptables -I FORWARD $a -s $i -j DROP
  2. iptables -I FORWARD $a -s $i -p udp -j REJECT --reject-with icmp-proto-unreachable
  3. iptables -I FORWARD $a -s $i -p tcp -j REJECT --reject-with icmp-proto-unreachable
  4. iptables -I FORWARD $a -s $i -p ICMP --icmp-type echo-request -m limit --limit 4/sec -j ACCEPT
  5. iptables -I FORWARD $a -s $i -m limit --limit 50/s --limit-burst 100 -j ACCEPT
  6. iptables -I FORWARD $a -s $i -p tcp -m multiport --dport 25,80,443,1863 -m limit --limit 100/s --limit-burst 100 -j ACCEPT
复制代码


当然这些年再也没关心过并发这事情,直接通过流量分组来抑制这个过程(但是现实确实是会再次遇到并发导致的问题,只是可能没注意到因为看得见的优先保障都是tcp 80网页浏览过程,至于其它的丢包,是什么应用丢包没关心过)。上行做了目的端口优先级,可以让p2p流量自动避让高优先级流量,这也许就是为什么无视并发限制。下行实现了类似pcq的流量抑制过程。当然我也不认为限速可以提高游戏的延迟,因为延迟是可以计算的,延迟跟分配给这个高优先级的游戏流量分组的流量大小,和通过的实际游戏流量有对比关系,根据测试当当前流量只有总带宽的80%时延迟波动还是非常小的,而qos是要抑制在超过80%时可能导致的延迟波动。在光纤线路可以让高优先级的游戏数据包游戏延迟<20ms,让p2p流量>507ms。流量10mbps的上行应该还马马虎虎。

udp_6060_0x10/0xff
tcp_26241_0x10/0xff
udp_53_0x20/0xff
tcp_22,23,123,3389,8123_0x20/0xff
tcp_80,443,1080,1863,8080,12000,14000_0x30/0xff
udp_500,1701,4000:4030,8000:8001_0x30/0xff
tcp_20,21,25,1024:65535_0x40/0xff
udp_1:65535_0x40/0xff



155

回帖

696

积分

312 小时

在线时间

中尉

注册时间
2009-9-16
金币
493 个
威望
1 个
荣誉
0 个
累计签到:7 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-25 17:33
本帖最后由 achengit 于 2017-9-25 17:40 编辑
jensun@qq.com 发表于 2017-9-24 16:07
呵呵~

从ROS的技术性角度我 没楼上achengit 这个哥们的技术号

用ROS不是因为他复杂,只是因为它灵活、可塑性高。当然我也希望它可以操作起来是简单的,可简单即意味着很多事情在界面内已经确定了。电信限制连接数我是未见过,也许某些地区会有这个限制?50M带一家150+电脑的网络也是常事

155

回帖

696

积分

312 小时

在线时间

中尉

注册时间
2009-9-16
金币
493 个
威望
1 个
荣誉
0 个
累计签到:7 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-25 17:38
jensun@qq.com 发表于 2017-9-24 16:09
就算配置100条 光纤 也跟漫游没关系啊!

漫游只是跟无线的接入方式有关系。。。

也不是说多线漫游就一定断线,之前没说清楚,这还得看网络拓扑、双线如何使用,也不是说限速就可以解决游戏稳定的问题,应该说限速没处理好游戏就一定不稳定。

155

回帖

696

积分

312 小时

在线时间

中尉

注册时间
2009-9-16
金币
493 个
威望
1 个
荣誉
0 个
累计签到:7 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2017-9-25 18:03
jensun@qq.com 发表于 2017-9-24 16:07
呵呵~

从ROS的技术性角度我 没楼上achengit 这个哥们的技术号

小弟很感兴趣想知道电信连接数限制了多少?怎么样才算是一个连接,对线路reload该如何理解?

站点统计 | Archiver | 手机版 | 无线门户 ( 粤ICP备11076993号|粤公网安备44010602008359号 ) |网站地图

GMT+8, 2024-4-25 06:41

返回顶部 返回列表