Tagged VLAN 1 In a Trunk Is a Really Bad Idea « ipSpace.net blog

5 min read Original article ↗

It all started with a netlab issue describing different interpretations of VLAN 1 in a trunk. While Cumulus NVUE (the way the netlab configuration template configures it) assumes that the VLAN 1 in a trunk is tagged, Arista EOS assumes it’s the native VLAN.

At that point, I should have said, “that’s crazy, we shouldn’t allow that” and enforce the “VLAN 1 has to be used as a native VLAN” rule. Alas, 20/20 hindsight never helped anyone.

TL&DR: Do not use VLAN 1 in VLAN trunks; if you have to, use it as a native VLAN.

A Bit of a History

Let’s try to figure out what quirks of ancient history1 brought us to the current quagmire before going into the weird stuff I encountered while trying to implement the tagged VLAN 1 idea:

However, as people started using VLANs on things that have to be auto-provisioned (servers, access switches), they discovered an interesting conundrum:2

  • The auto-provisioned devices have no idea they should use a VLAN trunk on their uplink before they are configured.
  • DHCP requests are thus sent as untagged packets and would land in VLAN 1.
  • Using the same VLAN 1 everywhere for auto-provisioning would trigger alerts during any semi-competent security audit, so we needed another solution.
  • Vendors3 quickly realised one could assign any VLAN tag to untagged packets and we got the functionality to use any VLAN as a native VLAN in a VLAN trunk. After all, an access VLAN port is nothing else but a trunk port with a single native VLAN.

Anyway, while it’s perfectly OK not to allow VLAN 1 on a VLAN trunk, most (sane) people developing network operating systems kept assuming that if one wants to use VLAN 1 in a trunk, it would be used as the native VLAN.

A Maze of Tiny Rabbit Trails, All Alike

Back to 2025. Instead of posting the above paragraph in response to the above-mentioned GitHub issue and closing it, I decided to do the crazy thing and figure out which vendors could be persuaded to send and receive tagged packets in VLAN 1 on a VLAN trunk.

I created a new integration test with three VLAN trunks:

  1. Tagged VLAN 700 and VLAN 1
  2. Native VLAN 1 and tagged VLAN 700
  3. Native VLAN 700 and tagged VLAN 1

Next, I ran the test on most devices supported by the netlab VLAN configuration module. Some of them passed with flying colors; many needed configuration tweaks ranging from a single command to horrible things one should not do in a real-life network:

To recap: Do not use tagged VLAN 1 in VLAN trunks. Just because you could does not mean that you should.

Add comment