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