Las etiquetas VLAN no se muestran en la captura de paquetes (Linux) a través de tcpdump

15

Estoy agregando una VLAN etiquetada en eth0:

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

Esto resulta en:

#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

Ahora empiezo dhclient:

#dhclient -d -v -1 eth0.20

Lo que veo en tcpdump es un marco de descubrimiento de DHCP sin etiquetar:

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

¿Por qué no está etiquetado?

Parece que se usa el módulo 802.1q:

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

(SO: SLES11SP2 kernel 3.0.13-0.27-default)

Por cierto, el otro tráfico tampoco está etiquetado (al menos tcpdump no lo muestra) ...


Actualización 16 de octubre

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

Entonces, todavía no se muestra ninguna etiqueta aquí.

Pero, de hecho, el contador de transmisión para eth0.20 en / proc / net / dev aumenta cuando se ejecuta dhclient ...

Marki
fuente
¿puedes ejecutar "ip -d link show eth0.20"?
Danila Ladner
Claro, he agregado la información a la pregunta.
Marki
¿Está seguro de que el tráfico se muestra en el cable sin etiquetas VLAN también? Simplemente podría ser una peculiaridad de libpcap con la forma en que se implementan las interfaces VLAN ip link.
the-wabbit
bien, también lo que dice "cat / proc / net / vlan / config"?
Danila Ladner
He extendido la pregunta con la salida de configuración. También intentaré capturar fuera del sistema operativo y mantenerlo actualizado.
Marki

Respuestas:

16

No puede ver la etiqueta VLAN de la tcpdump -i eth0salida en la arquitectura i686 / x86_64 debido a la aceleración de VLAN. la capa de VLAN será filtrada por el núcleo para que siempre se vea sin etiquetar. Consulte el error 498981: tcpdump no puede manejar la etiqueta vlan 802.1q

Según su caso, puede obtener etiquetas VLAN a través de:

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

Debería ver el siguiente resultado:

<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
fuente
Lo entendiste mal. Estoy hablando de que Linux envía un descubrimiento DHCP. Debería estar etiquetado. O no lo está, o la pantalla está mal. Esto no tiene nada que ver con el interruptor al que está conectada la máquina.
Marki
1
@ Marki, lo siento, no entendí tu punto claramente. Aquí está la versión actualizada después de un estudio de 20 minutos a través de Google. Este comentario es clave para su pregunta.
shawmzhu
Sí, parece que tienes razón. Se debe tener cuidado con todo lo que es la capa 2. Además, se debe tener cuidado con el cliente DHCP, ya que parece usar sockets sin procesar en algunos casos (por lo que ni siquiera puede capturar los paquetes usando iptables). Además, cuando usa VMware, no debe etiquetar los paquetes en la VM en ningún caso porque el vSwitch los rechazará, debe configurar una interfaz dedicada para esa VM en esa VLAN en el vSwitch. Reunir todo esto no fue fácil ... ;-)
Marki
Por otro lado ... vea mi edición anterior ... no parece ser tan fácil después de todo. Pero de todos modos mi problema está resuelto, de todos modos no puedo enviar paquetes etiquetados desde la VM. Pero para los hosts puramente físicos esto podría ser un problema ...
Marki