Utilice la agrupación o unificación de redes para configurar enlaces de redes agregadas entre dos sistemas de Red Hat Enterprise Linux

Cuando hablamos de agrupacion o unificacion nos estamos referiendo a “teaming” o “bonding”. En donde unimos dos o mas interfaces de red en una sola, aplicando diferentes “RUNNERS”, o comportamientos. Los “RUNNERS” que usted puede aplicar son los siguientes de acuerdo a metodo que implemente:

Teaming:

  • broadcast: Corredor simple que dirige el dispositivo del equipo para transmitir paquetes a través de todos los puertos.
  • roundrobin: Corredor simple que dirige el dispositivo del equipo para transmitir paquetes de una manera round-robin.
  • activebackup: Vela por cambios de enlace y selecciona el puerto activo que se utilizará para las transferencias de datos.
  • loadbalance: Para hacer equilibrio de carga pasiva, el corredor sólo establece la función de hash BPF que determinará el puerto para la transmisión de paquetes. Para realizar un balanceo de carga activo, el corredor mueve los hashes entre los puertos disponibles intentando alcanzar el equilibrio perfecto.
  • lacp: Implementa el protocolo LACP 802.3ad. Puede usar las mismas posibilidades de selección de puertos Tx que el corredor de equilibrio de carga.

Si estas definiciones no le hacen sentido, puede consultar la pagina de ayuda con “man teamd.conf”

Bonding:

  • mode=0 (balance-rr): Round-robin política: Es el modo predeterminado. Transmite paquetes en orden secuencial desde el primer esclavo disponible hasta el último. Este modo proporciona equilibrio de carga y tolerancia a fallos.
  • mode=1 (active-backup): Política de copia de seguridad activa: En este modo, sólo hay un esclavo en el enlace activo. El otro se activa, sólo cuando falla el esclavo activo. La dirección MAC del enlace es visible externamente en un solo puerto (adaptador de red) para evitar confundir el conmutador. Este modo proporciona tolerancia a fallos.
  • mode=2 (balance-xor): Política XOR: Transmisión basada en [(dirección MAC de origen XOR’d con dirección MAC de destino) cuenta de esclavo de módulo]. Esto selecciona el mismo esclavo para cada dirección MAC de destino. Este modo proporciona equilibrio de carga y tolerancia a fallos.
  • mode=3 (broadcast): Política de difusión: transmite todo en todas las interfaces esclavas. Este modo proporciona tolerancia a fallos.
  • mode=4 (802.3ad): IEEE 802.3ad Agregación de enlaces dinámicos. Crea grupos de agregación que comparten la misma configuración de velocidad y dúplex. Utiliza todos los esclavos en el agregador activo según la especificación 802.3ad.

Es importante aclarar que en el examen RHCE usted puede utilizar el metodo que prefiera o con el que se sienta mas comodo. Tambien puede realizar estas configuraciones de multiples maneras; tales como les muestro a continuacion o bien con el comando “nmtui”, o bien utilizando la aplicacion grafica de NetworkManager “gnome-control-center network

Una vez entendido esta primera parte, entonces vamos a comenzar a realizar nuestra practica. Vamos a utilizar la siguiente informacion para la realizacion de nuestros ejercicios:

Servidor: labsystem1.home.cert.com 
Interfaces de red: ens8, ens9

Comenzaremos con la implementacion a travez de “teaming”. Es impotante que sepan que ustedes pueden aplicar el “runner” (corredor) que quieran. Solo por propositos de este ejercicio vamos a utilizar activebackup

Para facilitar nuestro trabajo, ya he creado el siguiente script el cual le llame “teaming-script”. Usted si prefiere puede editar el “gateway” y “dns”. Tambien usted puede realizar esta configuracion ejecutando cada comando del script.

#!/bin/bash
#
#	create-team0
#

PATH=/bin:/usr/bin:/sbin:/usr/sbin

echo 'Create teaminterface....'
nmcli con add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}'

echo 'Assign the team IPV4 network settings...'
nmcli con mod team0 ipv4.address 192.168.4.5/24
nmcli con mod team0 ipv4.gateway 192.168.4.2
nmcli con mod team0 ipv4.dns 192.168.4.2
nmcli con mod team0 ipv4.method manual

echo 'Create each of the ports...'
nmcli con add type team-slave con-name team0-port1 ifname ens8 master team0
nmcli con add type team-slave con-name team0-port2 ifname ens9 master team0

nmcli connection down team0

nmcli connection up team0-port1
nmcli connection up team0-port2

Si usted tiene alguna duda sobre como utilizar el runner, es decir el formato correcto, pues para esto puede verificarlo en dos lugares. Puede ejecutar “man teamd.conf“, o puede verificar los ejemplos que estan en la ayuda del sistema:

[root@labsystem1 ~]# cd /usr/share/doc/teamd-1.25/example_configs/
[root@labsystem1 example_configs]# ls
activebackup_arp_ping_1.conf  activebackup_ethtool_1.conf  activebackup_ethtool_3.conf   activebackup_nsna_ping_1.conf  broadcast.conf  loadbalance_1.conf  loadbalance_3.conf  roundrobin_2.conf
activebackup_arp_ping_2.conf  activebackup_ethtool_2.conf  activebackup_multi_lw_1.conf  activebackup_tipc.conf         lacp_1.conf     loadbalance_2.conf  random.conf         roundrobin.conf
[root@labsystem1 example_configs]#

Entonces simplemente ejecutamos el script y comenzamos con nuestra verificacion. La salida despues de ejecutar el script es la siguiente:

[root@labsystem1 ~]# sh teaming-script 
Create teaminterface....
Connection 'team0' (f46e2a33-1f1c-4ab2-8d54-867c1d37e26e) successfully added.
Assign the team IPV4 network settings...
Create each of the ports...
Connection 'team0-port1' (21f94801-4bfd-45cc-9f31-8839b781a348) successfully added.
Connection 'team0-port2' (a6e2f725-d9ec-42ac-897a-ae79965b1aa7) successfully added.
Connection 'team0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
[root@labsystem1 ~]#

Despues de esto puede verificar que la direccion IP esta correcta:

[root@labsystem1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:8c:bb:78 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.60/24 brd 192.168.4.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::3350:f60f:73ef:6bd4/64 scope link 
       valid_lft forever preferred_lft forever
3: ens8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000
    link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff
4: ens9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000
    link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:c5:0c:f7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:c5:0c:f7 brd ff:ff:ff:ff:ff:ff
8: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.5/24 brd 192.168.4.255 scope global team0
       valid_lft forever preferred_lft forever
    inet6 fe80::aeb1:ad31:b313:fb7/64 scope link 
       valid_lft forever preferred_lft forever
[root@labsystem1 ~]#

Tambien lo puede verificar de esta forma:

[root@labsystem1 ~]# nmcli -p connection show team0
===============================================================================
                      Connection profile details (team0)
===============================================================================
connection.id:                          team0
connection.uuid:                        f46e2a33-1f1c-4ab2-8d54-867c1d37e26e
connection.stable-id:                   --
connection.interface-name:              team0
connection.type:                        team
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.timestamp:                   1490423262
connection.read-only:                   no
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
connection.lldp:                        -1 (default)
-------------------------------------------------------------------------------
ipv4.method:                            manual
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.dns-options:                       (default)
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.4.5/24
ipv4.gateway:                           --
ipv4.routes:                            
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.dad-timeout:                       -1 (default)
-------------------------------------------------------------------------------
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.dns-options:                       (default)
ipv6.dns-priority:                      0
ipv6.addresses:                         
ipv6.gateway:                           --
ipv6.routes:                            
ipv6.route-metric:                      -1
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.addr-gen-mode:                     stable-privacy
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
ipv6.token:                             --
-------------------------------------------------------------------------------
team.config:                            {"runner": {"name": "activebackup"}}
-------------------------------------------------------------------------------
===============================================================================
      Activate connection details (f46e2a33-1f1c-4ab2-8d54-867c1d37e26e)
===============================================================================
GENERAL.NAME:                           team0
GENERAL.UUID:                           f46e2a33-1f1c-4ab2-8d54-867c1d37e26e
GENERAL.DEVICES:                        team0
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        no
GENERAL.DEFAULT6:                       no
GENERAL.VPN:                            no
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/8
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/3
GENERAL.SPEC-OBJECT:                    /
GENERAL.MASTER-PATH:                    --
-------------------------------------------------------------------------------
IP4.ADDRESS[1]:                         192.168.4.5/24
IP4.GATEWAY:                            
-------------------------------------------------------------------------------
IP6.ADDRESS[1]:                         fe80::aeb1:ad31:b313:fb7/64
IP6.GATEWAY:                            
-------------------------------------------------------------------------------
[root@labsystem1 ~]#

Tambien, puede mirar el scritp ifcfg que se crea, esto es si usted en un amante de manipular estos archivos directamente:

[root@labsystem1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}}"
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=team0
UUID=f46e2a33-1f1c-4ab2-8d54-867c1d37e26e
ONBOOT=yes
DEVICETYPE=Team
IPADDR=192.168.4.5
PREFIX=24
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
[root@labsystem1 ~]#

