首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux 流量控制之 U32 过滤规则

Linux 流量控制之 U32 过滤规则

过滤器是对数据包进行分类工具 , 过滤器用与把数据包分类并放入相应的子队列 , 这些过滤器在分类的队列规定内部被调用 . 为了决定用哪个类处理数据包 , 必须调用所谓的"分类器链" 进行选择 . 这个链中包含了这个分类队列规定所需的所有过滤器 . 常用到的为 U32 过滤器
分类的一示例图: 当一个数据包入队的时候 , 每一个分支处都会咨询过滤器链如何进行下一步 . 典型的配置是在 1:1 处有一个过滤器把数据包交给 12:, 然后 12: 处的过滤器在把包交给 12:2. 你可以把后一个过滤器同时放在 1:1 处 , 而得到效率的提高 .
另外 , 你不能用过滤器把数据包向"上"送 . 而且 , 使用 HTB 的时候应该把所有的规则放到根上 ..
   注 : 数据包只能向"下"进行入队操作 ! 只有处队的时候才会上到网卡所在的位置来 . 他们不会落到树的最
底层后送到网卡 ...
清单 6. 过滤器过滤示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip dport 22 0xffff flowid 10:1
    在 10: 节点添加一个过滤规则 , 优先权 1: 凡是去往 22 口 ( 精确匹配 ) 的 IP 数据包 , 发送到频道 10:1..
  #tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip sport 80 0xffff flowid 10:1
    在 10: 节点添加一个过滤规则 , 优先权 1: 凡是来自 80 口 ( 精确匹配 ) 的 IP 数据包 , 发送到频道 10:1..
  #tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2
    在 eth0 上的 10: 节点添加一个过滤规则 , 它的优先权是 2: 凡是上二句未匹配的 IP 数据包 , 发送到频道 10:2..
  #tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip dst 4.3.2.1/32 flowid 10:1
    去往 4.3.2.1 的包发送到频道 10:1 其它参数同上例
  #tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 1.2.3.4/32 flowid 10:1
    来自 1.2.3.4 的包发到频道 10:1
  #tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2
    凡上二句未匹配的包送往 10:2
  #tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 4.3.2.1/32 match
ip sport 80 0xffff flowid 10:1
    可连续使用 match, 匹配来自 1.2.3.4 的 80 口的数据包




常用到的过滤命令一览
1
#tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 -------




根据源 / 目的地址
源地址段 'match ip src 1.2.3.0/24'
目的地址段 'match ip dst 4.3.2.0/24'
单个 IP 地址 'match ip 1.2.3.4/32'
根据源 / 目的端口 , 所有 IP 协议
源 'match ip sport 80 0xffff' 0xffff 表所有数据包
目的 'match ip dport 80 0xffff'
根据 IP 协议 (tcp, udp, icmp, gre, ipsec)
icmp 是 1:'match ip protocol 1 0xff' 1 是根据 /etc/protocols 协议号来定
根据 fwmark
1
2
#iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6
      #tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:1




注 :handle 根据过滤器的不同 , 含义也不同
按 TOS 字段
1
#tc filter add dev ppp0 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff




flowid 1:4  选择交互和最小延迟的数据流 匹配大量传输 , 使用"0x08 0xff".
1
#tc filter add dev eth0 protocol ip parent 1:0 pref 10 u32 match u32 00100000 00ff0000




at 0 flowid 1:10 匹配那些 TOS 字段带有'最小延迟'属性的数据包
返回列表