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

如何在Linux流量控制(tc)中通过ematch排除端口范围?,linux,filtering,ports,network-traffic,Linux,Filtering,Ports,Network Traffic,我目前在代码中遇到了一个问题。 我主要模拟两台计算机之间的连接,通过以太网桥(Raspberry Pi,Raspbian)连接。因此,我可以通过tc qdisc影响此连接的参数(如带宽、延迟等)。 正如您在下面的代码中所看到的,这很好 但现在我的问题是: 我还试图排除特定的端口范围,这意味着不受给定参数(延迟等)影响的端口 为此,我创建了两个prio乐队。prio波段0(更高优先级)处理我的端口排除(已在父根目录中)。 之后在prio波段1(低优先级),我通过netem降低延迟。 整个数据流

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

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


但现在我的问题是:


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

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

我在执行代码时没有遇到内核错误
但在键入
sudo tc filter show dev eth1后,我仅收到
筛选器父项1:protocol ip pref 1 basic
。 我的对手甚至没有被提及

我做错了什么?
你能解释一下为什么我没有得到预期的结果吗



这是我的代码(按正确的执行顺序):

父根
sudo tc qdisc add dev eth1根句柄1:prio bands 2 priomap 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基本匹配“cmp(0层传输lt 100的u16)和cmp(0层传输gt 800的u16)”流ID 1:1

  • 创建具有特定句柄的筛选器,该筛选器将端口100到800从prioband 1(受影响的数据包)中排除

波段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延迟200ms

  • 通过netem创建200ms的延迟



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

我做错了什么?
你能解释一下为什么我没有得到预期的结果吗



非常感谢您的帮助!谢谢你的努力!

~rotsechs

似乎我不得不忽略丢失的输出!然而,它工作得非常完美。
我建立了到以太网桥的SSH连接(通过MobaXterm)<之后,我对其设置了400毫秒的延迟。控制台输入按预期减速。

最后,我创建了过滤器并排除了从20到24的端口范围(SSH有端口22)

我的SSH连接延迟立即消失

看来我不得不忽略丢失的输出!然而,它工作得非常完美。
我建立了到以太网桥的SSH连接(通过MobaXterm)<之后,我对其设置了400毫秒的延迟。控制台输入按预期减速。

最后,我创建了过滤器并排除了从20到24的端口范围(SSH有端口22)

我的SSH连接延迟立即消失

你有没有可能在这个答案中发布你的最终脚本的基本知识?你有没有可能在这个答案中发布你的最终脚本的基本知识?