我负责一个基于
Linux(运行Debian)的分支机构路由器,该路由器采用单个高速Internet连接(eth2)并将其转换为大约20个内部网络,每个网络都有一个单独的子网(192.168.1.0/24到192.168) .20.0 / 24)和一个单独的VLAN(eth0.101到eth0.120).我试图限制一个内部子网上的带宽,这个子网一直在咀嚼比它应该更多的带宽.做这个的最好方式是什么?
我第一次尝试使用Wondershaper,我在SuperUser here上听说过.不幸的是,这对于我所拥有的相反情况很有用……它在客户端非常有用,而不是在Internet端.
我的第二次尝试是使用在http://www.topwebhosts.org/tools/traffic-control.php找到的脚本,我修改了它,因此活动部分是:
tc qdisc add dev eth0.113 root handle 13: htb default 100 tc class add dev eth0.113 parent 13: classid 13:1 htb rate 3mbps tc class add dev eth0.113 parent 13: classid 13:2 htb rate 3mbps tc filter add dev eth0.113 protocol ip parent 13:0 prio 1 u32 match ip dst 192.168.13.0/24 flowid 13:1 tc filter add dev eth0.113 protocol ip parent 13:0 prio 1 u32 match ip src 192.168.13.0/24 flowid 13:2
我想要做的是将VLAN 113(子网192.168.13.0/24)上的带宽限制为3mbit向上和3mbit向下.不幸的是,它似乎根本没有效果!我对tc命令非常缺乏经验,所以任何帮助这项工作都会受到赞赏.
解决方法
从开发人员引用试图做同样事情的人:
Doing traffic control on vlan’s may not work as expected because the vlan pseudo-device does not have any transmit queue.
由于您已经将规则编写到rate limit by subnet,因此需要让Linux对其进行速率控制.
我建议通过将VLAN置于桥接器中来解决这个问题(尽管为了保持一致性,您可能希望为每个VLAN创建一个桥接器):
brctl addbr br113 btctl addif br113 eth0.113
然后,您可以将您的tc规则应用于br113而不是eth0.113.
(配置/ etc / network / interfaces留给读者练习,如果有效的话……)
或者将流量控制规则应用于WAN接口eth2可能更简单;最终结果应该大致相同.