vconfig not tagging outgoing packets with vlan tag (Ubuntu)
I am trying to experiment with a vlan interface on my desktop ubuntu machine. The desktop has only one single interface (eth0) connected to the company LAN. After using vconfig to create the vlan interface, running wireshark on the interface does not show outgoing packets as vlan tagged. Here is what I did:
$ ifconfig
eth0 Link encap:Ethernet HWaddr 84:2b:2b:87:2c:87
inet addr:192.168.0.126 Bcast:192.168.0.255 Mask:255.255.255.0
etc...
Then I add the vlan interface:
$ sudo vconfig add eth0 55
$ sudo ifconfig eth0.55 192.168.10.100 netmask 255.255.255.0 up
$ sudo ifconfig eth0.55 mtu 1412
$ ifconfig -a
eth0 Link encap:Ethernet HWaddr 84:2b:2b:87:2c:87
inet addr:192.168.0.126 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::862b:2bff:fe87:2c87/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12195 errors:0 dropped:0 overruns:0 frame:0
TX packets:7435 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6831057 (6.8 MB) TX bytes:1138706 (1.1 MB)
Interrupt:18
eth0.55 Link encap:Ethernet HWaddr 84:2b:2b:87:2c:87
inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::862b:2bff:fe87:2c87/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1412 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:168 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:23515 (23.5 KB)
So far so good .. Here's the additional related information:
$ sudo cat /proc/net/vlan/eth0.55
eth0.55 VID: 55 REORDER_HDR: 1 dev->priv_flags: 1
total frames received 0
total bytes received 0
Broadcast/Multicast Rcvd 0
total frames transmitted 170
total bytes transmitted 23697
Device: eth0
INGRESS priority mappings: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
EGRESS priority mappings:
$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 3317 packets, 2230K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1528 packets, 189K bytes)
pkts bytes target prot opt in out source destination
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0.55
Now I try to ping some non-existent machine in the 192.168.10.xx range:
$ ping -I eth0.55 192.168.10.101
However, when capturing this interface with wireshark or tcpdump, I see normal arp messages being sent out. They are NOT vlan tagged. (My interest here is to first see if I can get vlan packets out of my machine .. working with actual vlans will come later). I am also able to ping the eth0.55 interface from a vbox VM on same machine.
$ sudo /usr/sbin/tcpdump -vv -i eth0.55
tcpdump: listening on eth0.55, link-type EN10MB (Ethernet), capture size 65535 bytes
11:55:52.625984 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.101 tell 192.168.10.100, length 28
11:55:53.625983 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.101 tell 192.168.10.100, length 28
I even tried set_flag command, but still a no-go:
$ sudo vconfig set_flag eth0.55 0
What am I missing?
Solution 1:
Here's a similar question: VLAN tags not shown in packet capture (Linux) via tcpdump
Actually what you seen are packets filtered by kernel when using tcpdump, where the vlan layer is removed so it always looks like untagged.
You already saw there're transferred frames via /proc/net/vlan/eth0.55
so it works very well.
According to your case, use this command to see the VLAN tag:
tcpdump -Uw - | tcpdump -i eth0 -en -r - vlan 55