RADIUS attribute 81 · type string
Tunnel-Private-Group-Id
Tunnel-Private-Group-Id (attribute 81) is the RADIUS attribute that tells the switch or access point which VLAN to put an authenticated device on. It is the payload of dynamic VLAN assignment.
Also searched as: VLAN attribute, Tunnel-Private-Group-ID, dynamic VLAN attribute. Defined in RFC 2868 / RFC 3580.
What it means
When RADIUS returns an Access-Accept, Tunnel-Private-Group-Id carries the VLAN the NAS should place the port or client on. On its own it does nothing: RFC 3580 requires it to arrive alongside Tunnel-Type = VLAN (13) and Tunnel-Medium-Type = IEEE-802 (6). If any of the three is missing, most switches silently ignore the VLAN assignment and fall back to the port's native VLAN — the authentication succeeds, but the device lands on the wrong network and nobody sees an error.
How it's used
The value is the VLAN *name or number as the switch expects it*, sent as a string. On most switches that is the numeric VLAN ID written as text ("20"), but some platforms match on the VLAN name instead. The tag byte prefix (RFC 2868's optional Tag field) is where a lot of one-vendor-works, other-vendor-doesn't confusion comes from.
Common gotchas
- It must travel with Tunnel-Type (13) and Tunnel-Medium-Type (6). A policy that returns only attribute 81 is the single most common reason "the VLAN attribute is set but the device stays on the default VLAN."
- The value is a string, not an integer. Returning the VLAN as an integer attribute, or with a stray tag byte, makes the switch parse the wrong value — sometimes VLAN 0, sometimes nothing.
- The VLAN must actually exist and be allowed on the port/trunk. RADIUS returning VLAN 20 to a switch that has no VLAN 20 is an accept that ends in a dead port, not a reject.
FAQ
What attributes are required with Tunnel-Private-Group-Id for VLAN assignment?
Three attributes must travel together: Tunnel-Type = VLAN (13), Tunnel-Medium-Type = IEEE-802 (6), and Tunnel-Private-Group-Id = the VLAN ID or name. Returning attribute 81 alone makes most switches ignore the assignment and use the port's native VLAN, with no error logged.
Is Tunnel-Private-Group-Id a number or a string?
It is a string (RADIUS type 'string'), even when the value is a numeric VLAN ID like "20". Sending the VLAN as an integer attribute, or with an unexpected RFC 2868 tag byte, causes the switch to parse the wrong VLAN.