public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Stefan Hanreich <s.hanreich@proxmox.com>
To: Thomas Ellmenreich <t.ellmenreich@proxmox.com>,
	pve-devel@lists.proxmox.com
Subject: Re: [PATCH pve-docs v2 1/1] network/sdn: update and clean up VLAN information
Date: Tue, 20 Oct 2026 15:54:26 +0200	[thread overview]
Message-ID: <b74b11bb-6309-40e1-89eb-82a09354b621@proxmox.com> (raw)
In-Reply-To: <20261020064508.32479-1-t.ellmenreich@proxmox.com>

On 10/20/26 8:45 AM, Thomas Ellmenreich wrote:
> Adjusted some of the details related to VLAN setups, both with the traditional
> methods as well as the SDN setup.
> 
> - Removed an outdated example and added more information to the remaining
>   examples. First, by adding the VLAN interface on the bridge, and then
>   showcasing that VLAN tags can be set in the guest network configurations.
> 
> - Added SDN as a possible way to configure VLANs for guests, as well as adding
>   an example for SDN.
> 
> - Added a "Common Issues" section to collect common networking issues.
> 
> - Added a "Troubleshooting" section, to collect information on how to fix VLAN
>   related issues.
> 
> Suggested-by: Stefan Hanreich <s.hanreich@proxmox.com>
> Signed-off-by: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
> ---
> 
> Some changes for the VLAN configuration documentation, would apprechiate any
> help in regards to the wording and details of said documentation.
> 
> Changelog:
> 
> - PATCH v1 -> v2
>     * Added a "Common Issues" section, that recounts different problems that
>       might appear.
> 
>     * Added a "Troubleshooting" section to show different ways to troubleshoot
>       problems with the networking.
> 
>     * Added a SDN VLAN example.
> 
>     * Some rewording, and adjustment of different sections.
> 
>  pve-network.adoc | 161 +++++++++++++++++++++++++++++++++++------------
>  pvesdn.adoc      |   2 +-
>  2 files changed, 121 insertions(+), 42 deletions(-)
> 
> diff --git a/pve-network.adoc b/pve-network.adoc
> index 2b3e664..b1a598c 100644
> --- a/pve-network.adoc
> +++ b/pve-network.adoc
> @@ -637,6 +637,53 @@ completely done inside the guest and can not be influenced from the
>  outside. The benefit is that you can use more than one VLAN on a
>  single virtual NIC.
>  
> +* *SDN configured VLAN:*
> +It is also possible to xref:pvesdn_config_vnet[configure VLANs in SDN] by
> +creating a VLAN zone on the bridge and then creating VNets for every VLAN tag.
> +In this case, it is also recommended to use a VLAN-aware bridge.
> +
> +.Example: SDN VLAN Zones with VLAN aware bridges
> +
> +This is the preferred solution if users have a small amount of VLANs inside
> +their cluster. On every node, users should configure a VLAN-aware bridge with
> +the respective carrier for their VLANs:
> +
> +----
> +auto vmbr0
> +iface vmbr0 inet manual
> +        bridge-ports nic0
> +        bridge-stp off
> +        bridge-fd 0
> +        bridge-vlan-aware yes
> +        bridge-vids 2-4094
> +----
> +
> +Then create an SDN zone on top of that bridge:
> +
> +----
> +vlan: vlanz
> +        bridge vmbr0
> +        ipam pve
> +----
> +
> +Then, for each VLAN they want to use, create a VNet:
> +
> +----
> +vnet: vnet1234
> +        zone vlanz
> +        tag 1234
> +----
> +
> +After applying the SDN configuration, users can then select vnet1234 in the
> +network device configuration of their guests. This method does not allow to
> +configure an IP for the host directly on a VNet - but it can be done manually
> +by adding an entry for the VNet to /etc/network/interfaces:
> +
> +----
> +auto vnet1234
> +iface vnet1234 inet static
> +        address 192.0.2.1/24
> +----
>  
>  VLAN on the Host
>  ^^^^^^^^^^^^^^^^
> @@ -644,63 +691,47 @@ VLAN on the Host
>  To allow host communication with an isolated network. It is possible
>  to apply VLAN tags to any network device (NIC, Bond, Bridge). In
>  general, you should configure the VLAN on the interface with the least
> -abstraction layers between itself and the physical NIC.
> +abstraction layers between itself and the physical NIC. But it would still
> +be best to configure the VLAN on a bridge instead of a bond or the NIC
> +directly to avoid some of the issues mentioned xref:vlan_common_issues[here].
>  
>  For example, in a default configuration where you want to place
>  the host management address on a separate VLAN.
>  
> -
> -.Example: Use VLAN 5 for the {pve} management IP with traditional Linux bridge
> +.Example: Use VLAN 5 for the {pve} management IP with VLAN aware Linux bridge
>  ----
>  auto lo
>  iface lo inet loopback
>  
>  iface eno1 inet manual
>  
> -iface eno1.5 inet manual
> -
> -auto vmbr0v5
> -iface vmbr0v5 inet static
> -        address  10.10.10.2/24
> -        gateway  10.10.10.1
> -        bridge-ports eno1.5
> -        bridge-stp off
> -        bridge-fd 0
> -
>  auto vmbr0
>  iface vmbr0 inet manual
>          bridge-ports eno1
>          bridge-stp off
>          bridge-fd 0
> -
> -----
> -
> -.Example: Use VLAN 5 for the {pve} management IP with VLAN aware Linux bridge
> -----
> -auto lo
> -iface lo inet loopback
> -
> -iface eno1 inet manual
> -
> +        bridge-vlan-aware yes
> +        bridge-vids 2-4094
>  
>  auto vmbr0.5
>  iface vmbr0.5 inet static
>          address  10.10.10.2/24
>          gateway  10.10.10.1
> +----
> +
> +Guests can then reference the VLAN tag directly in their network
> +configuration. Compared to an SDN-configured solution, this has the
> +disadvantage that specific VLANs cannot be named, but the advantage that
> +each VLAN does not have to be configured individually.
>  
> -auto vmbr0
> -iface vmbr0 inet manual
> -        bridge-ports eno1
> -        bridge-stp off
> -        bridge-fd 0
> -        bridge-vlan-aware yes
> -        bridge-vids 2-4094
> +----
> +net0: name=eth0,bridge=vmbr0,tag=5,...
>  ----
>  
>  The next example is the same setup but a bond is used to
>  make this network fail-safe.
>  
> -.Example: Use VLAN 5 with bond0 for the {pve} management IP with traditional Linux bridge
> +.Example: Use VLAN 5 with bond0 for the {pve} management IP with VLAN aware Linux bridge
>  ----
>  auto lo
>  iface lo inet loopback
> @@ -716,24 +747,72 @@ iface bond0 inet manual
>        bond-mode 802.3ad
>        bond-xmit-hash-policy layer2+3
>  
> -iface bond0.5 inet manual
> -
> -auto vmbr0v5
> -iface vmbr0v5 inet static
> -        address  10.10.10.2/24
> -        gateway  10.10.10.1
> -        bridge-ports bond0.5
> -        bridge-stp off
> -        bridge-fd 0
> -
>  auto vmbr0
>  iface vmbr0 inet manual
>          bridge-ports bond0
> +        bridge-vlan-aware yes
> +        bridge-vids 2-4094
>          bridge-stp off
>          bridge-fd 0
>  
> +auto vmbr0.5
> +iface vmbr0.5 inet static
> +        address 10.10.10.2/24
> +        gateway 10.10.10.1
> +
>  ----
>  
> +Troubleshooting
> +^^^^^^^^^^^^^^^
> +
> +There are some helpful commands that can be utilised when debugging such issues:
> +
> +----
> +$ bridge -compressvlans vlan show
> +----
> +
> +This prints a list of bridges and their ports, as well as the VLANs that are
> +currently configured for them:
> +
> +----
> +port              vlan-id
> +nic0              1 PVID Egress Untagged
> +                  2-4094
> +vmbr0             1 PVID Egress Untagged
> +veth100i0         1234 PVID Egress Untagged
> +----
> +
> +----
> +$ bridge fdb show
> +----
> +
> +This prints a list of the current forwarding database entries of all bridges.
> +The bridge decides how to forward a given packet based on this table. An entry
> +of the fdb generally looks like this:
> +
> +----
> +aa:aa:aa:d8:36:7c dev nic0 vlan 49 master vmbr0 permanent
> +----
> +
> +This means that packets arriving on vmbr0, that have VLAN Tag 49 set and
> +destination MAC address aa:aa:aa:d8:36:7c will get forwarded to the port nic0.
> +
> +[[vlan_common_issues]]
> +Common Issues
> +^^^^^^^^^^^^^
> +
> +.Issue: Configuring VLAN on interface that is member of bridge
> +
> +It's not recommended to configure a VLAN on an interface that is a member of a
> +bridge. Doing so will "blackhole" all traffic of that VLAN on the bridge.

