Теги VLAN не отображаются при захвате пакетов (Linux) через tcpdump

15

Я добавляю VLAN с тегами на eth0:

#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-default)

Кстати, другой трафик тоже не помечен (по крайней мере, tcpdump не показывает его) ...


Обновление 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
                                                                       ^^^^^^

Таким образом, все еще нет тега, показанного здесь.

Но на самом деле счетчик передачи для eth0.20 в / proc / net / dev увеличивается при запуске dhclient ...

Marki
источник
вы можете запустить "ip -d link show eth0.20"?
Данила Ладнер
Конечно, я добавил информацию к вопросу.
Марки
Вы уверены, что трафик отображается по проводам без тегов VLAN? Это может быть какая-то особенность libpcap со способом реализации интерфейсов VLAN ip link.
The Wabbit
хорошо, а что говорит "cat / proc / net / vlan / config"?
Данила Ладнер
Я расширил вопрос выводом конфига. Я также постараюсь сделать снимок вне ОС и держать вас в курсе.
Марки

Ответы:

16

Вы не видите тег VLAN из tcpdump -i eth0вывода на архитектуре 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
shawmzhu
источник
Ты не правильно понял. Я говорю о том, что Linux отправляет обнаружение DHCP. Это должно быть помечено. Либо это не так, либо дисплей не так. Это не имеет никакого отношения к коммутатору, к которому подключен аппарат.
Марки
1
@ Марки, извини, я не совсем понял твою точку зрения. Вот обновленная версия после 20 минут изучения через Google. этот комментарий является ключевым к вашему вопросу.
Shawmzhu
Да, похоже, ты прав. Нужно быть осторожным со всем уровнем 2. Кроме того, нужно быть осторожным с клиентом DHCP, так как в некоторых случаях он использует необработанные сокеты (так что вы даже не можете захватывать пакеты с помощью iptables). И, кроме того, когда вы используете VMware, вам ни в коем случае не следует маркировать пакеты в виртуальной машине, потому что vSwitch будет их отклонять, вы должны настроить выделенный интерфейс для этой виртуальной машины в этой VLAN на vSwitch. Собрать все это было нелегко ... ;-)
Марки
С другой стороны ... см. Мое редактирование выше ... не все так просто. Но в любом случае моя проблема исправлена, я не могу отправлять помеченные пакеты изнутри виртуальной машины. Но для чисто физических хостов это может быть проблемой ...
Marki