https://wiki.openwrt.org/doc/howto/packet.scheduler/packet.scheduler
如果命令怕麻烦的话,可以把openwrt换成其他的linux路由系统,比如“WFilter上网行为管理系统”,里面的流控功能配置起来就很简单。
tc是英文traffic control的简称,即流量控制,主要用于控制网卡流量,包括流量限速、流量整形等。
tc命令可以轻松的实现基于单个ip限速的功能,但如果要实现基于ip组(如192.168.0.10-192.168.0.20)的限速,需要结合iptables命令。因为tc没有匹配ip range模块,而iptables支持匹配ip range。二者可以通过mark来标记数据报文。
通过iptables在POSTROUTING链打规则匹配ip组,并根据组id给数据包打mark,tc规则匹配mark进行分类。由于tc规则匹配是在发送数据包位置,所以tc可以识别iptables标记。
iptables命令需要依赖iprange模块,注意检查内核模块是否已经选上。
命令
iptables -t mangle -A POSTROUTING -m iprange --dst-range 192.168.0.2-192.168.0.200 -j MARK --or-mark 0x1
iptables -t mangle -A POSTROUTING -m iprange --src-range 192.168.0.2-192.168.0.200 -j MARK --or-mark 0x1
--dst-range 为目的地址段,即下行数据报文匹配,出口为lan接口
--src-range 为源地址段,即上行数据报文匹配,出口为wan接口
--or-mark 用于以或的关系设置mark,因为mark可能提前被提前设置过,如之前的mark为0x0100,通过--or-mark设置0x1后mark为0x0101,不会影响之前设置的mark,注意匹配是用掩码按位匹配。
举个例子:
0x0100 --or-mark(0x1) = 0x0101
0x0100 --or-mark(0x2) = 0x0102
而如果是--set-mark,会清楚之前的mark
0x0100 --set-mark(0x1) = 0x0001
0x0100 --set-mark(0x2) = 0x0002
上行接口为eth1(wan口物理接口,如果是pppoe拨号也适用,因为ppp虚接口最终要走eth接口发包出去)
下行接口为br-lan,lan侧可能有无线接口eth0、无线接口wlan0等,所以这里规则设置在br-lan接口
tc qdisc add dev br-lan root handle 1:0 htb default 999
tc class add dev br-lan parent 1:0 classid 1:1 htb rate 2Mbit ceil 2Mbit
tc class add dev br-lan parent 1:0 classid 1:999 htb rate 100Mbit ceil 100Mbit
tc filter add dev br-lan parent 1:0 prio 10 handle 0x1/0xff fw classid 1:1
注意查看tc规则是否匹配可以观察tokens变化情况。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)