Might need a more specific example so this becomes clearer? It's hard to understand
otherwise imo.

> +
> +.Issue: Limited number of tags when VLAN offloading to NIC
> +
> +Certain NIC's, only support VLAN offloading only for a reduced number of tags.
> +In these cases it is best to either reduce the VLAN tag range on the bridge or
> +disable offloading altogether. The exact problems that can arise depend on
> +the exact hardware used.

There are two other pitfalls I can think of that can occur when configuring
VLANs directly on top of physical interfaces:


When using a VLAN on the host (often the management VLAN) and starting a guest
with a network device that has the same VLAN tag set, connectivity to the host is
lost on that VLAN after starting the guest.

e.g.:

 # NIC that carries the VLANs
 iface nic1 inet manual
 
 # management VLAN
 auto nic1.1337
 iface nic1.1337 inet static
         address 10.133.7.10/24
 
 # non vlan-aware bridge
 auto vmbr1
 iface vmbr1 inet manual
         bridge-ports nic1
         bridge-stp off
         bridge-fd 0

and then a guest:

 net0: name=eth0,bridge=vmbr1,hwaddr=BC:24:11:86:69:F3,tag=1337,type=veth

-------------------

The other one is an ifupdown2 issue, when configuring the gateway on the
physical NIC, when it also is a member of a VLAN-aware bridge:

 # NIC that carries all VLANs
 iface nic0 inet manual
 
 # management VLAN
 auto nic0.1337
 iface nic0.1337 inet static
         address 192.0.2.10/24
         gateway 192.0.2.1
 
 # bridge for VM traffic
 auto vmbr0
 iface vmbr0 inet manual
         bridge-ports nic0
         bridge-stp off
         bridge-fd 0
         bridge-vlan-aware yes
         bridge-vids 2-4094

