使用Tap虚拟接口检查数据包vlan标记

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

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

现在如果我用一个TRUNK链接把一个cisco交换机连接到我的LAN接口上,将所有进入LAN接口的数据包转发到虚拟tap接口,然后在我的连接到这个接口的程序中做一些编码来分析数据包,只允许某些vlan被转发到WAN接口?

这听起来似乎合理吗?或者我的基本理解存在缺陷?


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

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

这当然是可能的,而且现在可以用现有的内核模块来做到这一点:

局域网 – >(nic模块) – >(dot1q模块) – >(网桥模块) – >(dot1q模块) – >(网卡模块) – >广域网

要么:

eth0 – > eth0.10 – > br0 – > eth1.20 – > eth1

(将eth0标记为vlan 10,将其重新标记为vlan 20,并将其推出eth1,反之亦然,可使用ebtables进行其他访问控制。

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

eth0 – > br0 – > eth1

并且将ebtables应用于br0。

也就是说,如果您的应用程序可以在内部执行“eth0.10 – > br0 – > eth1.20”,尽pipe它不需要点击设备来完成,因为您可以从一个界面读取帧,过滤和写入另一个。