区分Internet和Local数据流的Qos实现

区分Internet和Local数据流的Qos实现

需求

区分广域网和局域网的流量控制

实现分析

假设sta1链接在ath00接口

可能的上行流量

可能的下行流量

需要给ath00, ath10, eth0 TX方向设置QoS

默认每个接口上创建两个静态类别,通过过滤器将广域网和局域网流量分在这两个类别里, 并在两个静态类别下创建另外两个子队列,在子队列下创建过滤器来区分STA

为ath00/ath10创建静态队列,类别和过滤器

  1. 为ath00创建HTB队列,默认类别1:30,为来自WAN的流量。
tc qdisc add dev ath00 root handle 1: htb default 30
  1. 为根队列1:,创建一个根类,和两个子类别,1:30, 1:31,它们不独占带宽,按照1:1借用最大带宽
tc class add dev ath00 parent 1:0 classid 1:1 htb rate 500mbit ceil 500mbit burst 150k
tc class add dev ath00 parent 1:1 classid 1:30 htb rate 12kbit ceil 500mbit burst 150k
tc class add dev ath00 parent 1:1 classid 1:31 htb rate 12kbit ceil 500mbit burst 150k
  1. 为类别创建过滤器, 类别1:31来自LAN的流量
tc filter add dev ath00 protocol ip parent 1:0 prio 3 u32 match ip src 10.0.0.0/8 flowid 1:31
tc filter add dev ath00 protocol ip parent 1:0 prio 2 u32 match ip src 172.16.0.0/12 flowid 1:31
tc filter add dev ath00 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.0.0/16 flowid 1:31
  1. 在1:30下创建个子队列30:,并为子队列创建默认类别, 来自WAN的流量默认进入301:队列
tc qdisc add dev ath00 parent 1:30 handle 30: htb default 30
tc class add dev ath00 parent 30:0 classid 30:1 htb rate 500mbit ceil 500mbit burst 150k
tc class add dev ath00 parent 30:1 classid 30:30 htb rate 12kbit ceil 500mbit burst 150k
tc qdisc add dev ath00 parent 30:30 handle 301: sfq perturb 10
  1. 在1:31下创建个子队列31:,并为子队列创建默认类别, 来自LAN的流量默认计入311:队列
tc qdisc add dev ath00 parent 1:31 handle 31: htb default 30
tc class add dev ath00 parent 31:0 classid 31:1 htb rate 500mbit ceil 500mbit burst 150k
tc class add dev ath00 parent 31:1 classid 31:30 htb rate 12kbit ceil 500mbit burst 150k
tc qdisc add dev ath00 parent 31:30 handle 311: sfq perturb 10

为eth0创建队列,类别和过滤器

  1. 为eth0创建队列,默认类别1:30为去往WAN的流量
tc qdisc add dev eth0 root handle 1: htb default 30
  1. 创建类别
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 500mbit ceil 500mbit burst 150k
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 12kbit ceil 500mbit burst 150k
tc class add dev eth0 parent 1:1 classid 1:31 htb rate 12kbit ceil 500mbit burst 150k
  1. 创建过滤器,类别1:31为去往LAN的流量
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.0.0.0/8 flowid 1:31
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 172.16.0.0/12 flowid 1:31
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.0.0/16 flowid 1:31
  1. 在1:30下创建个子队列30:,并为子队列创建默认类别, 来自WAN的流量默认进入301:队列
tc qdisc add dev eth0 parent 1:30 handle 30: htb default 30
tc class add dev eth0 parent 30:0 classid 30:1 htb rate 500mbit ceil 500mbit burst 150k
tc class add dev eth0 parent 30:1 classid 30:30 htb rate 12kbit ceil 500mbit burst 150k
tc qdisc add dev eth0 parent 30:30 handle 301: sfq perturb 10
  1. 在1:31下创建个子队列31:,并为子队列创建默认类别, 来自LAN的流量默认计入311:队列
tc qdisc add dev eth0 parent 1:31 handle 31: htb default 30
tc class add dev eth0 parent 31:0 classid 31:1 htb rate 500mbit ceil 500mbit burst 150k
tc class add dev eth0 parent 31:1 classid 31:30 htb rate 12kbit ceil 500mbit burst 150k
tc qdisc add dev eth0 parent 31:30 handle 311: sfq perturb 10

为sta1创建上行WAN流量限速,在eth0 30: qdisc上

  1. 在eth0的30: qdisc(dst是WAN流向WAN的流量)类别下创建子类别30:100,限速(src是sta1)1mbit
tc class add dev eth0 parent 30:1 classid 30:100 htb rate 12kbit ceil 1mbit burst 15k
  1. 创建过滤器
tc filter add dev eth0 protocol ip parent 30:0 prio 1 u32 match ip src \sta1 ip\ flowid 30:100

为sta1创建下行WAN流量限速,在ath00 30: qdisc上

  1. 在ath00的30: qdisc(src是WAN,从WAN过来的流量)类别下创建子类别30:1,限速(dst是sta1)1mbit
tc class add dev ath00 parent 30:0 classid 30:1 htb rate 1mbit ceil 1mbit burst 15k
  1. 创建过滤器
tc filter add dev ath00 protocol ip parent 30:0 prio 1 u32 match ip dst \sta1 ip\ flowid 30:1

为sta1创建上行LAN流量限速,在eth0 31:, ath00/ath10 31: qdisc上

  1. 在eth0的31: qdisc(dst是LAN的,流向LAN的数据)类别下创建子类别31:1100,限速(src是sta1的)1mbit
tc class add dev eth0 parent 31:1 classid 31:1100 htb rate 12kbit ceil 1mbit burst 15k
  1. 创建过滤器
tc filter add dev eth0 protocol ip parent 31:0 prio 1 u32 match ip src \sta1 ip\ flowid 31:1100
  1. 在ath00/ath10的31: qdisc(src是LAN,从LAN过来的流量)类别下创建子类别31:1100,限速(src是sta1的)1mbit
tc class add dev ath00 parent 31:1 classid 31:1100 htb rate 12kbit ceil 1mbit burst 15k
  1. 创建过滤器
tc filter add dev ath00 protocol ip parent 31:0 prio 1 u32 match ip src \sta1 ip\ flowid 31:1100

为sta1创建下行LAN流量限速,在ath00 31: qdisc上

  1. 在ath00的31: qdisc(src是LAN的,从LAN过来的流量)类别下创建子类别31:1,限速(dst是sta1的)1mbit
tc class add dev ath00 parent 31:1 classid 31:100 htb rate 12kbit ceil 1mbit burst 15k
  1. 创建过滤器
tc filter add dev ath00 protocol ip parent 31:0 prio 1 u32 match ip dst \sta1 ip\ flowid 31:100

Reference

  1. TC
  2. Openwrt QoS
  3. HTB
  4. Linux Advanced Routing and Traffic Control

nicephil@gmail.com – 2017-12-6

posted on 2017-12-09 11:07  nicephil  阅读(364)  评论(0编辑  收藏  举报

导航