我认为应该是一个相当直接的stream量整形问题,我有一些麻烦。
我有一个Ubuntu(16.04)服务器,充当路由器/ NAT。 我想让大多数用户使用2mbps的互联网,同时将一些设备限制在512kbps。
我有一个ipset
节stream设备的列表。 我试图--mark-set
来自这些设备的数据包,以便tc
可以通过stream量整形来标记它们。
我目前的设置是:
tc qdisc del root dev $LAN tc qdisc add dev $LAN root handle 1: htb default 20 tc class add dev $LAN parent 1: classid 1:1 htb rate 6mbit burst 15k tc class add dev $LAN parent 1:1 classid 1:10 htb rate 5mbit burst 15k tc class add dev $LAN parent 1:1 classid 1:20 htb rate 2mbit ceil 2mbit burst 15k tc class add dev $LAN parent 1:1 classid 1:30 htb rate 512kbit ceil 512kbit burst 15k tc qdisc add dev $LAN parent 1:10 handle 10: sfq perturb 10 tc qdisc add dev $LAN parent 1:20 handle 20: sfq perturb 10 tc qdisc add dev $LAN parent 1:30 handle 30: sfq perturb 10 tc filter add dev $LAN protocol ip parent 1: prio 1 handle 6 fw flowid 1:30 $IPS create throttled hash:mac -exist $IPS add throttled 00:11:22:33:44:55 -exist $IPT -A PREROUTING -t mangle -m set --match-set throttled src,dst -j MARK --set-mark 6
这不会节制我下降到512kbps(假设我的mac地址是提供的),它回落到默认的2mbps
如果我删除了--match-set
部分,它正确地将所有设备节stream到512kbps(这使我认为tc
部分是正确的)
但是,如果我DROP
匹配这个集合的数据包,它会正确地丢弃数据包(这使我认为iptables
部分是正确的)
我在这里错过了什么,或者这两个命令不能像这样一起使用?
任何帮助不胜感激。
谢谢,
有人认为…你的设备包含MAC地址,但我怀疑PREROUTING规则是试图匹配src或dst IP地址,而不是MAC地址。