使用 TC 镜像到多个端口?

使用 TC 镜像到多个端口?

有谁知道是否可以使用 TC 从一个源接口镜像到多个接口?我做了以下事情:

  1. 我做的第一件事是在我的输入接口上创建一个入口队列tc qdisc add dev e101-001-0 handle ffff: ingress
    1. 如果您需要删除 qdisc,您可以使用tc qdisc del dev e101-001-0 [ root | ingress ]
  2. 仔细检查您的队列,其句柄 ffff 是使用以下命令创建的tc -s qdisc ls dev e101-001-0
  3. 接下来,我们要将所有流量从入口端口镜像到输出端口tc filter add dev e101-001-0 parent ffff: protocol all u32 match u32 0 0 action mirred egress mirror dev e101-005-0
  4. 检查您的端口镜像是否出现在配置中tc -s -p filter ls dev e101-001-0 parent ffff:
    1. 如果您需要删除过滤器,可以使用tc filter del dev e101-001-0 parent ffff:
  5. 将队列设置为不调整流量tc qdisc add dev e101-001-0 handle 1: root prio

这让它可以输出到一个接口,但我注意到,如果我添加另一个带有新接口的过滤器,第一个接口将停止接收流量,并且所有流量都会发送到新接口。

答案1

ATC行动可以附加一个控制运算符来改变对数据包的进一步处理:

CONTROL
CONTROL 指示执行操作后tc 应如何继续。以下任何一项均有效:

reclassify
通过跳回附加到操作父级的第一个过滤器来重新启动分类。

管道
继续下一步动作。这是默认控件。

drop
丢弃打包的内容而不运行任何进一步的操作。

继续
使用下一个过滤器继续分类。

pass
返回调用qdisc进行数据包处理,并结束该数据包的分类。

似乎在匹配过滤器之后,不再评估进一步的过滤器。

你可以简单地做什么:

  • 您可以结合(管道)对同一个过滤器进行多个操作(假设第二个镜像接口被称为e101-006-0):

    tc filter add dev e101-001-0 ingress u32 match u32 0 0 action mirred egress mirror dev e101-005-0 pipe action mirred egress mirror dev e101-006-0
    
  • 相反,您还可以链接多个过滤器(使用操作的继续控制)。然后一个明确的优先级/优先级应该给出,因为过滤器的顺序很重要:具有以下操作的过滤器继续必须首先评估控制。

    tc filter add dev e101-001-0 ingress pref 1 u32 match u32 0 0 action mirred egress mirror dev e101-005-0 continue
    tc filter add dev e101-001-0 ingress pref 2 u32 match u32 0 0 action mirred egress mirror dev e101-006-0
    

    例如,如果您希望在两个操作之间使用不同的过滤器(例如:一个可以匹配协议IP另一个协议 IPv6)。

答案2

这是一种解决方法,但我意识到我可以将流量输送到一座桥上,这实际上起到了同样的作用。不过,我愿意接受更好的建议。

相关内容