使用 tc qdisc、class 和 filter 根据 DSCP 标记限制带宽(入口和出口)

使用 tc qdisc、class 和 filter 根据 DSCP 标记限制带宽(入口和出口)

我正在寻找设置流量整形程序,该程序基于 IPv4 数据包头中的 6 位 DSCP 字段来限制传入和传出流量。用户应该能够为不同的 DSCP 值指定不同的速率。我正在使用 tc 和 iptables 来执行此操作。

到目前为止,我尝试了以下流程来调整传出流量。我根据 DSCP 值标记传入数据包,然后将这些数据包过滤到用户指定的具有不同速率的特定类别。我会为每个可能的 DSCP 值设置一个标记和类别。以下调整传出流量的方法有效吗?

iptables -t mangle -A PREROUTING -m dscp --dscp <value> -j MARK --set-mark <value>

tc filter add dev eth0 parent 1:0 protocol ip handle <value> fw classid 1:<value>

tc qdisc add dev eth0 root handle 1: htb default <default class>
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
tc class add dev eth0 parent 1:1 classid 1:<value> htb rate <user specified rate>mbit ceil 100mbit

但是,我在使用类似过程调整传入流量时遇到了一些困难。到目前为止,我所采用的方法在此链接中进行了描述:Tc:入口监管和 ifb 镜像。但是,我担心的是,入口流量在 iptables 标记之前就被转发了。这意味着 ifb0 的所有流量都将被转发到默认类。

有没有一种方法可以基于数据包的 DSCP 标记来过滤数据包,而不使用 iptables,而只使用 tc(或其他进程)?

此外,还有其他方法可以限制传入流量吗?我认为入口 qdisc 没有类功能,这使我很难为不同的 DSCP 值设置特定的速率。

相关内容