>  2025-12-19 14:05:57,411: MainThread: ifupdown: scheduler.py:114:run_iface_op(): error: nic0.1337: cmd '/bin/ip route replace default via 192.0.2.1 proto kernel dev nic0.1337 onlink' failed: returned 2 (Error: Nexthop device is not up.)

see here for more details
https://bugzilla.proxmox.com/show_bug.cgi?id=5406
https://github.com/CumulusNetworks/ifupdown2/issues/124



Both of those should not occur when following our guide above and the resolution
is generally to use a VLAN-aware bridge instead. It might still be good to
include it here as it can be easily referenced then?

>  Disabling IPv6 on the Node
>  ~~~~~~~~~~~~~~~~~~~~~~~~~~
>  
> diff --git a/pvesdn.adoc b/pvesdn.adoc
> index 3fd3533..8e40ab4 100644
> --- a/pvesdn.adoc
> +++ b/pvesdn.adoc
> @@ -251,7 +251,7 @@ the network segments.  This allows connectivity of VMs between different nodes.
>  VLAN zone configuration options:
>  
>  Bridge:: The local bridge or OVS switch, already configured on *each* node that
> -  allows node-to-node connection.
> +  allows node-to-node connection. This bridge should be VLAN aware to work properly.
>  
>  
>  [[pvesdn_zone_plugin_qinq]]





  parent reply	other threads:[~2026-10-20 13:54 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-20  6:45 [PATCH pve-docs v2 1/1] network/sdn: update and clean up VLAN information Thomas Ellmenreich
2026-10-20  9:16 ` Michael Köppl
2026-10-20 13:54 ` Stefan Hanreich [this message]
2026-10-21  7:28   ` Thomas Ellmenreich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b74b11bb-6309-40e1-89eb-82a09354b621@proxmox.com \
    --to=s.hanreich@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=t.ellmenreich@proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal