GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo configurar la formación de equipos de interfaz de red en CentOS/RHEL 7 y 8

La creación de equipos de interfaz de red se introdujo a partir de CentOS/RHEL 7 como una alternativa más extensible y escalable a la vinculación de red. Esta publicación describe cómo configurar la formación de equipos de red en CentOS/RHEL 7/8.

Los ejemplos proporcionados se basan en el sistema Oracle Linux 8.2 (máquina virtual invitada Oracle VirtualBox 6.1) con dos interfaces de red que usan NetworkManager.
Específicamente, la interfaz de línea de comandos de Network Manager (nmcli) se usa principalmente con opciones especificadas en formato abreviado/acortado. formulario.

1. Configuración original previa al equipo

Lo siguiente indica la configuración de red original previa al equipo:

# dnf list | grep team | grep anaconda
NetworkManager-team.x86_64        1:1.22.8-4.el8                 @anaconda
libteam.x86_64                    1.29-1.el8                     @anaconda
teamd.x86_64                      1.29-1.el8                     @anaconda
# lspci | grep -i eth
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
00:08.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
# nmcli dev
DEVICE  TYPE      STATE      CONNECTION
enp0s3  ethernet  connected  enp0s3
enp0s8  ethernet  connected  enp0s8
lo      loopback  unmanaged  --
# nmcli con
NAME    UUID                                  TYPE      DEVICE
enp0s3  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s3
enp0s8  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s8
# ls -l /etc/sysconfig/network-scripts/*
-rw-r--r-- 1 root root 334 Aug 21 13:29 /etc/sysconfig/network-scripts/ifcfg-enp0s3
-rw-r--r-- 1 root root 334 Aug 21 13:30 /etc/sysconfig/network-scripts/ifcfg-enp0s8
# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
  1 MACADDR=[MAC_ADDR1]
  2 MTU=1500
  3 TYPE=Ethernet
  4 PROXY_METHOD=none
  5 BROWSER_ONLY=no
  6 BOOTPROTO=dhcp
  7 DEFROUTE=yes
  8 IPV4_FAILURE_FATAL=no
  9 IPV6INIT=yes
  10 IPV6_AUTOCONF=yes
  11 IPV6_DEFROUTE=yes
  12 IPV6_FAILURE_FATAL=no
  13 IPV6_ADDR_GEN_MODE=stable-privacy
  14 NAME="enp0s3"
  15 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  16 DEVICE=enp0s3
  17 ONBOOT=yes
# cat /etc/sysconfig/network-scripts/ifcfg-enp0s8
  1 MACADDR=[MAC_ADDR2]
  2 MTU=1500
  3 TYPE=Ethernet
  4 PROXY_METHOD=none
  5 BROWSER_ONLY=no
  6 BOOTPROTO=dhcp
  7 DEFROUTE=yes
  8 IPV4_FAILURE_FATAL=no
  9 IPV6INIT=yes
  10 IPV6_AUTOCONF=yes
  11 IPV6_DEFROUTE=yes
  12 IPV6_FAILURE_FATAL=no
  13 IPV6_ADDR_GEN_MODE=stable-privacy
  14 NAME="enp0s8"
  15 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  16 DEVICE=enp0s8
  17 ONBOOT=yes
# ip addr
...
2: enp0s3:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether  brd ff:ff:ff:ff:ff:ff
    inet /24 brd  scope global dynamic noprefixroute enp0s3
       valid_lft 86059sec preferred_lft 86059sec
    inet6 fe80::ca99:46d3:1765:f02b/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: enp0s8:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether  brd ff:ff:ff:ff:ff:ff
    inet /24 brd  scope global dynamic noprefixroute enp0s8
       valid_lft 86121sec preferred_lft 86121sec
    inet6 fe80::36d0:6bd3:5152:83dc/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

2. Eliminar conexiones de red existentes

Elimine las conexiones enp0s3 y enp0s8 existentes de la siguiente manera. Estos se recrean como esclavos del equipo en los siguientes pasos.

# nmcli con show
NAME    UUID                                  TYPE      DEVICE
enp0s3  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s3
enp0s8  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s8
# nmcli con del XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Connection 'enp0s3' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully deleted.
# nmcli con del XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Connection 'enp0s8' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully deleted.
# nmcli dev
DEVICE  TYPE      STATE         CONNECTION
enp0s3  ethernet  disconnected  --
enp0s8  ethernet  disconnected  --
lo      loopback  unmanaged     --
# ls -l /etc/sysconfig/network-scripts/
total 0
#

3. Crear conexión de equipo maestro

Cree la conexión del equipo maestro. Por ejemplo:

# nmcli con add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}'
Connection 'team0' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully added.

Arriba, el modo de funcionamiento del equipo (runner) es activebackup y el monitor/observador del enlace del equipo (link_watch) es ethtool. Los valores alternativos de runner y link_watch incluyen:

  • corredor :equilibrio de carga, turno rotativo, lacp, difusión, aleatorio.
  • enlace_reloj :arp_ping, nsna_ping

NetworkManager crea el siguiente archivo de configuración de interfaz:

# cat /etc/sysconfig/network-scripts/ifcfg-team0
  1 TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}, \"link_watch\": {\"name\": \"ethtool\"}}"
  2 PROXY_METHOD=none
  3 BROWSER_ONLY=no
  4 BOOTPROTO=dhcp
  5 DEFROUTE=yes
  6 IPV4_FAILURE_FATAL=no
  7 IPV6INIT=yes
  8 IPV6_AUTOCONF=yes
  9 IPV6_DEFROUTE=yes
 10 IPV6_FAILURE_FATAL=no
 11 IPV6_ADDR_GEN_MODE=stable-privacy
 12 NAME=team0
 13 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 14 DEVICE=team0
 15 ONBOOT=yes
 16 DEVICETYPE=Team
# nmcli con
NAME   UUID                                  TYPE  DEVICE
team0  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  team  team0
# nmcli dev
DEVICE  TYPE      STATE                                  CONNECTION
team0   team      connecting (getting IP configuration)  team0
enp0s3  ethernet  disconnected                           --
enp0s8  ethernet  disconnected                           --
lo      loopback  unmanaged

4. Opcionalmente, asigne una dirección IP estática al equipo

Opcionalmente, asigne una dirección IP estática, puerta de enlace, DNS, etc. a la conexión del equipo. Por ejemplo:

# nmcli con mod team0 ipv4.addresses [IP3]/24
# nmcli con mod team0 ipv4.gateway [IP4]
# nmcli con mod team0 ipv4.dns [IP5]
# nmcli con mod team0 ipv4.method manual
# nmcli con mod team0 connection.autoconnect yes

NetworkManager modifica el siguiente archivo de configuración de interfaz de equipo:

# cat /etc/sysconfig/network-scripts/ifcfg-team0
  1 TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}, \"link_watch\": {\"name\": \"ethtool\"}}"
  2 PROXY_METHOD=none
  3 BROWSER_ONLY=no
  4 BOOTPROTO=none
  5 DEFROUTE=yes
  6 IPV4_FAILURE_FATAL=no
  7 IPV6INIT=yes
  8 IPV6_AUTOCONF=yes
  9 IPV6_DEFROUTE=yes
 10 IPV6_FAILURE_FATAL=no
 11 IPV6_ADDR_GEN_MODE=stable-privacy
 12 NAME=team0
 13 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 14 DEVICE=team0
 15 ONBOOT=yes
 16 DEVICETYPE=Team
 17 IPADDR=[IP3]
 18 PREFIX=24
 19 GATEWAY=[IP4]
 20 DNS1=[IP5]

El equipo utilizará DHCP si no se asigna una dirección IP estática.

5. Configurar y agregar esclavos al equipo

Configurar y agregar esclavos al equipo. Por ejemplo:

# nmcli con add type team-slave con-name team0-slave0 ifname enp0s3 master team0
Connection 'team0-slave0' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully added.
# nmcli con add type team-slave con-name team0-slave1 ifname enp0s8 master team0
Connection 'team0-slave1' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully added.
# nmcli conn
NAME          UUID                                  TYPE      DEVICE
team0         XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  team      team0
team0-slave0  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s3
team0-slave1  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s8
# nmcli dev
DEVICE  TYPE      STATE      CONNECTION
team0   team      connected  team0
enp0s3  ethernet  connected  team0-slave0
enp0s8  ethernet  connected  team0-slave1
lo      loopback  unmanaged  --

NetworkManager crea los siguientes archivos de configuración de interfaz de equipo esclavo:

# cat /etc/sysconfig/network-scripts/ifcfg-team0-slave0
  1 NAME=team0-slave0
  2 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  3 DEVICE=enp0s3
  4 ONBOOT=yes
  5 TEAM_MASTER=team0
  6 DEVICETYPE=TeamPort
# cat /etc/sysconfig/network-scripts/ifcfg-team0-slave1
  1 NAME=team0-slave1
  2 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  3 DEVICE=enp0s8
  4 ONBOOT=yes
  5 TEAM_MASTER=team0
  6 DEVICETYPE=TeamPort

Cuando se agrega al menos un esclavo al equipo, la interfaz (team0) se abre y se vuelve accesible.

# ip addr
...
2: enp0s3: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
3: enp0s8: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
6: team0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
    inet [IP3]/24 brd [IP6] scope global dynamic noprefixroute team0
       valid_lft 86045sec preferred_lft 86045sec
    inet6 fe80::5b1f:554a:1928:8575/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

Tenga en cuenta que todas las interfaces de equipo/equipo utilizan la misma dirección MAC, es decir, la del primer miembro esclavo del equipo.

6. Reiniciar el equipo

Reinicie el equipo para que la dirección IP estática, etc. surta efecto. Por ejemplo:

# nmcli con down team0 && nmcli con up team0

7. Identificar las interfaces esclavas activas/inactivas actuales

Identifique las interfaces esclavas activas e inactivas actuales mediante teamdctl(8). Por ejemplo:

# teamdctl team0 state
setup:
  runner: activebackup
ports:
  enp0s3
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
  enp0s8
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
runner:
  active port: enp0s3

8. Habilite el modo promiscuo para las interfaces de red

Algunas tecnologías de virtualización, como Oracle VM VirtualBox, requieren que el modo promiscuo esté habilitado en las interfaces de red asignadas a los invitados, así como dentro de los invitados para que la conmutación por error/recuperación del esclavo se comporte correctamente. También puede ser necesario habilitar el modo promiscuo en las interfaces de red en los sistemas físicos.

Para Oracle VM VirtualBox, el modo promiscuo se puede habilitar para las interfaces de invitado de la siguiente manera:
– Oracle VM VirtualBox Manager> [INVITADO]> Configuración> Red> Adaptador 1|… ] Avanzado ] Modo promiscuo:Permitir todo

El modo promiscuo se puede habilitar dentro de los sistemas CentOS/RHEL 7 de forma dinámica y estática mediante un servicio personalizado de la siguiente manera:

Dinámico, no persistente:

# ip link set enp0s3 promisc on
# ip link set enp0s8 promisc on

Estático, persistente:

Cree un archivo de unidad systemd personalizado con los siguientes contenidos, por ejemplo:

# cat /usr/lib/systemd/system/promiscuous.service
  1 [Unit]
  2 Description=Bring up network interfaces in promiscuous mode upon boot
  3 After=network.target
  4
  5 [Service]
  6 Type=oneshot
  7 ExecStart=/usr/sbin/ip link set dev enp0s3 promisc on
  8 ExecStart=/usr/sbin/ip link set dev enp0s8 promisc on
  9 ExecStop=/usr/sbin/ip link set dev enp0s3 promisc off
 10 ExecStop=/usr/sbin/ip link set dev enp0s8 promisc off
 11 TimeoutStartSec=0
 12 RemainAfterExit=yes
 13
 14 [Install]
 15 WantedBy=default.target

Informar a systemd del nuevo servicio. Por ejemplo:

# systemctl daemon-reload

Habilite e inicie el nuevo servicio/unidad, por ejemplo:

# systemctl enable promiscuous
Created symlink /etc/systemd/system/default.target.wants/promiscuous.service → /usr/lib/systemd/system/promiscuous.service.
# systemctl start promiscuous
# systemctl status promiscuous
● promiscuous.service - Bring up network interfaces in promiscuous mode upon boot
   Loaded: loaded (/usr/lib/systemd/system/promiscuous.service; enabled; vendor preset: disabled)
   Active: active (exited) since Fri 2020-08-21 16:14:53 AEST; 17s ago
  Process: 8088 ExecStart=/usr/sbin/ip link set dev enp0s8 promisc on (code=exited, status=0/SUCCESS)
  Process: 8086 ExecStart=/usr/sbin/ip link set dev enp0s3 promisc on (code=exited, status=0/SUCCESS)
 Main PID: 8088 (code=exited, status=0/SUCCESS)

Aug 21 16:14:53 [HOST] systemd[1]: Starting Bring up network interfaces in promiscuous mode upon boot...
Aug 21 16:14:53 [HOST] systemd[1]: Started Bring up network interfaces in promiscuous mode upon boot.

Verifique que el modo promiscuo esté habilitado en todas las interfaces esclavas. Por ejemplo:

# ip addr | grep enp
2: enp0s3: [BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000
3: enp0s8: [BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000

9. Prueba de resiliencia de conectividad de red del equipo:conmutación por error/conmutación por recuperación de esclavos

A. Desde un cliente remoto, inicie un ping continuo(8) del servidor para el que se configuró la formación de equipos de red, por ejemplo:

[CLIENT]$ ping [SERVER]
PING [IP3] ([IP3]) 56(84) bytes of data.
64 bytes from [IP3]: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from [IP3]: icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from [IP3]: icmp_seq=3 ttl=64 time=0.039 ms
...

B. Desconecte el esclavo del equipo actualmente activo.

Desconecte temporalmente el cable de red física conectado a la interfaz esclava, p. enp0s3. Tenga en cuenta que deshabilitar una interfaz mediante programación no emula la pérdida real de conectividad del enlace físico.

# teamdctl team0 state
setup:
  runner: activebackup
ports:
  enp0s3
    link watches:
      link summary: down
      instance[link_watch_0]:
        name: ethtool
        link: down
        down count: 1
  enp0s8
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
runner:
  active port: enp0s8

Una vez desconectado, teamdctl denota la interfaz esclava enp0s3 como inactiva y el antiguo esclavo de respaldo enp0s8 es ahora el esclavo activo actual. A pesar de la conmutación por error del esclavo, el ping(8) del cliente remoto continúa sin interrupciones.

Ejecutar el comando ip(8) confirma que todo el tráfico de red al equipo se produce a través del nuevo esclavo activo enp0s8, es decir:

# ip -s link
...
2: enp0s3: [BROADCAST,MULTICAST,PROMISC] mtu 1500 qdisc fq_codel master team0 state DOWN mode DEFAULT group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
    RX:  bytes packets  errors  dropped overrun mcast
    3007606561 5014092  0       27008   0       91263
    TX: bytes  packets  errors  dropped carrier collsns
    787749     7568     0       0       0       0
3: enp0s8: [BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP mode DEFAULT group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors dropped overrun mcast
    3829373093 6116137  0      26680   0       111948
    TX: bytes  packets  errors dropped carrier collsns
    179163     1337     0      0       0       0
7: team0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors dropped overrun mcast
    2106463511 1969187  0      49615   0       60559
    TX: bytes  packets  errors dropped carrier collsns
    176341     1378     0      0       0       0

C. Desconecte el nuevo equipo esclavo activo actual.

Desconecte temporalmente el cable de red física conectado a la interfaz esclava activa recientemente promocionada, p. enp0s8. Una vez desconectado, teamdctl denota ambas interfaces esclavas enp0s3 y enp0s8 como inactivas, es decir:

# teamdctl team0 state
setup:
  runner: activebackup
ports:
  enp0s3
    link watches:
      link summary: down
      instance[link_watch_0]:
        name: ethtool
        link: down
        down count: 1
  enp0s8
    link watches:
      link summary: down
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 1
runner:
  active port:

En este punto, con ambos equipos esclavos desconectados, el ping(8) del cliente remoto cesa, p. ej.

...
64 bytes from [IP3]: icmp_seq=1253 ttl=64 time=0.207 ms
64 bytes from [IP3]: icmp_seq=1254 ttl=64 time=0.131 ms
64 bytes from [IP3]: icmp_seq=1255 ttl=64 time=0.227 ms
64 bytes from [IP3]: icmp_seq=1256 ttl=64 time=0.218 ms
64 bytes from [IP3]: icmp_seq=1257 ttl=64 time=0.198 ms
From [IP3] icmp_seq=1258 Destination Host Unreachable
From [IP3] icmp_seq=1259 Destination Host Unreachable
...

D. Vuelva a conectar el esclavo desconectado

Vuelva a conectar el cable de red físico a una de las interfaces esclavas, p. enp0s3. Una vez reconectado, teamdctl indica que la interfaz esclava enp0s3 está activa, es decir:

# teamdctl team0 state
setup:
  runner: activebackup
ports:
  enp0s3
    link watches:
    link summary: up
      instance[link_watch_0]:
      name: ethtool
      link: up
      down count: 1
  enp0s8
    link watches:
    link summary: down
      instance[link_watch_0]:
      name: ethtool
      link: down
      down count: 1
runner:
  active port: enp0s3

En este punto, con enp0s3 el esclavo activo actual, ping(8) desde el cliente remoto se reanuda, por ejemplo,

...
From [IP3] icmp_seq=1392 Destination Host Unreachable
From [IP3] icmp_seq=1393 Destination Host Unreachable
From [IP3] icmp_seq=1394 Destination Host Unreachable
From [IP3] icmp_seq=1395 Destination Host Unreachable
64 bytes from [IP3]: icmp_seq=1396 ttl=64 time=1258180 ms
64 bytes from [IP3]: icmp_seq=1397 ttl=64 time=1257180 ms
64 bytes from [IP3]: icmp_seq=1398 ttl=64 time=1256181 ms
64 bytes from [IP3]: icmp_seq=1399 ttl=64 time=1255181 ms
...

E. Vuelva a conectar el esclavo desconectado restante.

Vuelva a conectar el cable de red físico a la interfaz esclava restante, p. enp0s8. Una vez que se vuelve a conectar, teamdctl indica que la interfaz esclava restante enp0s8 está activa, es decir:

# teamdctl team0 state
setup:
  runner: activebackup
ports:
  enp0s3
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 1
  enp0s8
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 1
runner:
  active port: enp0s3


Cent OS
  1. CentOS / RHEL 7:Cómo modificar los nombres de la interfaz de red

  2. CentOS/RHEL 5:Cómo configurar la vinculación de interfaz (formación de equipos NIC)

  3. CentOS/RHEL 4:cómo configurar la vinculación de interfaz (equipo de NIC)

  4. Cómo instalar y configurar Samba en CentOS/RHEL

  5. Cómo configurar la interfaz en “Modo Promiscuo” en CentOS/RHEL

Configurar la vinculación de NIC (tarjeta de interfaz de red) en CentOS 7 / RHEL 7

Cómo instalar y configurar oVirt 4.0 en CentOS 7 / RHEL 7

Cómo configurar la formación de equipos NIC en CentOS 8/RHEL 8

Cómo instalar y configurar Checkmk en CentOS 8 / RHEL 8

Cómo instalar y configurar Jenkins en CentOS 8 / RHEL 8

Cómo configurar una interfaz de canal de fibra a través de Ethernet (FCoE) en CentOS/RHEL