Compartir a través de


Configuración de varias interfaces de red en máquinas virtuales Linux de Azure

Se aplica a: ✔️ Máquinas virtuales Linux

Nota:

CentOS al que se hace referencia en este artículo es una distribución de Linux y llegará al final del ciclo de vida (EOL). Tenga en cuenta su uso y planifique en consecuencia. Para obtener más información, consulte Guía de fin de vida de CentOS.

En este artículo se describe cómo configurar varias interfaces de red virtual en máquinas virtuales Linux (VM) de Azure que ejecutan las distribuciones de Linux más comunes.

Resumen

Puede crear una máquina virtual de Azure que tenga varias interfaces de red conectadas a ella. Un escenario común es tener subredes diferentes para la conectividad front-end y back-end, o una red dedicada a una solución de supervisión o copia de seguridad.

En este artículo se proporciona la configuración necesaria para que varias interfaces de red funcionen en una máquina virtual Linux de Azure basada en el siguiente escenario de ejemplo:

  • La máquina virtual tiene dos o más interfaces de red en la misma subred.
  • La máquina virtual tiene dos o más interfaces de red en subredes diferentes, pero en la misma red virtual (VNET).

Para obtener más información, consulte las capturas de pantalla siguientes:

En cada escenario, la conectividad se puede probar desde cualquier máquina virtual de la misma red virtual.

Importante

Este mismo proceso también se puede seguir en máquinas virtuales con más de dos NIC.

Configuración del sistema operativo invitado para varias interfaces de red

Al agregar varias interfaces de red a una máquina virtual Linux, debe crear reglas de enrutamiento. Estas reglas permiten a la máquina virtual enviar y recibir tráfico que pertenece a una interfaz de red específica. De lo contrario, el tráfico no se puede procesar correctamente. Por ejemplo, el tráfico que pertenece a eth1 no se puede procesar correctamente mediante la ruta predeterminada definida.

En las secciones siguientes se proporciona la configuración necesaria para que dos interfaces de red funcionen en máquinas virtuales Linux que ejecutan las distribuciones de Linux más comunes.

Nota:

Ejecute todos los comandos de las secciones siguientes mediante privilegios raíz (cambiando a la raíz o mediante la utilidad de sudo comandos).

