Tagi VLAN nie są pokazywane podczas przechwytywania pakietów (Linux) przez tcpdump

15

Dodam otagowany VLAN do eth0:

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

To skutkuje:

#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

Teraz uruchamiam dhclient:

#dhclient -d -v -1 eth0.20

To, co widzę w tcpdump, to nieoznakowana ramka wykrywania DHCP:

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

Dlaczego nie jest oznaczony?

Wydaje się, że używany jest moduł 802.1q:

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

(OS: jądro SLES11SP2 3.0.13-0.27-domyślne)

BTW inny ruch również nie jest oznaczony (przynajmniej tcpdump go nie pokazuje) ...


Zaktualizuj 16 października

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

Tak więc nadal nie pokazano tutaj tagu.

Ale rzeczywiście licznik transmisji dla eth0.20 w / proc / net / dev nie zwiększa się przy uruchomieniu dhclient ...

Marki
źródło
czy możesz uruchomić „ip -d link show eth0.20”?
Danila Ladner
Jasne, dodałem informacje do pytania.
Marki
Czy jesteś pewien, że ruch również pojawia się w sieci bez tagów VLAN? Może to być po prostu dziwactwo libpcap związane ze sposobem implementacji interfejsów VLAN ip link.
the-wabbit
okej, także co mówi „cat / proc / net / vlan / config”?
Danila Ladner
Rozszerzyłem pytanie o dane wyjściowe konfiguracji. Spróbuję również przechwytywać poza systemem operacyjnym i informować Cię na bieżąco.
Marki

Odpowiedzi:

16

Nie można zobaczyć znacznika VLAN z tcpdump -i eth0danych wyjściowych w architekturze i686 / x86_64 z powodu przyspieszenia VLAN. warstwa VLAN będzie filtrowana przez jądro, więc zawsze wygląda nieoznaczona. Proszę odnieść się do błędu 498981 - tcpdump nie radzi sobie ze znacznikiem vlan 802.1q

W zależności od przypadku możesz uzyskać tagi VLAN poprzez:

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

Powinieneś zobaczyć następujące dane wyjściowe:

<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
źródło
Źle to zrozumiałeś. Mówię o Linuksie wysyłającym wykrywanie DHCP. Powinien być oznaczony. Albo tak nie jest, albo wyświetlacz jest nieprawidłowy. Nie ma to nic wspólnego z przełącznikiem, do którego jest podłączone urządzenie.
Marki
1
@Marki przepraszam, że nie zrozumiałem jasno. Oto zaktualizowana wersja po 20-minutowym badaniu za pośrednictwem Google. ten komentarz jest kluczem do twojego pytania.
shawmzhu
Tak, wydajesz się mieć rację. Należy uważać na wszystko w warstwie 2. Należy także uważać na klienta DHCP, ponieważ w niektórych przypadkach wydaje się, że używa on surowych gniazd (więc nie można nawet przechwytywać pakietów za pomocą iptables). Ponadto, gdy używasz VMware, nie powinieneś w żadnym wypadku oznaczać pakietów na maszynie wirtualnej, ponieważ vSwitch je odrzuci, musisz skonfigurować dedykowany interfejs dla tej maszyny wirtualnej w tej sieci VLAN na vSwitch. Zebranie tego wszystkiego nie było łatwe ... ;-)
Marki
Z drugiej strony ... patrz moja edycja powyżej ... nie wydaje się wcale takie łatwe. Ale w każdym razie mój problem został rozwiązany, i tak nie mogę wysyłać oznaczonych pakietów z maszyny wirtualnej. Ale w przypadku hostów czysto fizycznych może to stanowić problem ...
Marki