如何在 Linux 流量控制 (tc) 中通过 ematch 排除端口范围



我目前在代码中遇到了问题。

主要是,我模拟两台计算机之间的连接,通过以太网桥(Raspberry Pi,Raspbian)连接。所以我能够通过 tc qdisc 影响此连接的参数(如带宽、延迟等)。这很好用,正如您在下面的代码中看到的那样。


但是现在到我的问题:


我还试图排除特定的端口范围,这意味着不受我给定参数(延迟等)影响的端口。

为此,我创建了两个prio乐队。prio 频段 0(优先级更高)处理我的端口排除(已在父根目录中)。之后在 prio 频段 1(优先级较低)中,我通过 netem 拒绝延迟。
整个数据流量将通过我受影响的 prio 频段 1,其余(排除的数据)将不受影响地通过 prio 频段 0。

我在执行代码时没有收到内核错误!
但我只在输入sudo tc filter show dev eth1后收到filter parent 1: protocol ip pref 1 basic.我的比赛甚至没有被提及。

我做错了什么?
你能解释一下为什么我没有得到我的输出吗?



这是我的代码(按正确的执行

顺序):

父根目录

sudo tc qdisc add dev eth1 root handle 1: prio bands 2 priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • 这将创建两个 prioband(1:1 和 1:2)

频段 0 [端口排除 | 端口 100 - 800]

sudo tc qdisc add dev eth1 parent 1:1 handle 10: tbf rate 512kbit buffer 1600 limit 3000

  • 创建 tbf(令牌桶筛选器)以设置带宽

sudo tc filter add dev eth1 parent 1: protocol ip prio 1 handle 0x10 basic match "cmp(u16 at 0 layer transport lt 100) and cmp(u16 at 0 layer transport gt 800)" flowid 1:1

  • 创建具有特定句柄的筛选器,该筛选器从 prioband 1(受影响的数据包

    )中排除端口 100 到 800

波段 1 [净模拟]

sudo tc qdisc add dev eth1 parent 1:2 handle 20: tbf rate 1024kbit buffer 1600 limit 3000

  • 与上面的 tbf 比较

sudo tc qdisc add dev eth1 parent 20:1 handle 21: netem delay 200ms

  • 通过 netem 创建 200 毫秒

    的延迟

在这里,您可以看到我的层次结构作为图像

问题又来了:
甚至没有提到我的过滤器匹配。

我做错了什么?
你能解释一下为什么我没有得到我的输出吗?



我感谢任何形式的帮助!感谢您的努力!
~罗塞赫斯

看来我必须忽略缺少的输出!尽管如此,它仍然完美地工作。
我建立了与以太网网桥的SSH连接(通过MobaXterm)。
之后,我在上面放置了 400 毫秒的延迟。控制台输入按预期减慢。
最后,我创建了过滤器并排除了从 20 到 24 的端口范围(SSH 有端口 22)。

我的SSH连接的延迟立即消失了!

最新更新