免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6496 | 回复: 4
打印 上一主题 下一主题

[网络管理] tc htb 流量控制 under DD-WRT V24-sp2 std [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-01 16:30 |只看该作者 |倒序浏览
看了些论坛的文章,看起来tc htb应该是很常用的方法,我刚刚手头有个基于busybox的路由器,也想使用tc htb来控制流量。

路由器:
WRT54G v1 刷DD-WRT
  1. ==========================================================

  2. ____  ___    __        ______ _____         ____  _  _
  3. | _ \| _ \   \ \      / /  _ \_   _| __   _|___ \| || |
  4. || | || ||____\ \ /\ / /| |_) || |   \ \ / / __) | || |_
  5. ||_| ||_||_____\ V  V / |  _ < | |    \ V / / __/|__   _|
  6. |___/|___/      \_/\_/  |_| \_\|_|     \_/ |_____|  |_|

  7.                        DD-WRT v24-sp2
  8.                    [url]http://www.dd-wrt.com[/url]

  9. ==========================================================


  10. BusyBox v1.13.4 (2009-05-27 09:54:52 CEST) built-in shell (ash)
  11. Enter 'help' for a list of built-in commands.

  12. root@linksys:~# uname -a
  13. Linux linksys 2.4.35 #3200 Wed May 27 09:57:50 CEST 2009 mips unknown
复制代码


4M ADSL 拖 2台机 3笔记本

主要用途:
台机A:BT+电驴*24
台机B:BT+晚上玩游戏
笔记本:上网,聊天,有时玩玩游戏

目的:
1.希望能灵活的控制流量和优先级,比如半夜了把流量分配给下载机
2.第一优先 游戏 (CS,魔兽,暗黑...) 应该可以从端口来判断
   第二优先 网页
   ...
3.希望这些策略给路由器的负载不要太大,路由器WAN口老是掉了再连,怀疑因为先前开了WRT的QoS.


我知道iptables的基本使用,看了《Linux的高级路由和流量控制HOWTO》(好文!!) ,过了下tc的基本概念。

我的问题:
1.虽然我看到busybox中有tc命令, ip 命令执行也正常,不知道htb我的busybox 内核是否支持?如何看?
2.无线使用AP模式并启用了桥接,所以有线的4口和无线连接都被并到了路由器的br0? 详见ip address show的输出
3.话说tc用来控制数据的发送流量,所以应该在数据从路由器到客户端这里做限制?应该是的吧 呵呵



路由器默认开启了VLAN(vlan0外网口WAN,vlan1内网LAN)
  1. root@linksys:~# ip address show
  2. 1: lo: <LOOPBACK,MULTICAST,UP> mtu 16436 qdisc noqueue
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4.     inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
  5. 2: teql0: <NOARP> mtu 1500 qdisc noop
  6.     link/void
  7. 3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast
  8.     link/ether 00:06:23:3f:e3:7e brd ff:ff:ff:ff:ff:ff
  9. 4: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop
  10.     link/ether 00:06:23:3f:e3:7f brd ff:ff:ff:ff:ff:ff
  11. 5: eth2: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast
  12.     link/ether 00:06:23:3f:e3:80 brd ff:ff:ff:ff:ff:ff
  13. 6: vlan0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue
  14.     link/ether 00:06:23:3f:e3:7e brd ff:ff:ff:ff:ff:ff
  15. 7: vlan1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
  16.     link/ether 00:06:23:3f:e3:7f brd ff:ff:ff:ff:ff:ff
  17. 8: br0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
  18.     link/ether 00:06:23:3f:e3:7e brd ff:ff:ff:ff:ff:ff
  19.     inet 192.168.1.1/24 brd 192.168.1.255 scope global br0
  20.     inet 169.254.255.1/16 brd 169.254.255.255 scope global br0:0
  21. 9: ppp0: <POINTOPOINT,MULTICAST,UP> mtu 1492 qdisc pfifo_fast
  22.     link/ppp
  23.     inet 122.234.59.149 peer 61.130.120.156/32 brd 122.234.59.149 scope global ppp0
  24. 10: etherip0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop
  25.     link/ether af:f3:4e:4e:23:fc brd ff:ff:ff:ff:ff:ff
复制代码

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2009-07-01 21:01 |只看该作者
用tc给某个网卡加htb队列,如果能成功,说明支持

论坛徽章:
0
3 [报告]
发表于 2009-07-02 00:35 |只看该作者
恩 可以的

接下去就应该看tc具体使用了,一般要实现我的网络管理需求不知道 class filter 该怎么分...
还好 网上例子很多

论坛徽章:
0
4 [报告]
发表于 2009-07-03 02:52 |只看该作者
直接执行tc qdisc show dev eth0

