使用 Tap 虚拟接口检查数据包 VLAN 标签

使用 Tap 虚拟接口检查数据包 VLAN 标签

我正在尝试学习如何使用 Tap 驱动程序实现虚拟接口。

到目前为止,我的理解是,使用 tap 驱动程序,我可以创建一个虚拟接口,然后让用户空间程序附加到该接口来分析进入该设备的数据。

现在,如果我使用 TRUNK 链路将思科交换机连接到我的 LAN 接口,将进入 LAN 接口的所有数据包转发到虚拟分接接口,然后在连接到此接口的程序中执行一些编码来分析数据包中的 vlan 标记并只允许某些 vlan 转发到 WAN 接口?

这听起来合理吗或者我的基本理解有缺陷?


更新:现在我已经玩得更多了,但我还有几个问题:

因此,我创建了接收数据包的 tun 接口 (tun0)。对于这些数据包,我根据以太网帧中的“SRC MAC 地址”进行一些过滤(允许/丢弃)。问题是,我现在如何将允许的数据包发送到我的一个 WAN 接口 (eth0)?

答案1

这当然是可能的,而且实际上可以使用现有的内核模块来实现这一点:

LAN -> (nic 模块) -> (dot1q 模块) -> (bridge 模块) -> (dot1q 模块) -> (nic 模块) -> WAN

或者:

eth0 -> eth0.10 -> br0 -> eth1.20 -> eth1

(将标记为 vlan 10 的所有内容从 eth0 中取出,将其重新标记为 vlan 20 并将其推出 eth1,反之亦然。可以使用 ebtables 进行额外的访问控制。)

如果不需要更改标签,则可以简化为:

eth0->br0->eth1

并将 ebtables 应用于 br0。

也就是说,如果您的应用程序可以在内部执行“eth0.10 -> br0 -> eth1.20”部分,那么它不需要 tap 设备来执行此操作,因为您可以从一个接口读取帧、过滤并写入另一个接口。

相关内容