为特定 UDP 端口流量添加 VLAN 标签

为特定 UDP 端口流量添加 VLAN 标签

我在 Ubuntu12.04 中运行一个我编写的应用程序,它可以进行一些远程交换机管理。我只有一个 NIC 连接到托管交换机网络,eth0,它设置为 IPv4 10.0.0.1/24。这个 IPv4 地址是这台 Ubuntu 机器可以使用的唯一地址,因为这是分配给 Ubuntu 机器的唯一“全局”可路由地址(由于某些网络管理,而不是由于技术问题......)

我需要交换机管理流量(通过 SSH 的 NetConf,使用 UDP 端口 830)包含 802.1q VLAN 标记(VLAN ID 为 444),当发送 NetConf 帧时,回复也将使用此标记接收。所有其他流量(http、ftp、dhcp、snmp 等)将使用不带 VLAN 标记的 eth0。

我尝试在 eth0 上使用 VLAN 接口 eth0.444,但发送的流量似乎不包含 VLAN 标签。

我能否(以及如何)使用 ebtables/iptables 为特定 UDP 端口流量添加特定 VLAN 标签?ebtables/iptables 解决方案是否也适用于接收路径?

谢谢你!

大卫

答案1

iptables并且ebtables不能在数据包上设置 VLAN 标签。这就是 VLAN 子接口的用途。

有一个Ubunut wiki 上讨论 VLAN 的文章您可能需要查看。但总而言之,您需要:

  • 确保 802.1q 模块已加载modprobe 8021q

  • 使用 创建 VLAN 子接口vconfig add eth0 444

  • 使用以下命令将 VLAN 444 中使用的子网的 IP 地址和子网掩码添加到eth0.444子接口:ip addr add x.x.x.x/z dev eth0.444

您还需要配置服务器所连接的交换机端口,以接受 VLAN 444 的标记帧。您没有提到交换机的品牌,因此我无法提供太多指导,但您可能正在寻找配置为 VLAN 444 的标记成员和分配给接口的子网所使用的任何 VLAN 的未标记成员的“中继”或“通用”端口eth0

tcpdump注意显示 VLAN 标签时有问题tcpdump因此,如果您只是在主机本身上使用来验证帧是否被标记,则不一定假设帧没有被标记。

编辑:

通常,VLAN 和 IP 子网之间存在一对一关系。如果交换机在 VLAN 444 中有一个管理接口,并且该接口与当前eth0端口所在的 VLAN 属于同一个 IP 子网,那就非常不典型了。

答案2

802.1Q 标签插入到 MAC 标头中,如果您的接口未带 VLAN 标签,内核将不会对其进行解码。因此,即使您可以破坏传出的数据包,带有 VLAN 标签的传入流量仍将被忽略。

您需要做的是创建一个 VLAN 标记接口,就像您所做的那样,然后在您尝试访问的交换机 IP 所在的相同范围内向其添加一个 IP。

相关内容