Tags VLAN não mostradas na captura de pacotes (Linux) via tcpdump

15

Estou adicionando uma VLAN marcada no eth0:

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

Isto resulta em:

#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

Agora inicio o dhclient:

#dhclient -d -v -1 eth0.20

O que vejo no tcpdump é um quadro de descoberta de DHCP sem marcação:

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

Por que não está marcado?

O módulo 802.1q parece ser usado:

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

(SO: SLES11SP2 kernel 3.0.13-0.27-padrão)

BTW outro tráfego também não está marcado (pelo menos tcpdump não o mostra) ...


Atualização 16 de outubro

 # 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
                                                                       ^^^^^^

Portanto, ainda não há tag mostrada aqui.

Mas, de fato, o contador de transmissão para eth0.20 em / proc / net / dev é incrementado ao executar o dhclient ...

Marki
fonte
você pode executar "ip -d link show eth0.20"?
Danila Ladner
Claro, adicionei as informações à pergunta.
Marki
Você tem certeza de que o tráfego também é exibido sem as tags VLAN? Simplesmente pode haver alguma peculiaridade da libpcap com a maneira como as interfaces VLAN são implementadas ip link.
-13
ok, também o que "cat / proc / net / vlan / config" diz?
Danila Ladner
Estendi a pergunta com a saída de configuração. Também tentarei capturar fora do sistema operacional e mantê-lo atualizado.
Mar13

Respostas:

16

Você não pode ver a tag VLAN da tcpdump -i eth0saída na arquitetura i686 / x86_64 devido à aceleração da VLAN. a camada da VLAN será filtrada pelo kernel, para que sempre pareça sem marcação. Consulte o Bug 498981 - o tcpdump não pode lidar com a tag vlan 802.1q

De acordo com o seu caso, você pode obter tags VLAN através de:

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

Você deve ver a seguinte saída:

<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
shawmzhu
fonte
Você entendeu errado. Estou falando do Linux enviando uma descoberta DHCP. Deve ser marcado. Ou não está, ou a tela está errada. Isso não tem nada a ver com o interruptor ao qual a máquina está conectada.
Marki
1
@ Marki desculpe, eu não entendi seu ponto de vista claramente. aqui está a versão atualizada após um estudo de 20 minutos via google. este comentário é fundamental para sua pergunta.
shawmzhu
Sim, você parece estar certo. Deve-se ter cuidado com tudo a camada 2. Além disso, deve-se ter cuidado com o cliente DHCP, pois parece usar soquetes brutos em alguns casos (para que você não possa capturar os pacotes usando o iptables). Além disso, quando você estiver usando o VMware, você não deve marcar os pacotes na VM em nenhum caso, porque o vSwitch os rejeitará, você deve configurar uma interface dedicada para essa VM nessa VLAN no VSwitch. Conseguir tudo isso junto não foi fácil ... ;-)
Marki
Por outro lado ... veja minha edição acima ... não parece tão fácil assim. Mas, de qualquer maneira, meu problema foi corrigido. Não consigo enviar pacotes marcados de dentro da VM. Mas para os anfitriões puramente físicos isso pode ser um problema ...
Marki