通过tcpdump在数据包捕获(Linux)中未显示VLAN标签


15

我在eth0上添加了标记的VLAN:

#ip link add link eth0 name eth0.20 type vlan id 20

结果是:

#ip link
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 link/ether 9c:c7:a6:95:65:1c brd ff:ff:ff:ff:ff:ff
....
12: eth0.20@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
 link/ether 9c:c7:a6:95:65:1c brd ff:ff:ff:ff:ff:ff

#ip -d link show eth0.20
70: eth0.20@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 9c:c7:a6:95:65:1c brd ff:ff:ff:ff:ff:ff
    vlan id 20 <REORDER_HDR>

#cat /proc/net/vlan/config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.234       | 234  | eth0
eth0.20        | 20  | eth0

现在,我启动dhclient:

#dhclient -d -v -1 eth0.20

我在tcpdump中看到的是一个未标记的DHCP发现帧:

#tcpdump -i eth0 -XX
0x0000:  ffff ffff ffff 9cc7 a695 651c 0800 4500 
                                       ^^^^

为什么没有标记?

似乎使用了802.1q模块:

#lsmod | grep 8021q
8021q                  28324  0
garp                   14311  1 8021q

(操作系统:SLES11SP2内核3.0.13-0.27-默认)

BTW其他流量也未标记(至少tcpdump不显示它)...


10月16日更新

 # tcpdump -Uw - | tcpdump -i eth0 -en -r - &
[1] 7310
 # tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

 # dhclient -d -v -1 eth0.20
Internet Systems Consortium DHCP Client 4.2.3-P2
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0.20/9c:c7:a6:95:65:1c
Sending on   LPF/eth0.20/9c:c7:a6:95:65:1c
Sending on   Socket/fallback
DHCPDISCOVER on eth0.20 to 255.255.255.255 port 67 interval 3
reading from file -, link-type EN10MB (Ethernet)
18:49:14.437882 9c:c7:a6:95:65:1c > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 347: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 9c:c7:a6:95:65:1c, length 305
                                                                       ^^^^^^

因此,此处仍未显示标签。

但是确实在运行dhclient时/ proc / net / dev中eth0.20的传输计数器确实增加了...


您可以运行“ ip -d link show eth0.20”吗?
Danila Ladner

当然,我已经将信息添加到了问题中。
Marki

您确定流量也显示在没有VLAN标签的情况下吗?可能只是一些libpcap怪癖与VLAN接口的实现方式有关ip link
the-wabbit

好的,“ cat / proc / net / vlan / config”也是什么意思?
丹妮拉‧拉德纳

我用配置输出扩展了这个问题。我还将尝试捕获操作系统之外的内容并保持更新。
Marki

Answers:


16

tcpdump -i eth0由于VLAN加速,您无法在i686 / x86_64架构上的输出中看到VLAN标记。VLAN层将由内核过滤,因此它始终看起来没有标签。请参考错误498981-tcpdump无法处理802.1q vlan标签

根据您的情况,您可以通过以下方式获取VLAN标记:

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

您应该看到以下输出:

<timestamp> <mac-addr-of-eth0> > Broadcast, ethertype 802.1Q (0x8100), length 346: vlan 20, p 0, ethertype IPv4, 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP

你理解错了。我说的是Linux 发送 DHCP发现。应该加标签。可能不是,或者显示错误。这与机器所连接的开关无关。
Marki

1
@Marki对不起,我不清楚您的意思。这是经过Google 20分钟研究后的更新版本。此评论是您提出问题的关键。
shawmzhu

是的,您似乎是对的。一个人应该注意第二层的所有内容。另外一个人应该注意DHCP客户端,因为在某些情况下它似乎使用原始套接字(因此您甚至无法使用iptables捕获数据包)。此外,在使用VMware时,无论如何都不要在VM中标记数据包,因为vSwitch会拒绝它们,因此您必须在vSwitch上的该VLAN中为该VM配置专用接口。将所有这些整合在一起并不容易... ;-)
Marki

另一方面...参见上面的编辑...毕竟似乎并不那么容易。但是无论如何我的问题已经解决,无论如何我都无法从VM内发送带标签的数据包。但是对于纯物理主机来说,这可能是个问题……
Marki
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.