Aplica-se a: ✔️ VMs do Linux
Observação
O CentOS mencionado neste artigo é uma distribuição Linux e chegará ao fim da vida útil (EOL). Considere seu uso e planeje adequadamente. Para obter mais informações, consulte Diretrizes de fim da vida útil do CentOS.
Este artigo discute como configurar vários adaptadores de rede virtual em VMs (máquinas virtuais) Linux do Azure que executam as distribuições Linux mais comuns.
Resumo
Você pode criar uma VM do Azure que tenha vários adaptadores de rede anexados a ela. Um cenário comum é ter sub-redes diferentes para conectividade de front-end e back-end ou uma rede dedicada a uma solução de monitoramento ou backup.
Este artigo fornece a configuração necessária para que vários adaptadores de rede funcionem em uma VM Linux do Azure com base no seguinte cenário de exemplo:
- A VM tem dois ou mais adaptadores de rede na mesma sub-rede.
- A VM tem dois ou mais adaptadores de rede em sub-redes diferentes, mas na mesma VNET (Rede Virtual).
Para obter detalhes, consulte as seguintes capturas de tela:
Em cada cenário, a conectividade pode ser testada de qualquer VM na mesma VNET.
Importante
Esse mesmo processo também pode ser seguido em VMs com mais de duas NICs.
Ao adicionar vários adaptadores de rede a uma VM do Linux, você precisa criar regras de roteamento. Essas regras permitem que a VM envie e receba tráfego que pertence a um adaptador de rede específico. Caso contrário, o tráfego não poderá ser processado corretamente. Por exemplo, o tráfego que pertence a eth1 não pode ser processado corretamente pela rota padrão definida.
As seções a seguir fornecem a configuração necessária para que dois adaptadores de rede funcionem em VMs do Linux que executam as distribuições Linux mais comuns.
Observação
Execute todos os comandos nas seções a seguir usando privilégios de root (alternando para a raiz ou usando o utilitário de sudo
comando).
Em cada seção, suponha que a VM tenha dois adaptadores de rede que tenham qualquer uma das seguintes configurações:
Adicione duas tabelas de roteamento ao arquivo /etc/iproute2/rt_tables executando os seguintes comandos (você precisa de uma entrada por NIC):
sudo echo "200 eth0-rt" >> /etc/iproute2/rt_tables
sudo echo "201 eth1-rt" >> /etc/iproute2/rt_tables
Se mais interfaces de rede estiverem conectadas à VM, adicione tabelas de roteamento extras (por exemplo, 202 eth2-rt, 203 eth3-rt e assim por diante).
Certifique-se de que exista um arquivo de configuração para cada interface de rede no diretório /etc/sysconfig/network-scripts/ . Você pode criar novos arquivos de configuração de interface de rede com base no arquivo de configuração ifcfg-eth0 (modifique a DEVICE
linha e remova as DHCP_HOSTNAME
linhas e HWADDR
do novo arquivo). Para fazer isso, execute os seguintes 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 tornar a alteração persistente e aplicada durante a ativação da pilha de rede, edite os arquivos /etc/sysconfig/network-scripts/ifcfg-eth0 e /etc/sysconfig/network-scripts/ifcfg-eth1 (ifcfg-eth2, ifcfg-eth3 e assim por diante, se a VM tiver mais de dois adaptadores de rede) e altere o valor de NM_CONTROLLED
de para yes
no
. Para fazer isso, execute os seguintes 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
Observação
Verifique se a NM_CONTROLLED=no
linha foi adicionada aos arquivos /etc/sysconfig/network-scripts/ifcfg-eth0 e /etc/sysconfig/network-scripts/ifcfg-eth1 usando o cat /etc/sysconfig/network-scripts/ifcfg-eth*
comando. Se a linha não estiver nos arquivos, adicione-a manualmente usando os sudo echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0
comandos e sudo echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth1
.
Depois de modificar essa configuração, reinicie os serviços de rede para aplicar as alterações executando o seguinte comando:
sudo systemctl restart network
Crie arquivos de regra e rota correspondentes usando qualquer editor de texto (nos exemplos a seguir, o editor vi é usado) e adicione regras e rotas apropriadas a cada arquivo. Use as etapas a seguir para criar um conjunto de arquivos rule-eth# e route-eth# por interface de rede. Substitua o endereço IP e as informações da sub-rede de acordo em cada etapa. Se você tiver mais interfaces de rede, crie o mesmo conjunto de arquivos rule-eth# e route-eth# para cada interface usando o endereço IP, a rede e os detalhes do gateway correspondentes.
Para aplicar as alterações, execute o seguinte comando para reiniciar o serviço de rede:
sudo systemctl restart network
As regras de roteamento agora estão definidas corretamente e a conectividade deve funcionar em qualquer interface de rede. Você pode testar a conectividade usando o SSH (Secure Shell) ou executando ping em ambos os IPs de uma VM na mesma VNET.
Verifique se as rotas e regras atuais são carregadas usando os seguintes comandos:
sudo ip route show
sudo ip rule show
Importante
Se você ainda tiver problemas de comunicação com a segunda NIC, reinicie a VM usando o comando, repita a sudo reboot
etapa 7 e teste a conectividade novamente.
Por padrão, o roteamento de política não é instalado no Red Hat Enterprise Linux (RHEL)/CentOS 8.x. Para configurar vários adaptadores de rede, instale e habilite o roteamento de política. Para fazer isso, execute os seguintes comandos:
sudo yum install NetworkManager-dispatcher-routing-rules -y
sudo systemctl enable NetworkManager-dispatcher.service
sudo systemctl start NetworkManager-dispatcher.service
No RHEL/CentOS 8.x, a NM_CONTROLLED
configuração é definida como yes
em cada arquivo de configuração de rede (/etc/sysconfig/network-scripts/ifcfg-eth#) por padrão. Para evitar problemas, verifique se essa configuração não está definida como no
em seu arquivo de configuração específico. Além disso, certifique-se de que um arquivo de configuração de rede correspondente seja criado para cada adaptador de rede. Veja a seguir a configuração de exemplo para arquivos de configuração de rede:
/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
Execute os seguintes comandos para adicionar duas tabelas de roteamento ao arquivo /etc/iproute2/rt_tables :
sudo echo "200 eth0-rt" >> /etc/iproute2/rt_tables
sudo echo "201 eth1-rt" >> /etc/iproute2/rt_tables
Se mais interfaces de rede estiverem conectadas à VM, adicione tabelas de roteamento extras (por exemplo, 202 eth2-rt, 203 eth3-rt e assim por diante).
Crie os arquivos de configuração de regras e rotas correspondentes para cada uma das NICs e adicione as regras e rotas apropriadas a cada uma. Para criar um conjunto de arquivos rule-eth# e route-eth# por interface de rede, siga as etapas abaixo. Substitua o endereço IP e as informações da sub-rede de acordo em cada etapa. Se você tiver mais interfaces de rede, crie o mesmo conjunto de arquivos rule-eth# e route-eth# para cada interface usando os detalhes de IP e sub-rede correspondentes.
Para aplicar as alterações, reinicie o serviço de rede executando o seguinte comando:
sudo systemctl restart NetworkManager
As regras de roteamento agora estão definidas corretamente e a conectividade deve funcionar em qualquer interface de rede. Você pode testar a conectividade usando o SSH (Secure Shell) ou executando ping em ambos os IPs de uma VM na mesma VNET.
Verifique se as rotas e regras atuais são carregadas usando os seguintes comandos:
sudo ip route show
sudo ip rule show
Importante
Se você ainda não tiver conectividade com a segunda NIC, reinicie a VM usando o comando, repita a sudo reboot
etapa 6 e teste a conectividade novamente.
Adicione duas tabelas de roteamento ao arquivo /etc/iproute2/rt_tables executando os seguintes comandos:
sudo echo "200 eth0-rt" >> /etc/iproute2/rt_tables
sudo echo "201 eth1-rt" >> /etc/iproute2/rt_tables
Se mais interfaces de rede estiverem conectadas à VM, adicione tabelas de roteamento extras (por exemplo, 202 eth2-rt, 203 eth3-rt e assim por diante).
Se a automação de inicialização de nuvem estiver definida (por padrão, ela está definida nas imagens do Ubuntu do Azure), verifique se a automação de CI de rede está desabilitada para que o arquivo /etc/netplan/50-cloud-init.yaml não seja substituído sempre que o sistema for reiniciado.
Crie o arquivo /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg usando o seguinte comando e conteúdo:
sudo vi /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
network:
config: disabled
Modifique o arquivo de configuração do netplan /etc/netplan/50-cloud-init.yaml usando qualquer editor de texto e inclua as seguintes rotas e blocos de roteamento de política para cada seção de interface de rede:
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>
Substitua as informações de sub-rede, endereço MAC e endereço IP para cada interface de rede (eth0 e eth1) de acordo. Certifique-se de que o valor de 32 bits seja preservado no routing-policy
bloco.
Aqui está o arquivo de configuração de exemplo que usa os detalhes de exemplo fornecidos:
sudo vi /etc/netplan/50-cloud-init.yaml
Duas NICs na mesma sub-rede:
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
Duas NICs em sub-redes diferentes, mas na mesma VNET:
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
Se você usar qualquer um dos exemplos de arquivo de configuração anteriores, certifique-se de que o valor do endereço MAC seja substituído de acordo. Você pode obter o endereço MAC da NIC correspondente na saída do ip a | grep ether | awk '{print $2}'
comando.
Aplique as alterações executando o seguinte comando:
sudo netplan apply
Para testar a conectividade, faça ping ou SSH em ambos os IPs de outra VM na mesma VNET:
ping 10.0.1.4
ping 10.0.1.5
Adicione duas tabelas de roteamento ao arquivo /etc/iproute2/rt_tables executando os seguintes comandos:
sudo echo "200 eth0-rt" >> /etc/iproute2/rt_tables
sudo echo "201 eth1-rt" >> /etc/iproute2/rt_tables
Se mais interfaces de rede estiverem conectadas à VM, adicione tabelas de roteamento extras (por exemplo, 202 eth2-rt, 203 eth3-rt e assim por diante).
Crie os scripts que têm as rotas e regras para cada interface de rede no diretório /etc/sysconfig/network/scripts/ usando qualquer editor de texto (nos comandos a seguir, o editor de texto vi é usado).
/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
Duas NICs na mesma sub-rede:
#!/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
Duas NICs em sub-redes diferentes, mas na mesma VNET:
#!/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 as informações de rede e endereço IP de acordo e preserve o valor de 32 bits. Se houver mais de duas NICs, certifique-se de que as regras de IP e as rotas de IP correspondentes estejam incluídas para cada uma.
Forneça permissões de execução para ambos os scripts usando os seguintes comandos:
sudo chmod +x /etc/sysconfig/network/scripts/ifup-route.eth0
sudo chmod +x /etc/sysconfig/network/scripts/ifup-route.eth1
Modifique os arquivos de configuração de rede para eth0 e eth1 (/etc/sysconfig/network/ifcfg-eth#) usando qualquer editor de texto e inclua a seguinte linha em ambos os arquivos para apontar para o script correspondente:
No arquivo de configuração de rede /etc/sysconfig/network/ifcfg-eth0:
POST_UP_SCRIPT='compat:suse:/etc/sysconfig/network/scripts/ifup-route.eth0'
No arquivo de configuração de rede /etc/sysconfig/network/ifcfg-eth1:
POST_UP_SCRIPT='compat:suse:/etc/sysconfig/network/scripts/ifup-route.eth1'
Aqui está um exemplo de ambos os arquivos de configuração:
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'
Se o arquivo /etc/sysconfig/network/ifcfg-eth1 não existir, crie-o usando o conteúdo do arquivo /etc/sysconfig/network/ifcfg-eth0 . Certifique-se de que o POST_UP_SCRIPT
está ajustado para usar o script correspondente. Para fazer isso, execute o seguinte comando:
sudo cat /etc/sysconfig/network/ifcfg-eth0 > /etc/sysconfig/network/ifcfg-eth1
Para aplicar as alterações, reinicie o serviço de rede:
sudo systemctl restart network
As regras de roteamento agora estão definidas corretamente e a conectividade deve funcionar em qualquer interface de rede. Você pode testar a conectividade usando o SSH (Secure Shell) ou executando ping em ambos os IPs de uma VM na mesma VNET.
Verifique se as rotas e regras atuais são carregadas usando os seguintes comandos:
sudo ip route show
sudo ip rule show
Importante
Se você ainda não tiver conectividade com a segunda NIC, reinicie a VM usando o comando, repita a sudo reboot
etapa 6 e teste a conectividade novamente.
Adicione duas tabelas de roteamento ao arquivo /etc/iproute2/rt_tables executando os seguintes comandos:
sudo echo "200 eth0-rt" >> /etc/iproute2/rt_tables
sudo echo "201 eth1-rt" >> /etc/iproute2/rt_tables
Se mais interfaces de rede estiverem conectadas à VM, adicione tabelas de roteamento extras (por exemplo, 202 eth2-rt, 203 eth3-rt e assim por diante).
Crie ou modifique o arquivo de configuração /etc/network/interfaces.d/50-cloud-init com qualquer editor de texto.
sudo vi /etc/network/interfaces.d/50-cloud-init
Use a seguinte configuração:
Duas NICs na mesma sub-rede:
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
Duas NICs em sub-redes diferentes, mas na mesma VNET:
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 as informações de rede e endereço IP de acordo e preserve o valor de 32 bits. Se houver mais de duas NICs, certifique-se de que as regras de IP e as rotas de IP correspondentes estejam incluídas para cada uma.
Ative a nova configuração usando o seguinte comando:
sudo systemctl restart networking
As regras de roteamento agora estão definidas corretamente e a conectividade deve funcionar em qualquer interface de rede. Você pode testar a conectividade usando o SSH (Secure Shell) ou executando ping em ambos os IPs de uma VM na mesma VNET.
Verifique se as rotas e regras atuais são carregadas usando os seguintes comandos:
sudo ip route show
sudo ip rule show
Importante
Se você ainda não tiver conectividade com a segunda NIC, reinicie a VM usando o comando, repita a sudo reboot
etapa 4 e teste a conectividade novamente.
Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.