vconfig 不使用 vlan 标签标记传出的数据包(Ubuntu)

vconfig 不使用 vlan 标签标记传出的数据包(Ubuntu)

我正在尝试在我的桌面 ubuntu 机器上试验 VLAN 接口。桌面只有一个接口 (eth0) 连接到公司 LAN。使用 vconfig 创建 VLAN 接口后,在接口上运行 wireshark 不会显示带有 VLAN 标记的传出数据包。以下是我所做的:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 84:2b:2b:87:2c:87  
          inet addr:192.168.0.126  Bcast:192.168.0.255  Mask:255.255.255.0
          etc...

然后我添加 vlan 接口:

$ sudo vconfig add eth0 55
$ sudo ifconfig eth0.55 192.168.10.100 netmask 255.255.255.0 up
$ sudo ifconfig eth0.55 mtu 1412
$ ifconfig -a

eth0      Link encap:Ethernet  HWaddr 84:2b:2b:87:2c:87  
          inet addr:192.168.0.126  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::862b:2bff:fe87:2c87/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12195 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7435 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6831057 (6.8 MB)  TX bytes:1138706 (1.1 MB)
          Interrupt:18 

eth0.55   Link encap:Ethernet  HWaddr 84:2b:2b:87:2c:87  
          inet addr:192.168.10.100  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::862b:2bff:fe87:2c87/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1412  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:168 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:23515 (23.5 KB)

到目前为止一切顺利...以下是其他相关信息:

$ sudo cat /proc/net/vlan/eth0.55
eth0.55  VID: 55     REORDER_HDR: 1  dev->priv_flags: 1
         total frames received            0
          total bytes received            0
      Broadcast/Multicast Rcvd            0

      total frames transmitted          170
       total bytes transmitted        23697
Device: eth0
INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0
 EGRESS priority mappings: 



$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 3317 packets, 2230K bytes)
 pkts bytes target     prot opt in     out     source     destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source     destination         

Chain OUTPUT (policy ACCEPT 1528 packets, 189K bytes)
 pkts bytes target     prot opt in     out     source     destination         




$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0.55

现在我尝试 ping 192.168.10.xx 范围内一些不存在的机器:

$ ping -I eth0.55 192.168.10.101

但是,当使用 wireshark 或 tcpdump 捕获此接口时,我看到正常的 arp 消息被发送出去。它们没有标记 vlan。(我在这里感兴趣的是首先看看我是否可以从我的机器中获取 vlan 数据包……稍后将使用实际的 vlan)。我还可以从同一台机器上的 vbox VM ping eth0.55 接口。

$ sudo /usr/sbin/tcpdump -vv -i eth0.55
tcpdump: listening on eth0.55, link-type EN10MB (Ethernet), capture size 65535 bytes
11:55:52.625984 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.101 tell 192.168.10.100, length 28
11:55:53.625983 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.101 tell 192.168.10.100, length 28

我甚至尝试了 set_flag 命令,但仍然不行:

$ sudo vconfig set_flag eth0.55 0

我错过了什么?

答案1

这是一个类似的问题:通过 tcpdump 捕获的数据包(Linux)中未显示 VLAN 标签

实际上,您在使用 tcpdump 时看到的是内核过滤的数据包,其中 vlan 层被删除,因此它看起来总是未标记的。

您已经看到了通过它传输的帧,/proc/net/vlan/eth0.55因此它运行得非常好。

根据您的情况,使用此命令查看VLAN标签:

tcpdump -Uw - | tcpdump -i eth0 -en -r - vlan 55

答案2

要查看实际的802.1q标签,请尝试在底层物理接口(即eth0数据包进出的地方)上进行捕获。

答案3

您可能不会错过任何东西。
当接口上没有 vlan 时,您可以使用 tcpdump 查看 802.1q 标签。
当您将 vlan 添加到接口时,8021q 模块启用硬件加速,然后...您停止查看标签。您将在子接口上看到分离的流量,但主接口上的 tcpdump 显示来自全部带有剥离标签的子接口。
如果您有现代的,ethtool那么您可以查看ethtool -k eth0输出,您可以尝试禁用加速ethtool -K eth0 rxvlan off; ethtool -K eth0 txvlan off;(说实话 - 我从来没有测试过它是否有帮助查看标签并且现在无法访问好的实验室主机进行检查)。
但我认为你应该只配置其余的基础设施并尝试查看它是否按预期工作(在另一台未加载 8021q 模块的机器上查看标记的 arp 请求)。

相关内容