我有一个跨度馈送,来自 Linux(Centos)盒的未寻址接口。eth4。跨度包含多个 VLAN。
我有一个应用程序,它可以随意从接口抓取数据包,但我们只能说该应用程序无法通过 vlan 进行过滤。
我想找到一种方法来做——真正的问题是——将流量从接口上取下来,过滤到一个 vlan,然后将有限量的流量作为可以像现在的 eth4 一样处理的“接口”返回到操作系统。
类似于tcpdump -nn -i eth4 vlan 345 -w - | ...
,但是我不是将其传送到另一个命令,而是需要将其作为界面呈现给我的应用程序。
此外,理想情况下,这个技巧只会复制数据包,或者更好的是复制内存中指向这些数据包的指针...而不是重新创建它们,因为会有一些性能考虑。
答案1
如果我正确理解了你的目标,你需要做两件事:
为 eth4 中的所有 VLAN 创建 VLAN 接口(
vconfig add eth4 345
添加虚拟接口 eth4.345,该接口只能承载来自 vlan 345 的流量)如果您需要对多个 vlan 执行此操作但将其公开为单个接口,请创建一个桥接接口 (
brctl addbr br0
),并将所有这些 eth4.XXX 接口都绑定到该桥接接口 ( )。通过设置通用 L2“丢弃”过滤器 ( ),brctl addif br0 eth4.345; brctl addif br0 eth4.999
确保桥接代码实际上不会在接口之间转发流量。ebtables -P FORWARD DROP
您还没有向我们提供有关您的分布等的任何详细信息,因此有关如何执行这两件事的具体信息将需要留给 Google 来为您解决。