Tambien puede realizar un ping utilizando la interfaz creada:

[root@labsystem1 ~]# ping -I team0 google.com
PING google.com (172.217.4.174) from 192.168.4.5 team0: 56(84) bytes of data.
64 bytes from lax28s01-in-f174.1e100.net (172.217.4.174): icmp_seq=1 ttl=50 time=26.5 ms
64 bytes from lax28s01-in-f174.1e100.net (172.217.4.174): icmp_seq=2 ttl=50 time=26.0 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 26.029/26.272/26.516/0.292 ms
[root@labsystem1 ~]#

Como ven esta es la primera parte de nuestra configuracion. Ahora veremos las herramientas que teaming tiene de verificacion. Vamos a ver que podemos hacer con el comando “teamdctl” y “teamnl

[root@labsystem1 ~]# teamdctl team0 state
setup:
  runner: activebackup
ports:
  ens8
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
  ens9
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
runner:
  active port: ens8
[root@labsystem1 ~]# teamnl team0 options
 queue_id (port:ens9) 0 
 priority (port:ens9) 0 
 user_linkup_enabled (port:ens9) false 
 user_linkup (port:ens9) true 
 enabled (port:ens9) false 
 queue_id (port:ens8) 0 
 priority (port:ens8) 0 
 user_linkup_enabled (port:ens8) false 
 user_linkup (port:ens8) true 
 enabled (port:ens8) true 
 activeport 3 
 mcast_rejoin_interval 0 
 mcast_rejoin_count 1 
 notify_peers_interval 0 
 notify_peers_count 1 
 mode activebackup 
[root@labsystem1 ~]# teamdctl team0 config dump
{
    "device": "team0",
    "mcast_rejoin": {
        "count": 1
    },
    "notify_peers": {
        "count": 1
    },
    "ports": {
        "ens8": {
            "link_watch": {
                "name": "ethtool"
            }
        },
        "ens9": {
            "link_watch": {
                "name": "ethtool"
            }
        }
    },
    "runner": {
        "name": "activebackup"
    }
}
[root@labsystem1 ~]#

Aqui tenemos nuestra salida de verificacion. Ahora bien, otras pruebas como desconectar una interfaz de red, y ver que la conexion persista ya que estamos utilizando el runner “activebackup” quedan por su parte.

Espero que en esta primera parte tenga claro como utilizar teaming.

