12.2.路由分类器

此分类器基于路由表的结果进行过滤。当一个数据包在类中传递时,如果到达一个被标记为“路由”过滤器的类,它将根据路由表中的信息拆分数据包。

# tc filter add dev eth1 parent 1:0 protocol ip prio 100 route

这里我们将一个路由分类器添加到父节点 1:0,优先级为 100。当数据包到达此节点(由于它是根节点,这将立即发生)时,它将查询路由表,如果找到匹配项,则将其发送到给定的类并赋予优先级 100。然后,为了最终启动它,您需要添加适当的路由条目

这里的技巧是基于目标或源来定义“realm”(域/区域/范围)。这样做的方法如下

# ip route add Host/Network via Gateway dev Device realm RealmNumber

例如,我们可以将目标网络 192.168.10.0 定义为域编号 10

# ip route add 192.168.10.0/24 via 192.168.10.1 dev eth1 realm 10

在添加路由过滤器时,我们可以使用域编号来表示网络或主机,并指定路由如何匹配过滤器。

# tc filter add dev eth1 parent 1:0 protocol ip prio 100 \
  route to 10 classid 1:10

上面的规则表示,去往网络 192.168.10.0 的数据包匹配类 ID 1:10。

路由过滤器也可以用于匹配源路由。例如,有一个子网连接到 Linux 路由器的 eth2 接口。

# ip route add 192.168.2.0/24 dev eth2 realm 2
# tc filter add dev eth1 parent 1:0 protocol ip prio 100 \
  route from 2 classid 1:2

这里的过滤器指定,来自子网 192.168.2.0(域 2)的数据包将匹配类 ID 1:2。