Saltar al contenido

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

10 minutos de lectura
0

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

Descripción corta

Importante: El uso de una segunda interfaz de red elástica está destinado a usuarios avanzados. Use esta solución solo cuando no pueda usar una sola interfaz de red.

Si agrega una interfaz de red secundaria a una instancia que no sea una instancia de EC2 de Amazon Linux, podría provocar problemas de flujo de tráfico. Estos problemas se producen porque la interfaz de red secundaria dirige el tráfico entrante a través de la interfaz de red principal. 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: Ubuntu 24.04 no requiere los siguientes pasos y 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.

Nota: Las instancias de Amazon EC2 se encuentran en la nube de AWS y no todas las instancias se benefician del uso de varias interfaces.

Es posible que no necesite una segunda interfaz de red para aumentar el rendimiento de la red. AWS establece cuotas en función del tipo y el tamaño de la instancia, y esta configuración limita el rendimiento de la red. Para obtener más información, consulte Tipos de instancias de Amazon EC2.

Es posible que tampoco necesite una segunda interfaz de red para aumentar las direcciones IP elásticas. No es necesario agregar 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, consulte Name-based virtual host support (Compatibilidad con hosts virtuales basados en nombres) en el sitio web de Apache.

Los pasos para agregar una interfaz de red secundaria son diferentes para los siguientes sistemas operativos:

  • Ubuntu 14.04
  • Ubuntu 16.04
  • Ubuntu 18.04, 20.04 y 22.04
  • Debian 12 (subredes diferentes)

Resolución

Nota: Los pasos de la siguiente resolución se prueban en las versiones de Linux enumeradas. Modifique los ajustes personalizados de la configuración para ejecutar los siguientes pasos con permisos de usuario raíz. Utilice el usuario raíz con sudo -i o ejecute todos los comandos con sudo.

Configuración de Ubuntu 14.04 o 16.04

Utilice 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.

Siga estos pasos:

  1. Ejecute el siguiente comando para obtener el nombre de la interfaz de red principal:

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

    Salida de ejemplo:

    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 y eth1. Sin embargo, en las instancias que admiten redes mejoradas, como las de la familia m4 y m5, es posible que se produzca una incoherencia en los nombres. Por ejemplo, la interfaz principal podría llamarse ens3 cuando la secundaria se llama eth0. Esta incoherencia en los nombres se produce cuando se agrega la interfaz secundaria mientras la instancia está en ejecución. Para evitar incoherencias en los nombres, agregue la interfaz en el momento del inicio o reinicia la instancia. 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
  2. Cree un archivo de configuración para la interfaz secundaria:

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

    Nota: Sustituya eth1 por 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 172.31.21.115 por su dirección IP y 172.31.16.1 por su puerta de enlace. La puerta de enlace debe ser la primera dirección IP válida de la subred.
    El siguiente comando es un ejemplo de varias direcciones IP:

    auto eth1
    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 172.31.21.115 y 172.31.18.46 por sus direcciones IP y 172.31.16.1 por su puerta de enlace.

  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. Agregue las siguientes líneas al archivo restrict-default-gw:

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

    Nota: Sustituya eth0 por el nombre de la 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

Configuración de Ubuntu 18.04, 20.04 y 22.04

Ubuntu 18.04, 20.04 y 22.04 utilizan la configuración de red de Netplan. Netplan utiliza el formato YAML. La indentación correcta es fundamental en el formato YAML. El siguiente ejemplo de Netplan utiliza una indentación de dos espacios.

Siga estos pasos:

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

    vi /etc/netplan/51-eth1.yaml
  2. Agregue 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
              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 de CIDR que se utilizará en el archivo YAML, siga estos pasos:

  1. Abra la consola de Amazon EC2.
  2. Elija Instances (Instancias) y, a continuación, seleccione la instancia.
  3. En la pestaña Networking (Redes), en Network interfaces (Interfaces de red), anote el ID de subred de la interfaz de red secundaria.
  4. Abra la consola de Amazon VPC.
  5. Elija Subnets (Subredes) y, a continuación, anote el intervalo de CIDR IPv4 que aparece para el ID de subred.
  6. Para aplicar la configuración de red, ejecute el siguiente comando:
    netplan --debug apply

Configuración de Debian 12 con una ENI secundaria en una subred diferente

Debian 12 usa systemd-networkd para la configuración de red de forma predeterminada. Al colocar una ENI secundaria en una subred diferente, debe crear una tabla de enrutamiento de políticas con reglas de enrutamiento basadas en el origen. Sin estas reglas, el tráfico de la interfaz secundaria usa la ruta predeterminada de la interfaz principal y falla.

Importante: En esta sección, se describe una configuración de subred diferente. Las secciones de Ubuntu anteriores solo cubren las configuraciones de la misma subred.

Siga estos pasos:

  1. Confirme que systemd-networkd sea el servicio de red activo:

    for SVC in networking systemd-networkd NetworkManager; do echo "${SVC}: $(systemctl is-active "${SVC}")"; done

    Salida esperada:

    networking: inactive
    systemd-networkd: active
    NetworkManager: inactive

    Si systemd-networkd no está activo, actívelo antes de continuar.

  2. Pruebe la configuración manualmente antes de hacerla persistente:

    IF=ens6
    IP=10.0.2.100
    CIDR=10.0.2.64/26
    GW=10.0.2.65
    TABLE=101
    
    
    sudo ip link set $IF up mtu 9001
    sudo ip addr add $IP/26 dev $IF
    
    
    sudo ip route add $CIDR dev $IF proto static src $IP table $TABLE
    sudo ip route add default via $GW dev $IF table $TABLE
    
    
    sudo ip rule add from $IP/32 lookup $TABLE priority $TABLE

    Nota: Sustituya ens6 por el nombre de la interfaz secundaria, 10.0.2.100 por la IP de la ENI secundaria, 10.0.2.64/26 por el CIDR de la subred secundaria y 10.0.2.65 por la puerta de enlace de la subred secundaria.

  3. Verifique que la interfaz secundaria dirija el tráfico a través de su propia puerta de enlace:

    ip route get 8.8.8.8 from 10.0.2.100

    Salida esperada:

    8.8.8.8 from 10.0.2.100 via 10.0.2.65 dev ens6 table 101 uid 0
        cache
  4. Si la prueba se efectúa correctamente, elimine la configuración temporal:

    sudo ip rule del from $IP/32 lookup $TABLE priority $TABLE
    sudo ip route flush table $TABLE
    sudo ip addr flush dev $IF
  5. Cree un archivo de configuración de systemd-networkd persistente:

    sudo touch /etc/systemd/network/60-ens6.network

    Nota: Sustituya ens6 por el nombre de la interfaz secundaria.

  6. Agregue el siguiente contenido al archivo 60-ens6.network:

    [Match]
    Name=ens6
    
    
    [Link]
    MTUBytes=9001
    
    
    [Network]
    Address=10.0.2.100/26
    IPv6AcceptRA=no
    
    
    [Route]
    Destination=0.0.0.0/0
    Gateway=10.0.2.65
    Table=101
    
    
    [Route]
    Destination=10.0.2.64/26
    Scope=link
    PreferredSource=10.0.2.100
    Table=101
    
    
    [RoutingPolicyRule]
    From=10.0.2.100/32
    Table=101
    Priority=101

    Nota: Sustituya ens6 por el nombre de la interfaz secundaria, 10.0.2.100/26 por la IP y el CIDR de la ENI secundaria, 10.0.2.65 por la puerta de enlace de la subred secundaria y 10.0.2.64/26 por el CIDR de la subred secundaria.

  7. Vuelva a cargar la configuración de la red:

    sudo networkctl reload && sudo networkctl reconfigure ens6

    Nota: Sustituya ens6 por el nombre de la interfaz secundaria.

  8. Establezca el filtro de ruta inversa en modo flexible para permitir el tráfico entrante en la interfaz secundaria. Compruebe los valores actuales:

    sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.ens6.rp_filter

    Si alguno de los valores es 1, cree o actualice /etc/sysctl.d/99-multihome.conf con las siguientes líneas:

    net.ipv4.conf.all.rp_filter = 2
    net.ipv4.conf.default.rp_filter = 2

    Aplique los cambios:

    sudo sysctl --system

    Nota: Al establecer rp_filter=2, se activa el modo flexible. Esto permite que los paquetes lleguen a la interfaz secundaria, incluso si la ruta de retorno utiliza una interfaz diferente.

  9. Verifique que cada interfaz dirija el tráfico a través de su propia puerta de enlace.

    Para la ENI principal:

    ip route get 8.8.8.8 from 10.0.2.12

    Salida esperada:

    8.8.8.8 from 10.0.2.12 via 10.0.2.1 dev ens5 uid 0
        cache

    Para la ENI secundario:

    ip route get 8.8.8.8 from 10.0.2.100

    Salida esperada:

    8.8.8.8 from 10.0.2.100 via 10.0.2.65 dev ens6 table 101 uid 0
        cache
  10. Reinicie la instancia y repita los comandos de verificación del paso 9 para confirmar que la configuración persiste.

Información relacionada

Configurar tablas de enrutamiento

Interfaces de red elásticas

OFICIAL DE AWSActualizada hace un mes