论坛徽章:
0
5 [报告]
发表于 2009-07-03 11:10 |只看该作者
原帖由 emmoblin 于 2009-7-3 02:52 发表
直接执行tc qdisc show dev eth0


是的, 我就是加了 root的 htb 队列然后show了一下 ok的。

我看到下面论坛 rudy的设置简单也不错,大概有点知道他在做什么,不知道哪位能指点下,等下附上我的理解和问题 谢谢。
http://forum.openwrt.org/viewtopic.php?id=4112&p=1

Rudy's script:
  1. #!/bin/sh
  2. #configuration
  3. DOWNLOAD=500
  4. UPLOAD=85
  5. TCP_BULK="1024: 21"
  6. UDP_BULK="1024:"
  7. TCP_PRIO="22 23 80 443"
  8. UDP_PRIO=""
  9. TCP_EXPR="53 1723"
  10. UDP_EXPR=""
  11. MTU=1492
  12. #end configuration
  13. QOS_IF=ppp0
  14. DBURST_D=10
  15. DBURST_U=10
  16. MIN_RATE=10
  17. insmod imq >&- 2>&-
  18. insmod ipt_IMQ >&- 2>&-
  19. insmod ipt_length >&- 2>&-
  20. iptables -t mangle -F
  21. iptables -t mangle -X
  22. ip link set imq0 up
  23. sed -n 's/ *\(.*\):.*/\1/p' /proc/net/dev | while read INTERFACE; do
  24. tc qdisc del dev $INTERFACE root >&- 2>&-
  25. done
  26. BURST_U=$(($DBURST_U*$UPLOAD/8))
  27. [ $BURST_U -lt $((1*$MTU)) ] && BURST_U=$((1*$MTU))
  28. RTOQ_U=$(($MIN_RATE*$UPLOAD*10/(8*$MTU)))
  29. [ $RTOQ_U -gt 20 ] && RTOQ_U=20
  30. [ $RTOQ_U -eq 0 ] && RTOQ_U=1
  31. tc qdisc add dev $QOS_IF root handle 1: htb default 40 r2q $RTOQ_U
  32. tc class add dev $QOS_IF parent 1: classid 1:1 htb rate ${UPLOAD}kbit ceil ${UPLOAD}kbit burst $(($BURST_U*3)) cburst $(($BURST_U*3)) mtu $MTU
  33. tc class add dev $QOS_IF parent 1:1 classid 1:10 htb rate $(($UPLOAD*5/10))kbit ceil ${UPLOAD}kbit burst $(($BURST_U*1)) cburst $(($BURST_U*1)) prio 1 mtu $MTU
  34. tc class add dev $QOS_IF parent 1:1 classid 1:20 htb rate $(($UPLOAD*2/10))kbit ceil ${UPLOAD}kbit burst $(($BURST_U*1)) cburst $(($BURST_U*1)) prio 2 mtu $MTU
  35. tc class add dev $QOS_IF parent 1:1 classid 1:30 htb rate $(($UPLOAD*2/10))kbit ceil ${UPLOAD}kbit burst $(($BURST_U*1)) cburst $(($BURST_U*1)) prio 3 mtu $MTU
  36. tc class add dev $QOS_IF parent 1:1 classid 1:40 htb rate $(($UPLOAD*1/10))kbit ceil ${UPLOAD}kbit burst $(($BURST_U*1)) cburst $(($BURST_U*1)) prio 4 mtu $MTU
  37. tc qdisc add dev $QOS_IF parent 1:10 sfq quantum $MTU perturb 10
  38. tc qdisc add dev $QOS_IF parent 1:20 sfq quantum $MTU perturb 10
  39. tc qdisc add dev $QOS_IF parent 1:30 sfq quantum $MTU perturb 10
  40. tc qdisc add dev $QOS_IF parent 1:40 sfq quantum $MTU perturb 10
  41. tc filter add dev $QOS_IF parent 1: prio 1 protocol ip handle 1 fw flowid 1:10
  42. tc filter add dev $QOS_IF parent 1: prio 2 protocol ip handle 2 fw flowid 1:20
  43. tc filter add dev $QOS_IF parent 1: prio 3 protocol ip handle 3 fw flowid 1:30
  44. tc filter add dev $QOS_IF parent 1: prio 4 protocol ip handle 4 fw flowid 1:40
  45. BURST_D=$(($DBURST_D*$DOWNLOAD/8))
  46. [ $BURST_D -lt $((1*$MTU)) ] && BURST_D=$((1*$MTU))
  47. RTOQ_D=$(($MIN_RATE*$DOWNLOAD*10/(8*$MTU)))
  48. [ $RTOQ_D -gt 20 ] && RTOQ_D=20
  49. [ $RTOQ_D -eq 0 ] && RTOQ_D=1
  50. tc qdisc add dev imq0 root handle 1: htb default 40 r2q $RTOQ_D
  51. tc class add dev imq0 parent 1: classid 1:1 htb rate ${DOWNLOAD}kbit ceil ${DOWNLOAD}kbit burst $((BURST_D*3)) cburst $((BURST_D*3)) mtu $MTU
  52. tc class add dev imq0 parent 1:1 classid 1:10 htb rate $(($DOWNLOAD*5/10))kbit ceil ${DOWNLOAD}kbit burst $((BURST_D*1)) cburst $((BURST_D*1)) prio 1 mtu $MTU
  53. tc class add dev imq0 parent 1:1 classid 1:20 htb rate $(($DOWNLOAD*2/10))kbit ceil ${DOWNLOAD}kbit burst $((BURST_D*1)) cburst $((BURST_D*1)) prio 2 mtu $MTU
  54. tc class add dev imq0 parent 1:1 classid 1:30 htb rate $(($DOWNLOAD*2/10))kbit ceil ${DOWNLOAD}kbit burst $((BURST_D*1)) cburst $((BURST_D*1)) prio 3 mtu $MTU
  55. tc class add dev imq0 parent 1:1 classid 1:40 htb rate $(($DOWNLOAD*1/10))kbit ceil $(($DOWNLOAD*3/4))kbit burst $((BURST_D*1)) cburst $((BURST_D*1)) prio 4 mtu $MTU
  56. tc qdisc add dev imq0 parent 1:10 sfq perturb 10
  57. tc qdisc add dev imq0 parent 1:20 sfq perturb 10
  58. tc qdisc add dev imq0 parent 1:30 sfq perturb 10
  59. tc qdisc add dev imq0 parent 1:40 sfq perturb 10
  60. tc filter add dev imq0 parent 1: prio 1 protocol ip handle 1 fw flowid 1:10
  61. tc filter add dev imq0 parent 1: prio 2 protocol ip handle 2 fw flowid 1:20
  62. tc filter add dev imq0 parent 1: prio 3 protocol ip handle 3 fw flowid 1:30
  63. tc filter add dev imq0 parent 1: prio 4 protocol ip handle 4 fw flowid 1:40
  64. iptables -t mangle -N mark_chain
  65. iptables -t mangle -N egress_chain
  66. iptables -t mangle -N ingress_chain
  67. iptables -t mangle -A POSTROUTING -o $QOS_IF -j egress_chain
  68. iptables -t mangle -A FORWARD -i $QOS_IF -j ingress_chain
  69. iptables -t mangle -A FORWARD -i $QOS_IF -j IMQ --todev 0
  70. iptables -t mangle -A INPUT -i $QOS_IF -j ingress_chain
  71. iptables -t mangle -A INPUT -i $QOS_IF -j IMQ --todev 0
  72. iptables -t mangle -A mark_chain -m mark --mark 0 -j CONNMARK --restore-mark
  73. for PORT in $UDP_EXPR; do
  74. iptables -t mangle -A mark_chain -m mark --mark 0 -p udp --dport $PORT -j MARK --set-mark 1
  75. done
  76. for PORT in $TCP_EXPR; do
  77. iptables -t mangle -A mark_chain -m mark --mark 0 -p tcp --dport $PORT -j MARK --set-mark 1
  78. done
  79. for PORT in $UDP_PRIO; do
  80. iptables -t mangle -A mark_chain -m mark --mark 0 -p udp --dport $PORT -j MARK --set-mark 2
  81. done
  82. for PORT in $TCP_PRIO; do
  83. iptables -t mangle -A mark_chain -m mark --mark 0 -p tcp --dport $PORT -j MARK --set-mark 2
  84. done
  85. for PORT in $UDP_BULK; do
  86. iptables -t mangle -A mark_chain -m mark --mark 0 -p udp --dport $PORT -j MARK --set-mark 4
  87. done
  88. for PORT in $TCP_BULK; do
  89. iptables -t mangle -A mark_chain -m mark --mark 0 -p tcp --dport $PORT -j MARK --set-mark 4
  90. done
  91. iptables -t mangle -A mark_chain -m mark --mark 0 -j MARK --set-mark 3
  92. iptables -t mangle -A mark_chain -j CONNMARK --save-mark
  93. iptables -t mangle -A mark_chain -p icmp -j MARK --set-mark 1
  94. iptables -t mangle -A mark_chain -p ipv6-icmp -j MARK --set-mark 1
  95. [ "$UDP_LENGTH" -gt 0 ] && iptables -t mangle -A mark_chain -p udp -m length --length :$UDP_LENGTH -j MARK --set-mark 1
  96. iptables -t mangle -A ingress_chain -j mark_chain
  97. iptables -t mangle -A egress_chain -j mark_chain
  98. iptables -t mangle -A egress_chain -p tcp -m length --length :128 --tcp-flags SYN,RST,ACK ACK -j MARK --set-mark 1
  99. exit 0
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP