有谁知道是否可以使用 TC 从一个源接口镜像到多个接口?我做了以下事情:
- 我做的第一件事是在我的输入接口上创建一个入口队列
tc qdisc add dev e101-001-0 handle ffff: ingress
- 如果您需要删除 qdisc,您可以使用
tc qdisc del dev e101-001-0 [ root | ingress ]
- 如果您需要删除 qdisc,您可以使用
- 仔细检查您的队列,其句柄 ffff 是使用以下命令创建的
tc -s qdisc ls dev e101-001-0
- 接下来,我们要将所有流量从入口端口镜像到输出端口
tc filter add dev e101-001-0 parent ffff: protocol all u32 match u32 0 0 action mirred egress mirror dev e101-005-0
- 检查您的端口镜像是否出现在配置中
tc -s -p filter ls dev e101-001-0 parent ffff:
- 如果您需要删除过滤器,可以使用
tc filter del dev e101-001-0 parent ffff:
- 如果您需要删除过滤器,可以使用
- 将队列设置为不调整流量
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
这是一种解决方法,但我意识到我可以将流量输送到一座桥上,这实际上起到了同样的作用。不过,我愿意接受更好的建议。