Ahora vamos a continuar con un ejemplo de como utilizar “bond“. Para esto tambien vamos a partir de la configuracion que tenemos en nuestro servidor. Y para facilitar el ejercicio, tambien vamos a ejecutar el siguiente script:

#!/bin/bash
#
#	create-bond0
#

PATH=/bin:/usr/bin:/sbin:/usr/sbin

nmcli con add type bond ifname bond0 con-name bond0 mode active-backup
nmcli con add type bond-slave ifname ens8 con-name bond0-slave1 master bond0
nmcli con add type bond-slave ifname ens9 con-name bond0-slave2 master bond0

nmcli dev show bond0
nmcli con mod bond0 ipv4.addresses 192.168.4.6/24
nmcli con mod bond0 ipv4.method manual
nmcli con mod bond0 ipv4.gateway 192.168.4.2
nmcli con mod bond0 ipv4.dns 192.168.4.2
nmcli con down bond0

nmcli connection up bond0-slave1
nmcli connection up bond0-slave2

Y la salida despues de ejecutar el script es la siguiente:

[root@labsystem1 ~]# sh bonding-script
Connection 'bond0' (56b22b66-544d-449f-8a64-408cb3a26359) successfully added.
Connection 'bond0-slave1' (21e71552-7ed8-4f8b-a339-5202931d7659) successfully added.
Connection 'bond0-slave2' (1bc7de4b-1970-40b7-b84e-bdf77e2bcf19) successfully added.
GENERAL.DEVICE:                         bond0
GENERAL.TYPE:                           bond
GENERAL.HWADDR:                         52:54:00:2F:8A:74
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     bond0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
IP4.ADDRESS[1]:                         192.168.4.130/24
IP4.GATEWAY:                            192.168.4.2
IP4.DNS[1]:                             192.168.4.2
IP6.ADDRESS[1]:                         fe80::e199:b549:c8a5:b857/64
IP6.GATEWAY:                            
Connection 'bond0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)
[root@labsystem1 ~]#

Y realizamos una verificacion rapida:

[root@labsystem1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:8c:bb:78 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.60/24 brd 192.168.4.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::3350:f60f:73ef:6bd4/64 scope link 
       valid_lft forever preferred_lft forever
3: ens8: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff
4: ens9: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:c5:0c:f7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:c5:0c:f7 brd ff:ff:ff:ff:ff:ff
8: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.6/24 brd 192.168.4.255 scope global bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::e199:b549:c8a5:b857/64 scope link 
       valid_lft forever preferred_lft forever
[root@labsystem1 ~]# nmcli connection s
NAME          UUID                                  TYPE            DEVICE 
bond0         56b22b66-544d-449f-8a64-408cb3a26359  bond            bond0  
bond0-slave1  21e71552-7ed8-4f8b-a339-5202931d7659  802-3-ethernet  ens8   
bond0-slave2  1bc7de4b-1970-40b7-b84e-bdf77e2bcf19  802-3-ethernet  ens9   
ens3          5832646e-4d9f-45ba-abc1-5972607f55e9  802-3-ethernet  ens3   
virbr0        6297e8a8-bd13-4861-a1bf-d5fd022c940b  bridge          virbr0 
[root@labsystem1 ~]# 
[root@labsystem1 ~]# ping -I bond0 google.com
PING google.com (172.217.4.174) from 192.168.4.6 bond0: 56(84) bytes of data.
64 bytes from lax28s01-in-f174.1e100.net (172.217.4.174): icmp_seq=1 ttl=50 time=26.6 ms
64 bytes from lax28s01-in-f174.1e100.net (172.217.4.174): icmp_seq=2 ttl=50 time=25.3 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 25.329/26.003/26.677/0.674 ms
[root@labsystem1 ~]#

Y con esto ya tenemos configurado nuestro “bond“.

Ahora solo usted debe decidir que metodo de agrupación o unificación de redes va a utilizar en el examen.

Leave a Reply

Your email address will not be published. Required fields are marked *