Configure a VLAN on top of a team with NetworkManager (nmcli) in RHEL7

时间:2022-12-26 19:29:09

SOLUTION VERIFIED

Environment

  • Red Hat Enterprise Linux 7
  • NetworkManager
  • teamd

Issue

  • Would like to configure a VLANs with Teaming in RHEL 7.
  • Need to know how to make VLANs like team0.10 for a team0 device with RHEL and NetworkManager.

Resolution

  For steps to use Teaming without VLANs, please see How to create a Team in RHEL7.

  • Create the team interface connection profile with nmcli. The following command will create a connection profile named myteam which will provide a team device named team0. The team mode will be activebackup and ethtool link monitoring will be used:

    # nmcli connection add type team con-name myteam ifname team0 config '{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}'
  • Disable IPv4 and IPv6 addressing for the team connection profile. The connection must be brought up again for these changes to take effect. In the example below the connection profile name is myteam:

    # nmcli connection modify myteam ipv4.method disable ipv6.method ignore
    # nmcli connection up myteam
  • Create a profile for each team port (slave). The master parameter must refer to the team device name, not the team profile name. In the example below the interfaces ens10 and ens15 are added to team0:

    # nmcli connection add type team-slave con-name myteam-port1 ifname ens10 master team0
    # nmcli connection add type team-slave con-name myteam-port2 ifname ens15 master team0
  • Confirm the team is working as expected with the teamdctl program. At a minimum, ensure the correct runner is in use or connectivity may not work:

    # teamdctl team0 state
    setup:
    runner: activebackup
    ports:
    ens10
    link watches:
    link summary: up
    instance[link_watch_0]:
    name: ethtool
    link: up
    down count: 0
    ens15
    link watches:
    link summary: up
    instance[link_watch_0]:
    name: ethtool
    link: up
    down count: 0
    runner:
    active port: ens10
  • Create the VLAN connection profiles which will be on top of the new team device. The dev parameter must refer to the team device name, not the team profile name. The following command will create a connection profile named myteam-vlan123 which will provide VLAN ID 123 on top of device team0:

    ### With static IP addressing:
    # nmcli connection add type vlan con-name myteam-vlan123 ifname team0.123 id 123 dev team0 ip4 192.168.0.100/24 gw4 192.168.0.1 ### With DHCP addressing:
    # nmcli connection add type vlan con-name myteam-vlan123 ifname team0.123 id 123 dev team0
  • Other connection properties such as DNS servers, search domains, and static routes can be set for the VLAN profiles after they have been created. Use the nmcli connection show command to see all the available properties for a connection profile. Use the nmcli connection modify command to set any given property. All properties and their possible values are described in the nm-settings man page.

    # nmcli connection show <profile name>
    
    # nmcli connection modify <profile name> <property> <value>

Root Cause

  • Please see the RHEL 7 Networking Guide chapter on Teaming and the teamd.conf man page for more information on configuring Teaming and the different modes and configuration options which are available:

Diagnostic Steps

  • It is best to remove or disable any existing connection profiles which correspond to the interfaces to be used in the team. This ensures the right connection profile is always used:

    • The following command will list all the existing connection profiles (connection.id) and the interface (connection.interface-name, if set) they are associated with. If there are any matches for the interfaces to be used, delete the matching profile (or set the profile's connection.autoconnect property to no and note the profile name so it is not accidentally reused):
    # for connection in $(nmcli -t --fields uuid con) ; do echo ; nmcli con show uuid $connection | egrep "connection.id|connection.interface-name" ; done
    • If an existing profile needs to be removed, do so with the following command where $PROFILE is the connection.id seen in the output from the command above:
    # nmcli connection del "$PROFILE"