作者kuangs (kuangs)
看板Network
标题Re: [问答] 管制频宽问题??
时间Wed Jan 30 16:41:38 2013
※ 引述《kuangs (kuangs)》之铭言:
: 小弟正在尝试 利用Linux 来当路由器
: 配置为
: eth0 eth1 出Internet
: eth2 eth3 给LAN 使用
: 使用状况良好 目前想开始限制频宽
: 网路上查了一些资料 Iproute 的tc 指令可以达到这个功能
: 也亲自动手操作了 但是碰到一个问题
: 如果今天我想让eth0 & eth1 的总频宽 限制为2M
: 也就是说当eth0 无人使用时 eth1 的频宽可以到2M
: eth0 和 eth1 同时使用时 两条加起来也只能到2M
: 似乎无法达成??
: tc指令只能限制单一网卡(OR 可以达成但我没试出来??)
: 请问我该怎麽做??
在这里先谢谢回应的大大!!!
我去找了IMQ 的相关资料 自己也动手做了设定
证实了IMQ的确可以 达到一次管理多个介面的能力
由於我是利用网路上的范例去做修改
所以有几个地方知道怎麽设定却不知原理
也没找到关於TC指令的解说
导致与实际上需要的功能有落差
附上我的指令码 一起讨论 含网页注解
-----------------------------------------------------------------------------
#一开始就清除所有的伫列规则并且忽略错误讯息(2>/dev/null)
tc qdisc del dev imq9 root 2>/dev/null
#定义最顶层(根)伫列规则,并指定 default 类别编号
tc qdisc add dev imq9 root handle 10: htb default 20
# 定义第一层的 10:1 类别 (总频宽)
tc class add dev imq9 parent 10: classid 10:1 htb rate 300kbps ceil 300kbps
# 定义第二层叶类别(rate 保证频宽,ceil 最大频宽,prio 优先权)
tc class add dev imq9 parent 10:1 classid 10:10 htb rate 160kbps ceil 200kbps prio 0
tc class add dev imq9 parent 10:1 classid 10:20 htb rate 90kbps ceil 150kbps prio 1
tc class add dev imq9 parent 10:1 classid 10:30 htb rate 50kbps ceil 100kbps prio 2
#------定义各叶类别的伫列规则---------------
#parent 类别编号,handle 叶类别伫列规则编号
#因上面已经用htb来频宽管理了故後面用简单无qos的伫列规则piffo即可
tc qdisc add dev imq9 parent 10:10 handle 101: pfifo
tc qdisc add dev imq9 parent 10:20 handle 102: pfifo
tc qdisc add dev imq9 parent 10:30 handle 103: pfifo
#---------------set filter--------------------------
#FW可以依标签将封包分类
#指定贴有 10 标签 (handle) 的封包,归类到 10:10 类别,以此类推
tc filter add dev imq9 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev imq9 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
#---------------set iptables mangle-----------------
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 9
iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 9
--------------------------------------------------------------------------
1.tc class 可以只设定第一层而不设定第二层吗??
2.保证频宽可否为 0 意思是不给使用者保证频宽
3.原本的范例有这条
iptables -t mangle -A POSTROUTING -d 192.168.1.123 -j MARK --set-mark 30
但是我并没有下 改成 把eth0 导向 imq9 所以没有handle 的问题
产生下面两个问题
a.qdisc 这一层的功用是如何?? 测试过如果没有三个指令都下无法限制流量
b.filter 同上 如果没有两个指令都设定无法限制流量
c.由於没有设定handle 所以应该不会跑进filter 和 qdisc ???
但是结果下载速度却只有50K~100K
跑进
tc class add dev imq9 parent 10:1 classid 10:30 htb rate 50kbps ceil 100kbps prio 2
这是甚麽原因??
依照指令码去执行 得到结果 下载约55~70K
原本无限速 下载约300K
不好意思 !!小第资质不好 在等大大们的指教前
还是会去网路上找资料 但网路上都是讲求速成
小第想要了解原理 与正确用法 还请大大们多多帮忙
※ 编辑: kuangs 来自: 218.211.253.68 (01/30 16:57)
1F:推 asadfish:XD,我很久没碰 tc 指定了,书在公司明天再帮你看IMQ。 01/30 18:38
3F:→ asadfish:这本算是国内书中 netfilter 说的比较有内容的… 01/30 18:41
4F:→ asadfish:也算是 IMQ 我唯一看过国内书有写到,还蛮详细的… 01/30 18:42
5F:推 asadfish:至於qdisc/class/filter的关系,他们可以说是一体有关联 01/30 18:46
7F:→ asadfish:关键字就用 tc 或 traffic control 就 ok 了。 01/30 18:46
8F:推 asadfish:1. class 可以只设定第一层,上面要有 qdisc 01/30 18:52
9F:→ asadfish:我没设定过rate为0,你可以试试,应该跟你想的一样 01/30 18:53
10F:推 asadfish:剩下的四五我再来弄lab(有时间的话),记得书要找第二版的 01/30 18:55
11F:→ asadfish:第一版没有tc..另外旗标也有一本但绝版,图书馆借一下 01/30 18:56
12F:推 asadfish:不过旗标那本主要是说tc,以htb为例,你懂了就不用找 01/30 18:58
13F:推 asadfish:另外 --set-mark 30 只有 50~100蛮正常的啊,你跑进了 01/30 19:02
14F:→ asadfish:handle 30 里面 01/30 19:02
15F:→ asadfish:handle 30 fw classid 10:30 → mark30的跑进10:30 01/30 19:03
16F:→ asadfish:classid 10:30 htb rate 50kbps ceil 100kbps 就跑到这了 01/30 19:04
17F:→ asadfish:另外如果你是要帮client QOS且上线,sfq 找一下 01/30 19:06
18F:→ asadfish:htb 有他的缺点在,你可以用 client 端开p2p然後ping就知 01/30 19:06
19F:→ asadfish:会有种先占先赢的fu,sfq 则是固定时间重新分配client上 01/30 19:07
20F:→ asadfish:的连线。 01/30 19:07
21F:推 asadfish:说错,把htb换成fifo...= =",牙痛一直没办法专注 01/30 19:11
22F:→ kuangs:谢谢大大精辟的解说!!我会再来试试看的 01/31 09:47
24F:→ zelda312:做法是在ingress建立一个virtual interface 02/01 02:15
25F:→ zelda312:将封包利用policer导到该interface(例ifb0) 02/01 02:16
26F:→ zelda312:然後在ifb0上做traffic control即可 02/01 02:17
27F:推 asadfish:楼上水唷 02/01 04:13