我正在通过本机 vlan 在传出数据包上为某些客户端 mac 插入 vlan 标签。我已经尝试过 nh_hooks IN、OUT 和 Forward,但没有取得任何成功。
我想要的是我可以将标签添加到从客户端到本机 vlan 的数据包中,然后通过同一个 vlan 发送它,或者我可以将本地 vlan 数据包从基于 MAC 的某些客户端转发到标记的 vlan 接口?
netlink 代码或内核级代码有什么建议吗?或者是否可以通过基于 MAC 的 ebtables 来做到这一点?
PC1 ---[SW1] ----[SW2] -----[SW3] ----PC3
[sw2] ---> PC2。[sw2 也连接到 PC2。
假设 SW2 是不支持 VLAN 的非 IEEE 802.1q 交换机。SW1、SW3 做支持。所有 PC 都在 VLAN 10 中。
中继端口上的 SW1/SW3 将发送 VLAN 10 数据包作为未标记数据包的内容,以便 PC2 可以理解。当 SW1/SW3 收到任何帧时,将其分类为 VLAN 10。默认的本地 VLAN 为 VLAN 1。
有问题的第一个错误:本机 VLAN 帧/数据包未标记地发送和接收。(无 4 字节 VLAN 标头)。
如果我理解正确,将未标记的本机 VLAN 转发到已标记的 VLAN 将配置 SW1 本机 VLAN 为 VLAN 10,将 SW3 本机 VLAN 配置为 Vlan 30。PC3 在 VLAN 30 中。vlan 10 将被转换为 VLAN 30 .
所以 PC1 中的 vlan 10 与 PC2 中的 untagged frame 和 PC3 中的 vlan 30 相同。
Linux 中的 VLAN 标记是通过使用子接口完成的,例如ip link add link eth0 name eth0.8 type vlan id 8
将标记的 VID 8 添加到 eth0,创建 eth0.8 子接口。
本机 VLAN 是未在中继/端口上标记的 VLAN,因此其在其他地方的 VLAN ID 取决于中继端点(交换机)在转发时是否以及如何标记帧。
在 VLAN 中继上,标签中的 VID 是帧正在运行的 VLAN。