tcpdump를 통한 패킷 캡처 (Linux)에 VLAN 태그가 표시되지 않음


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

(OS : 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 태그 없이도 트래픽이 와이어에 표시됩니까? VLAN 인터페이스가 구현되는 방식을 가진 libpcap 멍청한 것일 수도 있습니다 ip link.
the-wabbit

"cat / proc / net / vlan / config"는 무엇을 말하는가?
Danila Ladner

구성 출력으로 질문을 확장했습니다. 또한 OS 외부에서 캡처하고 업데이트를 유지하려고 노력할 것입니다.
Marki

답변:


16

tcpdump -i eth0VLAN 가속으로 인해 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

잘못 했어요 리눅스 가 DHCP 발견을 보내는 것에 대해 이야기하고 있습니다. 태그를 붙여야합니다. 그렇지 않거나 디스플레이가 잘못되었습니다. 이것은 기기가 연결된 스위치와 관련이 없습니다.
Marki

1
@Marki 죄송합니다. 귀하의 요점을 명확하게 이해하지 못했습니다. 다음은 Google을 통한 20 분의 연구 후 업데이트 된 버전입니다. 이 의견 은 질문의 핵심입니다.
shawmzhu

네 옳은 것 같습니다. 하나는 2. 하나는해야 모든 층에주의해야 추가 가 (당신도의 iptables를 사용하여 패킷을 캡처 할 수 있습니다) 어떤 경우에는 원시 소켓을 사용하는 것 같은 DHCP 클라이언트에주의. 또한 VMware를 사용하는 경우 vSwitch가이를 거부하므로 VM의 패킷에 태그를 지정해서는 안됩니다. vSwitch의 해당 VLAN에서 해당 VM에 대한 전용 인터페이스를 구성해야합니다. ;-)
Marki

반면에 ... 위의 편집 내용을 참조하십시오 ... 결국 그렇게 쉬운 것처럼 보이지는 않습니다. 그러나 어쨌든 내 문제는 해결되어 어쨌든 VM 내에서 태그가 지정된 패킷을 보낼 수 없습니다. 그러나 순수한 물리적 호스트의 경우 이것이 문제가 될 수 있습니다.
Marki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.