¿Cómo puedo hacer que mi interfaz de red secundaria funcione en mi instancia de EC2 de Ubuntu?

7 minutos de lectura
0

Quiero que mi interfaz de red secundaria funcione en mi instancia de Amazon Elastic Compute Cloud (Amazon EC2) de Ubuntu.

Breve descripción

Advertencia: El uso de una segunda interfaz de red elástica está destinado a usuarios avanzados. Utiliza esta solución únicamente en los siguientes casos prácticos: No puedes usar una sola interfaz de red. Debes conectar dos interfaces de red de la misma subred a una instancia. Para evitar problemas de enrutamiento asimétrico, utiliza una única interfaz de red elástica o coloca las interfaces de red elástica duplicadas en subredes que no se superpongan. O bien, usa Ubuntu 24.04 LTS o una versión posterior.

Añadir una interfaz de red secundaria a una instancia que no sea una instancia de EC2 de Amazon Linux provoca problemas de flujo de tráfico. Estos problemas se producen porque las interfaces de red principal y secundaria están en la misma subred y hay una tabla de enrutamiento con una puerta de enlace. El tráfico que entra en la interfaz de red secundaria utiliza la interfaz de red principal para salir de la instancia. Como la dirección IP secundaria no pertenece a la dirección MAC de la interfaz de red principal, la interfaz secundaria no funciona.

Nota: Los pasos siguientes no son necesarios para Ubuntu 24.04. Ubuntu 24.04 gestiona automáticamente esta configuración avanzada.

Para que la interfaz secundaria funcione después de crearla, siga estos pasos:

  1. Configure la tabla de enrutamiento.
  2. Configure reglas en la base de datos de políticas de la tabla de enrutamiento personalizada para que el tráfico de la interfaz secundaria utilice la nueva tabla de enrutamiento.

Antes de empezar, tenga en cuenta que las instancias de Amazon EC2 se encuentran en la nube de AWS, por lo que no todos los casos de uso se benefician de tener varias interfaces. En los siguientes ejemplos se muestra cuándo es posible que no necesite usar una interfaz de red secundaria:

  • Para aumentar el rendimiento de la red: Como los límites se establecen en función del tipo y tamaño de la instancia, el rendimiento de la red no aumenta. Para obtener más información, consulta Tipos de instancias de Amazon EC2.
  • Para aumentar las direcciones IP elásticas: No es necesario añadir direcciones IP elásticas a la instancia porque la mayoría de las aplicaciones funcionan bien con el DNS. Por ejemplo, Apache puede usar hosts virtuales basados en nombres. Para obtener más información, consulta Name-based virtual host support (Compatibilidad con hosts virtuales basados en nombres) en el sitio web de Apache.

Nota: Los pasos para añadir una interfaz de red secundaria son diferentes para cada una de las siguientes versiones de Ubuntu:

  • Ubuntu 14.04
  • Ubuntu 16.04
  • Ubuntu 18.04
  • Ubuntu 20.04
  • Ubuntu 22.04

Resolución

Nota: Si bien los pasos de la siguiente resolución se han probado en las versiones de Linux enumeradas, es posible que tengas que modificar los ajustes personalizados de la configuración. Todos los procedimientos deben ejecutarse con privilegios de usuario raíz. Conviértete en el usuario raíz con sudo -i o ejecuta todos los comandos con sudo.

Configurar Ubuntu 14.04 o 16.04

Puede utilizar un solo archivo para crear el archivo de configuración de la interfaz secundaria, configurar la tabla de enrutamiento y establecer las reglas de política de enrutamiento para Ubuntu.