En cada sección, supongamos que la máquina virtual tiene dos interfaces de red que tienen cualquiera de las siguientes opciones de configuración:

  • Enrutamiento (la salida del sudo ip route show comando):

    • Dos NIC en la misma subred:

      default via 10.0.1.1 dev eth0 proto static metric 100
      10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.4 metric 100
      10.0.1.0/24 dev eth1 proto kernel scope link src 10.0.1.5 metric 101
      168.63.129.16 via 10.0.1.1 dev eth0 proto dhcp metric 100
      169.254.169.254 via 10.0.1.1 dev eth0 proto dhcp metric 100
      
    • Dos NIC en subredes diferentes, pero en la misma red virtual:

      default via 10.0.1.1 dev eth0 proto static metric 100
      10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.4 metric 100
      10.0.2.0/24 dev eth1 proto kernel scope link src 10.0.2.5 metric 101
      168.63.129.16 via 10.0.1.1 dev eth0 proto dhcp metric 100
      169.254.169.254 via 10.0.1.1 dev eth0 proto dhcp metric 100
      
  • Interfaces (la salida del sudo ip address show comando):

    • Dos NIC en la misma subred:

      lo: inet 127.0.0.1/8 scope host lo
      eth0: inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0
      eth1: inet 10.0.1.5/24 brd 10.0.1.255 scope global eth1
      
    • Dos NIC en subredes diferentes, pero en la misma red virtual:

      lo: inet 127.0.0.1/8 scope host lo
      eth0: inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0
      eth1: inet 10.0.2.5/24 brd 10.0.2.255 scope global eth1
      
  1. Agregue dos tablas de enrutamiento al archivo /etc/iproute2/rt_tables ejecutando los comandos siguientes (necesita una entrada por NIC):

    sudo echo "200 eth0-rt" >> /etc/iproute2/rt_tables
    sudo echo "201 eth1-rt" >> /etc/iproute2/rt_tables
    

    Si hay más interfaces de red conectadas a la máquina virtual, agregue tablas de enrutamiento adicionales (por ejemplo, 202 eth2-rt, 203 eth3-rt, etc.).

  2. Asegúrese de que existe un archivo de configuración para cada interfaz de red en el directorio /etc/sysconfig/network-scripts/ . Puede crear nuevos archivos de configuración de interfaz de red basados en el archivo de configuración ifcfg-eth0 (modifique la DEVICE línea y quite las DHCP_HOSTNAME líneas y HWADDR del nuevo archivo). Para ello, ejecute los siguientes comandos:

    sudo cat /etc/sysconfig/network-scripts/ifcfg-eth0 > /etc/sysconfig/network-scripts/ifcfg-eth1
    sudo sed -i 's/DEVICE=eth0/DEVICE=eth1/' /etc/sysconfig/network-scripts/ifcfg-eth1
    sudo sed -i '/DHCP_HOSTNAME/d' /etc/sysconfig/network-scripts/ifcfg-eth1
    sudo sed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth1
    
  3. Para realizar el cambio persistente y aplicado durante la activación de la pila de red, edite los archivos /etc/sysconfig/network-scripts/ifcfg-eth0 y /etc/sysconfig/network-scripts/ifcfg-eth1 (ifcfg-eth2, ifcfg-eth3, etc., si la máquina virtual tiene más de dos interfaces de red) y cambia el valor de NM_CONTROLLED de a yes no. Para ello, ejecute los siguientes comandos:

    sudo cp -rp /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/ifcfg-eth0.bkp
    sudo cp -rp /etc/sysconfig/network-scripts/ifcfg-eth1 /tmp/ifcfg-eth1.bkp
    sudo sed -i 's/NM_CONTROLLED=yes/NM_CONTROLLED=no/' /etc/sysconfig/network-scripts/ifcfg-eth0
    sudo sed -i 's/NM_CONTROLLED=yes/NM_CONTROLLED=no/' /etc/sysconfig/network-scripts/ifcfg-eth1
    

    Nota:

    Compruebe que la NM_CONTROLLED=no línea se agrega a los archivos /etc/sysconfig/network-scripts/ifcfg-eth0 y /etc/sysconfig/network-scripts/ifcfg-eth1 mediante el cat /etc/sysconfig/network-scripts/ifcfg-eth* comando . Si la línea no está en los archivos, agréguela manualmente mediante los sudo echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0 comandos y sudo echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth1 .

  4. Después de modificar esta configuración, reinicie los servicios de red para aplicar los cambios mediante la ejecución del comando siguiente:

    sudo systemctl restart network
    
  5. Cree archivos de regla y ruta correspondientes mediante cualquier editor de texto (en los ejemplos siguientes, se usa el editor vi) y agregue reglas y rutas adecuadas a cada archivo. Siga estos pasos para crear un conjunto de archivos rule-eth# y route-eth# por interfaz de red. Reemplace la dirección IP y la información de subred en consecuencia en cada paso. Si tiene más interfaces de red, cree el mismo conjunto de archivos rule-eth# y route-eth# para cada interfaz mediante la dirección IP, la red y los detalles de la puerta de enlace correspondientes.

    • Cree reglas y rutas para eth0:

      1. Para crear el archivo de regla para eth0, abra el archivo /etc/sysconfig/network-scripts/rule-eth0.

        sudo vi /etc/sysconfig/network-scripts/rule-eth0
        
      2. Agregue el siguiente contenido al archivo de reglas. Reemplace la dirección IP en consecuencia, asegúrese de especificar la dirección IPv4 en la configuración y conserve el valor de 32 bits:

        from 10.0.1.4/32 table eth0-rt
        to 10.0.1.4/32 table eth0-rt
        
      3. Para crear el archivo de ruta para eth0, abra el archivo /etc/sysconfig/network-scripts/route-eth0.

        sudo vi /etc/sysconfig/network-scripts/route-eth0
        
      4. Agregue el siguiente contenido al archivo de ruta. Reemplace los valores de red y puerta de enlace en consecuencia.

        10.0.1.0/24 dev eth0 table eth0-rt
        default via 10.0.1.1 dev eth0 table eth0-rt
        
    • Cree reglas y rutas para eth1:

      1. Para crear el archivo de regla para eth1, abra el archivo /etc/sysconfig/network-scripts/rule-eth1.

        sudo vi /etc/sysconfig/network-scripts/rule-eth1
        
      2. Agregue el siguiente contenido al archivo de reglas. Reemplace la dirección IP en consecuencia, asegúrese de especificar la dirección IPv4 en el comando y conserve el valor de 32 bits.

        • Dos NIC en la misma subred:

          from 10.0.1.5/32 table eth1-rt
          to 10.0.1.5/32 table eth1-rt
          
        • Dos NIC en subredes diferentes, pero en la misma red virtual:

          from 10.0.2.5/32 table eth1-rt
          to 10.0.2.5/32 table eth1-rt
          
      3. Para crear el archivo de ruta para eth1, abra el archivo /etc/sysconfig/network-scripts/route-eth1.

        sudo vi /etc/sysconfig/network-scripts/route-eth1
        
      4. Agregue el siguiente contenido al archivo de ruta. Reemplace los valores de red y puerta de enlace en consecuencia.

        • Dos NIC en la misma subred:

          10.0.1.0/24 dev eth1 table eth1-rt
          default via 10.0.1.1 dev eth1 table eth1-rt
          
        • Dos NIC en subredes diferentes, pero en la misma red virtual:

          10.0.2.0/24 dev eth1 table eth1-rt
          default via 10.0.2.1 dev eth1 table eth1-rt
          
  6. Para aplicar los cambios, ejecute el siguiente comando para reiniciar el servicio de red:

    sudo systemctl restart network
    

    Las reglas de enrutamiento ahora están configuradas correctamente y la conectividad debe funcionar desde cualquier interfaz de red. Puede probar la conectividad mediante Secure Shell (SSH) o hacer ping a ambas direcciones IP desde una máquina virtual en la misma red virtual.

  7. Compruebe que las rutas y reglas actuales se cargan mediante los siguientes comandos:

    sudo ip route show
    sudo ip rule show
    

Importante

Si sigue teniendo problemas para comunicarse con la segunda NIC, reinicie la máquina virtual mediante el comando , repita el sudo reboot paso 7 y vuelva a probar la conectividad.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.