如何在 Linux 流量控制 (tc) 中通过 ematch 排除端口范围?
How to exclude port ranges via ematch in Linux traffic control (tc)?
我的代码目前遇到问题。
主要是模拟两台计算机之间的连接,通过以太网桥连接(Raspberry Pi、Raspbian)。因此,我可以通过 tc qdisc 影响此连接的参数(如带宽、延迟等)。
正如您在下面的代码中看到的那样,效果很好。
但现在我的问题是:
我也在尝试排除特定的端口范围,这意味着不受我给定参数(延迟等)影响的端口。
为此,我创建了两个 prio 乐队。 prio band 0(更高优先级)处理我的端口排除(已经在父根目录中)。
之后在 prio band 1(较低优先级)中,我通过 netem 拒绝延迟。
整个数据流量将通过我受影响的 prio band 1,其余(排除的数据)将通过 prio band 0 不受影响。
我在执行代码时没有遇到内核错误!
但是我在输入[=12=后只收到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
- 这将创建两个 priobands(1:1 和 1:2)
BAND 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 毫秒的延迟
Here you can see my hierarchy as an image
The question again:
My filter match is not even mentioned.
What did I wrong?
Can you explain me why I don't get my excpected output?
感谢任何帮助!感谢您的努力!
~rotsechs
看来我不得不忽略丢失的输出!然而,它工作得很好。
我建立了到我的以太网桥的 SSH 连接(通过 MobaXterm)。
后来我在上面设置了400ms的延迟。控制台输入按预期减慢。
最后我创建了过滤器并排除了从 20 到 24 的端口范围(SSH 有端口 22)。
我的 SSH 连接的延迟立即消失了!
我的代码目前遇到问题。
主要是模拟两台计算机之间的连接,通过以太网桥连接(Raspberry Pi、Raspbian)。因此,我可以通过 tc qdisc 影响此连接的参数(如带宽、延迟等)。 正如您在下面的代码中看到的那样,效果很好。
但现在我的问题是:
我也在尝试排除特定的端口范围,这意味着不受我给定参数(延迟等)影响的端口。
为此,我创建了两个 prio 乐队。 prio band 0(更高优先级)处理我的端口排除(已经在父根目录中)。
之后在 prio band 1(较低优先级)中,我通过 netem 拒绝延迟。
整个数据流量将通过我受影响的 prio band 1,其余(排除的数据)将通过 prio band 0 不受影响。
我在执行代码时没有遇到内核错误!
但是我在输入[=12=后只收到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
- 这将创建两个 priobands(1:1 和 1:2)
BAND 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 毫秒的延迟
Here you can see my hierarchy as an image
The question again:
My filter match is not even mentioned.
What did I wrong?
Can you explain me why I don't get my excpected output?
感谢任何帮助!感谢您的努力!
~rotsechs
看来我不得不忽略丢失的输出!然而,它工作得很好。
我建立了到我的以太网桥的 SSH 连接(通过 MobaXterm)。
后来我在上面设置了400ms的延迟。控制台输入按预期减慢。
最后我创建了过滤器并排除了从 20 到 24 的端口范围(SSH 有端口 22)。
我的 SSH 连接的延迟立即消失了!