查看: 1397|回复: 42

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

[复制链接]

主题

好友

18

积分

新兵上阵

签到天数: 1 天

[LV.1]初来乍到

发表于 2017-9-18 22:11 |显示全部楼层
Anywlan微信公众号
200平+的店面,需要支持100人左右的移动端无线使用,上网,微博,微信朋友圈,手游。是否一定需要拉专线,200M/10M的精品企业宽带无固定IP拉2条是否可以支持使用

主题

好友

2625

积分

少校

该用户从未签到

发表于 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
回复

使用道具 举报

主题

好友

682

积分

中尉

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2017-9-18 23:09 |显示全部楼层
本帖最后由 achengit 于 2017-9-18 23:15 编辑

200M一条已经有余,这样的环境重点在于带宽管理、无线管理,否则你装十条也无用武地(设置得好100M就可以很爽)
回复

使用道具 举报

主题

好友

393

积分

少尉

签到天数: 1 天

[LV.1]初来乍到

发表于 2017-9-18 23:59 |显示全部楼层
简单 傻瓜方式实现的方法
直接用 爱块(2个X1 AP) +2条 200M ADSL
然后做游戏分流

总体成本在3000 以内 (除了宽带费用)
回复

使用道具 举报

主题

好友

682

积分

中尉

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2017-9-19 10:16 |显示全部楼层
本帖最后由 achengit 于 2017-10-14 10:44 编辑
jensun@qq.com 发表于 2017-9-18 23:59
简单 傻瓜方式实现的方法
直接用 爱块(2个X1 AP) +2条 200M ADSL
然后做游戏分流

楼主的场所有大量游戏用户,必须做好无线限速来保证游戏低延时,配置全场可漫游不断线
回复

使用道具 举报

主题

好友

682

积分

中尉

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2017-9-19 10:21 |显示全部楼层
推荐配置:
200M光纤*1
路由器*1:RB3011UiAS-RM
AP*3:RBwAPG-5HacT2HnD

(或许AP 2个也可以,看现场环境,如果不懂配置可以找我
回复

使用道具 举报

主题

好友

632

积分

中尉

签到天数: 32 天

[LV.5]常住居民I

发表于 2017-9-19 10:35 |显示全部楼层
够用了啊,扫码加微信吧
回复

使用道具 举报

主题

好友

2625

积分

少校

该用户从未签到

发表于 2017-9-19 10:37 |显示全部楼层
200M/10M的精品企业宽带到底什么价格,

http://mini189.cn/mini189/new/ad ... d=gdsb-sysw-qykd-C1

上网,微博,微信朋友圈 都是延迟无关的应用,关键是这个手游如何提高延迟优先级。常用的基于目的端口的QOS优先级,必须知道各个手游的确定服务器端口才可以做优先级,这样有可能混杂P2P流量。当然更高级的声称有L7过滤功能的可以将这个范围进一步缩小。其实200/10足够了。。。这么多年用的最高的20/60 10/10还不是照样带100IP。选择多大带宽跟你的QOS经验很有关系。常见的tplink企业级都说能带500ip,但是这种基于ip限速的qos小带宽很难均分,也不知道是否有优先级概念,反正效果很差劲。linux类的openwrt类系统则可以做得很精细,直接tcp 80,8080优先级出列P2P流量自动避让,马上解决上网,微博,微信朋友圈.手游可以考虑采集目的端口,或者目的端口+ip,效果也不会很差劲。
回复

使用道具 举报

主题

好友

682

积分

中尉

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2017-9-19 10:50 |显示全部楼层
dato 发表于 2017-9-19 10:37
200M/10M的精品企业宽带到底什么价格,

http://mini189.cn/mini189/new/adsl/fine/200M?in_cmpid=gdsb-s ...

游戏优先可以用小包优先策略,加上HTB+PCQ防止空口带宽满载、光口带宽满载、防止单用户下载拖跨无线或宽带,踢除弱信号客户端(引导漫游、防止拖累空口),这样配置管控每一个接口每一个数据包,完成这些所有策略一台ROS搞定(同时它还是AC)
回复

使用道具 举报

主题

好友

2625

积分

少校

该用户从未签到

发表于 2017-9-19 11:02 |显示全部楼层
不懂抓包,一直搞不懂ros的小包概念。正宗的linux有tc+iptables完成qos设置。小包就变成arp,icmp,ack,syn,fin,rst这些东东。而ros这个linux变种却不带tc工具,它家的小包就变成iptables length匹配,很怀疑这种所谓的大小包分类是否能有效识别,这个数据包到底是游戏,还是网页,还是p2p。
回复

使用道具 举报

主题

好友

297

积分

少尉

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2017-9-19 11:07 |显示全部楼层
推荐用H3C的方案:
路由器:1台ER3260G2
双频吸顶AP:3台A51

具体价格,欢迎可加企鹅号(361264480)详聊。

回复

使用道具 举报

主题

好友

682

积分

中尉

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2017-9-19 11:16 |显示全部楼层
dato 发表于 2017-9-19 11:02
不懂抓包,一直搞不懂ros的小包概念。正宗的linux有tc+iptables完成qos设置。小包就变成arp,icmp,ack,syn,f ...

P2P和HTTP下载99.9%的包都是1400以上,游戏包99%都是1000以下的, 虽不是100%,但足够有效了,限速可以基于包的标记,要100%%可以用L7,跳过arp,icmp,ack,syn,fin,rst这些更是易事,正因为ROS的QOS足够强大所以才有大多数的网吧用ROS用路由,ROS的限速是非常灵活的,HTB+PCQ可以做到多级带宽按优先自动分配、再按客户端量二次公平分配,玩得好的话ROS是非常强大的。ROS也是基于LINUX的,很明显如果LINUX够用的话ROS就无必须做二次开发了,如果有兴趣ROS绝对值得深入学习
回复

使用道具 举报

主题

好友

682

积分

中尉

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2017-9-19 11:19 |显示全部楼层
dato 发表于 2017-9-19 11:02
不懂抓包,一直搞不懂ros的小包概念。正宗的linux有tc+iptables完成qos设置。小包就变成arp,icmp,ack,syn,f ...

实际上楼主的使用环境根本不需要理会P2P,基本上都是手机用户,用HTB+PCQ就足够爽了,如果有一台笔记本在P2P下载同时在笔记本上玩游戏,那卡的只有这台笔记本上的游戏,其它用户完全不受影响
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入

本版积分规则

Archiver| 手机版| 中国无线门户 ( 粤ICP备11076993 )  |网站地图

GMT+8, 2017-12-14 10:17

Powered by Discuz! X3.2

© 2003-2013 广州威思信息科技有限公司

返回顶部 返回列表