Para configurar Ubuntu 14.04 o 16.04, siga estos pasos:

  1. Para obtener el nombre de la interfaz de red principal, ejecute el siguiente comando:

    ip a | grep ^[[:digit:]]

    Obtendrá un resultado similar al mensaje siguiente:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000

    Importante: En el ejemplo anterior, las interfaces principales se denominan eth0, eth1, etc. Sin embargo, en los casos que admiten redes mejoradas, como los tipos de familia m4 y m5, es posible que se produzca una incoherencia en los nombres. Por ejemplo, la principal podría llamarse ens3 si la secundaria se denomina eth0. Esta incoherencia en los nombres se produce cuando se añade la interfaz secundaria mientras la instancia está en ejecución. Para evitar incoherencias en los nombres, añade la interfaz en el momento del inicio o reinicia la instancia. O bien, si la interfaz se está ejecutando, utilice el siguiente comando para cambiar el nombre:

    ip link set eth0 name ens4
    ip link set ens4 up
    ip link show ens4 --->verify
  2. Cree un archivo de configuración para la interfaz secundaria:

    vi /etc/network/interfaces.d/51-eth1.cfg

    Nota: Cambia eth1 para que coincida con el nombre de la interfaz secundaria.

    El siguiente comando es un ejemplo de una dirección IP única de 172.31.21.115 con una puerta de enlace de 172.31.16.1 en la interfaz secundaria:

    auto eth1  
    iface eth1 inet static address 172.31.21.115  
    netmask 255.255.240.0
    
    # Gateway configuration
    up ip route add default via 172.31.16.1 dev eth1 table 1000
    
    # Routes and rules
    up ip route add 172.31.21.115 dev eth1 table 1000
    up ip rule add from 172.31.21.115 lookup 1000

    Nota: Sustituya la dirección IP y la puerta de enlace del ejemplo por su propia información. Su puerta de enlace debe ser la primera dirección IP válida de su subred.

    El siguiente comando es un ejemplo de varias direcciones IP. En este ejemplo, las direcciones IP son 172.31.21.115 y 172.31.18.46, y la puerta de enlace es 172.31.16.1:

    auto eth1
    # Enter one or more IP settings
    iface eth1 inet static
    address 172.31.21.115
    netmask 255.255.240.0
    
    iface eth1 inet static
    address 172.31.18.46
    netmask 255.255.240.0
    
    # Default gateway for eth1
    up ip route add default via 172.31.16.1 dev eth1 table 1000
    
    # A route for every IP
    up ip route add 172.31.21.115 dev eth1 table 1000
    up ip route add 172.31.18.46 dev eth1 table 1000
    
    # A policy rule for every IP
    up ip rule add from 172.31.21.115 lookup 1000
    up ip rule add from 172.31.18.46 lookup 1000

    Nota: Sustituya las direcciones IP y la puerta de enlace de ejemplo por las suyas propias.

  3. Cree el archivo restrict-default-gw para evitar que la puerta de enlace predeterminada se sobrescriba en la tabla principal:

    vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
  4. Añada las siguientes líneas al archivo restrict-default-gw:

    case ${interface} in  eth0)    ;;  *)
        unset new_routers
        ;;
    esac

    Nota: Sustituya eth0 por el nombre de su interfaz principal.

  5. Reinicie la red.

    Para Ubuntu 14.04, ejecute el siguiente comando:

    (ifdown eth1 && ifup eth1)

    Para Ubuntu 16.04, ejecute el siguiente comando:

    systemctl restart networking

Configurar Ubuntu 18.04, 20.04 y 22.04

Ubuntu 18.04, 20.04 y 22.04 utilizan la configuración de red de Netplan. Tenga en cuenta que Netplan usa el formato YAML. Este formato YAML significa que la indentación es fundamental. El siguiente ejemplo de Netplan utiliza una indentación de dos espacios.

Para configurar Ubuntu 18.04, 20.04 y 22.04, siga estos pasos:

  1. Cree un archivo de configuración para la interfaz secundaria:

    vi /etc/netplan/51-eth1.yaml
  2. Añada las siguientes líneas al archivo 51-eth1.yaml:

    network:  version: 2  renderer: networkd    
     ethernets:
        eth1:
          addresses:
           - 172.31.24.153/20
           - 172.31.28.195/20
          dhcp4: no
          routes:
           - to: 0.0.0.0/0
             via: 172.31.16.1 # Default gateway
             table: 1000
           - to: 172.31.24.153
             via: 0.0.0.0
             scope: link
             table: 1000
           - to: 172.31.28.195
             via: 0.0.0.0
             scope: link
             table: 1000
          routing-policy:
            - from: 172.31.24.153
              table: 1000
            - from: 172.31.28.195
              table: 1000

    Nota: Sustituya la información del ejemplo anterior por información específica para su caso de uso. Este archivo YAML del ejemplo anterior configura dos direcciones IP en eth1, la interfaz secundaria.

Para encontrar el rango CIDR que se va a utilizar en el archivo YAML, siga estos pasos:

  1. Abra la consola de Amazon EC2, seleccione Instancias y, a continuación, seleccione la instancia.
  2. En la pestaña Redes, vaya a Interfaces de red y anote el ID de subred de la interfaz de red secundaria.
  3. Abra la consola de Amazon Virtual Private Cloud (Amazon VPC), seleccione Subredes y, a continuación, anote el rango CIDR de IPv4 indicado para el ID de subred.
  4. Para aplicar la configuración de red, ejecute el siguiente comando:
    netplan --debug apply

Información relacionada

Configure route tables

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 5 meses