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.
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:
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.).
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
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
.
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
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.
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.
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.
De forma predeterminada, el enrutamiento de directivas no está instalado en Red Hat Enterprise Linux (RHEL)/CentOS 8.x. Para configurar varias interfaces de red, instale y habilite el enrutamiento de directivas. Para ello, ejecute los siguientes comandos:
sudo yum install NetworkManager-dispatcher-routing-rules -y
sudo systemctl enable NetworkManager-dispatcher.service
sudo systemctl start NetworkManager-dispatcher.service
En RHEL/CentOS 8.x, la NM_CONTROLLED
configuración se establece yes
en en cada archivo de configuración de red (/etc/sysconfig/network-scripts/ifcfg-eth#) de forma predeterminada. Para evitar problemas, asegúrese de que esta configuración no está establecida no
en en el archivo de configuración específico. Además, asegúrese de que se crea un archivo de configuración de red correspondiente por cada interfaz de red. A continuación se muestra la configuración de ejemplo para los archivos de configuración de red:
/etc/sysconfig/network-scripts/ifcfg-eth0:
sudo cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=no
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=yes
/etc/sysconfig/network-scripts/ifcfg-eth1:
sudo cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=no
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=yes
Ejecute los siguientes comandos para agregar dos tablas de enrutamiento al archivo /etc/iproute2/rt_tables :
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.).
Cree las reglas y los archivos de configuración de rutas correspondientes para cada una de las NIC y agregue las reglas y rutas adecuadas a cada una. Para crear un conjunto de archivos rule-eth# y route-eth# por interfaz de red, siga estos pasos. 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 y los detalles de subred correspondientes.
Para aplicar los cambios, reinicie el servicio de red ejecutando el siguiente comando:
sudo systemctl restart NetworkManager
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.
Compruebe que las rutas y reglas actuales se cargan mediante los siguientes comandos:
sudo ip route show
sudo ip rule show
Importante
Si aún no tiene conectividad con la segunda NIC, reinicie la máquina virtual mediante el comando , repita el sudo reboot
paso 6 y vuelva a probar la conectividad.
Agregue dos tablas de enrutamiento al archivo /etc/iproute2/rt_tables mediante la ejecución de los siguientes comandos:
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.).
Si la automatización de Cloud-Init está establecida (de forma predeterminada, se establece en las imágenes de Ubuntu de Azure), asegúrese de que la automatización de CI de red está deshabilitada para que el archivo /etc/netplan/50-cloud-init.yaml no se sobrescriba cada vez que se reinicie el sistema.
Cree el archivo /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg mediante el siguiente comando y contenido:
sudo vi /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
network:
config: disabled
Modifique el archivo de configuración de netplan /etc/netplan/50-cloud-init.yaml mediante cualquier editor de texto e incluya las siguientes rutas y bloques de enrutamiento de directivas para cada sección de interfaz de red:
routes:
- to: <subnet>/24
via: <gatewayIP>
metric: 200
table: 201
- to: 0.0.0.0/0
via: <gatewayIP>
table: <routingTableID>
routing-policy:
- from: <NICIP>/32
table: <routingTableID>
- to: <NICIP>/32
table: <routingTableID>
Reemplace la información de subred, dirección MAC y dirección IP de cada interfaz de red (eth0 y eth1) en consecuencia. Asegúrese de que el valor de 32 bits se conserva en el routing-policy
bloque .
Este es el archivo de configuración de ejemplo que usa los detalles de ejemplo especificados:
sudo vi /etc/netplan/50-cloud-init.yaml
Dos NIC en la misma subred:
network:
ethernets:
eth0:
dhcp4: true
dhcp4-overrides:
route-metric: 100
dhcp6: false
match:
driver: hv_netvsc
macaddress: 00:0d:3a:9d:60:e6
set-name: eth0
routes:
- to: 10.0.1.0/24
via: 10.0.1.1
metric: 200
table: 200
- to: 0.0.0.0/0
via: 10.0.1.1
table: 200
routing-policy:
- from: 10.0.1.4/32
table: 200
- to: 10.0.1.4/32
table: 200
eth1:
dhcp4: true
dhcp4-overrides:
route-metric: 200
dhcp6: false
match:
driver: hv_netvsc
macaddress: 00:0d:3a:9a:25:5f
set-name: eth1
routes:
- to: 10.0.1.0/24
via: 10.0.1.1
metric: 200
table: 201
- to: 0.0.0.0/0
via: 10.0.1.1
table: 201
routing-policy:
- from: 10.0.1.5/32
table: 201
- to: 10.0.1.5/32
table: 201
version: 2
Dos NIC en subredes diferentes, pero en la misma red virtual:
network:
ethernets:
eth0:
dhcp4: true
dhcp4-overrides:
route-metric: 100
dhcp6: false
match:
driver: hv_netvsc
macaddress: 00:0d:3a:9d:60:e6
set-name: eth0
routes:
- to: 10.0.1.0/24
via: 10.0.1.1
metric: 200
table: 200
- to: 0.0.0.0/0
via: 10.0.1.1
table: 200
routing-policy:
- from: 10.0.1.4/32
table: 200
- to: 10.0.1.4/32
table: 200
eth1:
dhcp4: true
dhcp4-overrides:
route-metric: 200
dhcp6: false
match:
driver: hv_netvsc
macaddress: 00:0x:3x:9x:03:5f
set-name: eth1
routes:
- to: 10.0.2.0/24
via: 10.0.2.1
metric: 200
table: 201
- to: 0.0.0.0/0
via: 10.0.2.1
table: 201
routing-policy:
- from: 10.0.2.5/32
table: 201
- to: 10.0.2.5/32
table: 201
version: 2
Importante
Si usa cualquiera de los ejemplos de archivo de configuración anteriores, asegúrese de que el valor de dirección MAC se reemplaza en consecuencia. Puede obtener la dirección MAC de NIC correspondiente desde la salida del ip a | grep ether | awk '{print $2}'
comando.
Aplique los cambios mediante la ejecución del siguiente comando:
sudo netplan apply
Para probar la conectividad, haga ping o SSH ambas direcciones IP desde otra máquina virtual en la misma red virtual:
ping 10.0.1.4
ping 10.0.1.5
Agregue dos tablas de enrutamiento al archivo /etc/iproute2/rt_tables mediante la ejecución de los siguientes comandos:
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.).
Cree los scripts que tienen las rutas y reglas para cada interfaz de red en el directorio /etc/sysconfig/network/scripts/ mediante cualquier editor de texto (en los comandos siguientes, se usa el editor de texto vi).
/etc/sysconfig/network/scripts/ifup-route.eth0
sudo vi /etc/sysconfig/network/scripts/ifup-route.eth0
#!/bin/bash
/sbin/ip route add default via 10.0.1.1 dev eth0 table eth0-rt
/sbin/ip rule add from 10.0.1.4/32 table eth0-rt
/sbin/ip rule add to 10.0.1.4/32 table eth0-rt
/etc/sysconfig/network/scripts/ifup-route.eth1
sudo vi /etc/sysconfig/network/scripts/ifup-route.eth1
Dos NIC en la misma subred:
#!/bin/bash
/sbin/ip route add 10.0.1.0/24 dev eth1 table eth1-rt
/sbin/ip route add default via 10.0.1.1 dev eth1 table eth1-rt
/sbin/ip rule add from 10.0.1.5/32 table eth1-rt
/sbin/ip rule add to 10.0.1.5/32 table eth1-rt
Dos NIC en subredes diferentes, pero en la misma red virtual:
#!/bin/bash
/sbin/ip route add 10.0.2.0/24 dev eth1 table eth1-rt
/sbin/ip route add default via 10.0.2.1 dev eth1 table eth1-rt
/sbin/ip rule add from 10.0.2.5/32 table eth1-rt
/sbin/ip rule add to 10.0.2.5/32 table eth1-rt
Ajuste la información de red y dirección IP según corresponda y conserve el valor de 32 bits. Si hay más de dos NIC, asegúrese de que se incluyen las reglas ip y las rutas IP correspondientes para cada una.
Proporcione permisos de ejecución para ambos scripts mediante los siguientes comandos:
sudo chmod +x /etc/sysconfig/network/scripts/ifup-route.eth0
sudo chmod +x /etc/sysconfig/network/scripts/ifup-route.eth1
Modifique los archivos de configuración de red para eth0 y eth1 (/etc/sysconfig/network/ifcfg-eth#) mediante cualquier editor de texto e incluya la siguiente línea en ambos archivos para que apunten al script correspondiente:
En el archivo de configuración de red /etc/sysconfig/network/ifcfg-eth0:
POST_UP_SCRIPT='compat:suse:/etc/sysconfig/network/scripts/ifup-route.eth0'
En el archivo de configuración de red /etc/sysconfig/network/ifcfg-eth1:
POST_UP_SCRIPT='compat:suse:/etc/sysconfig/network/scripts/ifup-route.eth1'
Este es un ejemplo de ambos archivos de configuración:
sudo cat /etc/sysconfig/network/ifcfg-eth0
BOOTPROTO='dhcp'
DHCLIENT6_MODE='managed'
MTU=''
REMOTE_IPADDR=''
STARTMODE='onboot'
CLOUD_NETCONFIG_MANAGE='yes'
POST_UP_SCRIPT='compat:suse:/etc/sysconfig/network/scripts/ifup-route.eth0'
sudo cat /etc/sysconfig/network/ifcfg-eth1
STARTMODE='hotplug'
BOOTPROTO='dhcp'
DHCLIENT_SET_DEFAULT_ROUTE='yes'
DHCLIENT_ROUTE_PRIORITY='10100'
CLOUD_NETCONFIG_MANAGE='yes'
POST_DOWN_SCRIPT='compat:suse:cloud-netconfig-cleanup'
POST_UP_SCRIPT='compat:suse:/etc/sysconfig/network/scripts/ifup-route.eth1'
Si el archivo /etc/sysconfig/network/ifcfg-eth1 no existe, créelo con el contenido del archivo /etc/sysconfig/network/ifcfg-eth0 . Asegúrese de que POST_UP_SCRIPT
se ajusta para usar el script correspondiente. Para ello, ejecute el siguiente comando:
sudo cat /etc/sysconfig/network/ifcfg-eth0 > /etc/sysconfig/network/ifcfg-eth1
Para aplicar los cambios, reinicie 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.
Compruebe que las rutas y reglas actuales se cargan mediante los siguientes comandos:
sudo ip route show
sudo ip rule show
Importante
Si aún no tiene conectividad con la segunda NIC, reinicie la máquina virtual mediante el comando , repita el sudo reboot
paso 6 y vuelva a probar la conectividad.
Agregue dos tablas de enrutamiento al archivo /etc/iproute2/rt_tables mediante la ejecución de los siguientes comandos:
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.).
Cree o modifique el archivo de configuración /etc/network/interfaces.d/50-cloud-init con cualquier editor de texto.
sudo vi /etc/network/interfaces.d/50-cloud-init
Use la configuración siguiente:
Dos NIC en la misma subred:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
metric 100
up /usr/sbin/ip route add default via 10.0.1.1 dev eth0 table eth0-rt
up /usr/sbin/ip rule add from 10.0.1.4/32 table eth0-rt
up /usr/sbin/ip rule add to 10.0.1.4/32 table eth0-rt
auto eth1
iface eth1 inet dhcp
metric 200
up /usr/sbin/ip route add 10.0.1.0/24 dev eth1 table eth1-rt
up /usr/sbin/ip route add default via 10.0.1.1 dev eth1 table eth1-rt
up /usr/sbin/ip rule add from 10.0.1.5/32 table eth1-rt
up /usr/sbin/ip rule add to 10.0.1.5/32 table eth1-rt
Dos NIC en subredes diferentes, pero en la misma red virtual:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
metric 100
up /usr/sbin/ip route add default via 10.0.1.1 dev eth0 table eth0-rt
up /usr/sbin/ip rule add from 10.0.1.4/32 table eth0-rt
up /usr/sbin/ip rule add to 10.0.1.4/32 table eth0-rt
auto eth1
iface eth1 inet dhcp
metric 200
up /usr/sbin/ip route add 10.0.2.0/24 dev eth1 table eth1-rt
up /usr/sbin/ip route add default via 10.0.2.1 dev eth1 table eth1-rt
up /usr/sbin/ip rule add from 10.0.2.5/32 table eth1-rt
up /usr/sbin/ip rule add to 10.0.2.5/32 table eth1-rt
Ajuste la información de red y dirección IP según corresponda y conserve el valor de 32 bits. Si hay más de dos NIC, asegúrese de que se incluyen las reglas ip y las rutas IP correspondientes para cada una.
Active la nueva configuración mediante el comando siguiente:
sudo systemctl restart networking
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.
Compruebe que las rutas y reglas actuales se cargan mediante los siguientes comandos:
sudo ip route show
sudo ip rule show
Importante
Si aún no tiene conectividad con la segunda NIC, reinicie la máquina virtual mediante el comando , repita el sudo reboot
paso 4 y vuelva a probar la conectividad.
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.