Como faço minha interface de rede secundária funcionar em uma instância do EC2 do Ubuntu?

7 minuto de leitura
0

Quero fazer minha interface de rede secundária funcionar na minha instância Ubuntu do Amazon Elastic Compute Cloud (Amazon EC2).

Descrição breve

Aviso: o uso de uma segunda interface de rede elástica é destinado a usuários avançados. Faça isso somente se você não puder usar uma única interface de rede e precisar conectar duas interfaces de rede da mesma sub-rede a uma instância. Para evitar problemas de roteamento assimétrico, use uma única interface de rede elástica ou coloque interfaces de rede elástica duplicadas em sub-redes sem sobreposição.

Adicionar uma interface de rede secundária a uma instância não Amazon Linux do EC2 causa problemas no fluxo de tráfego. Esses problemas ocorrem porque as interfaces de rede primária e secundária estão na mesma sub-rede e há uma tabela de roteamento com um gateway. O tráfego que entra na interface de rede secundária sai da instância usando a interface de rede primária. Porém, isso não é permitido porque o endereço IP secundário não pertence ao endereço MAC da interface de rede primária.

Para fazer com que a interface secundária funcione depois de criá-la, faça o seguinte:

1.    Configure a tabela de roteamento.

2.    Configure regras no banco de dados de políticas da tabela de roteamento personalizada para que o tráfego da interface secundária use a nova tabela de roteamento.

Antes de começar, observe que as instâncias do Amazon EC2 estão na Nuvem AWS. Isso significa que nem todos os casos de uso se beneficiam de ter várias interfaces. Os exemplos a seguir demonstram situações em que talvez você não precise usar uma interface de rede secundária:

  • Aumento da throughput da rede: Como os limites são definidos com base no tipo e no tamanho da instância, a throughput da rede não aumenta. Para mais informações, consulte Amazon EC2 instance types (Tipos de instância do Amazon EC2).
  • Aumento dos endereços IP elásticos: Se você tiver poucos endereços IP elásticos por interface, talvez não seja necessário adicionar mais interfaces para obter mais endereços IP elásticos. A maioria das aplicações funciona bem com o Sistema de nomes de domínio. Por exemplo, o Apache pode usar hosts virtuais baseados em nomes (no site do Apache).

Observação: as etapas para adicionar uma interface de rede secundária são diferentes para cada uma das seguintes versões do Ubuntu:

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

Resolução

Observação: embora as etapas na resolução a seguir tenham sido testadas nas versões listadas do Linux, talvez você precise de pequenas modificações nas configurações personalizadas da sua configuração.

Configuração do Ubuntu 14.04 ou 16.04

Você pode criar o arquivo de configuração da interface secundária, configurar a tabela de roteamento e definir regras de política de roteamento para o Ubuntu usando um único arquivo.

Todos os procedimentos devem ser executados com privilégios de usuário raiz. Torne-se o usuário root com sudo -i ou execute todos os comandos com sudo.

1.     Para obter o nome da interface de rede primária, execute o seguinte comando:

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

Você recebe uma saída semelhante à esta mensagem:

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: neste exemplo, as interfaces primárias são denominadas eth0, eth1 e assim por diante. No entanto, em casos que oferecem suporte a redes aprimoradas, como os tipos de famílias m4 e m5, você pode ver uma inconsistência de nomenclatura. Por exemplo, a primária poderá se chamar ens3 se a secundária se chamar eth0. Essa inconsistência de nomenclatura acontece quando você adiciona a interface secundária enquanto a instância está em execução.

Para evitar uma inconsistência de nomenclatura, adicione a interface no momento da inicialização ou reinicialize a instância. Ou, se a interface estiver em execução, você poderá alterar o nome usando o seguinte comando:

ip link set eth0 name ens4 && ip link set ens4 up

2.    Crie um arquivo de configuração para a interface secundária. No exemplo a seguir, altere eth1 para corresponder ao nome da interface secundária, conforme encontrado na etapa 1:

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

O comando a seguir é um exemplo para um único endereço IP de 172.31.21.115 e com um gateway de 172.31.16.1 na interface secundária. Substitua o endereço IP e o gateway de exemplo pelos seus próprios. Observe também que seu gateway deve ser o primeiro endereço IP válido na sua sub-rede:

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

O comando a seguir é um exemplo para vários endereços IP. Neste exemplo, os endereços IP são 172.31.21.115 e 172.31.18.46, e o gateway é 172.31.16.1. Substitua os endereços IP e o gateway de exemplo pelos seus próprios:

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

3.    Crie o arquivo restrict-default-gw para evitar que o gateway padrão seja sobrescrito na tabela principal::

vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw

4.    Adicione as seguintes linhas ao arquivo restrict-default-gw. Certifique-se de alterar eth0 para o nome da interface principal, conforme encontrado na etapa 1:

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

5.    Reinicie a rede.

Veja o seguinte comando para o Ubuntu 14.04:

(ifdown eth1 && ifup eth1)

Veja o seguinte comando para o Ubuntu 16.04:

systemctl restart networking

Configuração do Ubuntu 18.04 e 20.04

O Ubuntu 18.04 e 20.04 usam a configuração de rede Netplan. Observe que o Netplan usa o formato YAML. Isso significa que a indentação é crucial. O exemplo do Netplan a seguir usa recuo de dois espaços.

Observação: execute todos os comandos com privilégios de usuário raiz. Torne-se o usuário root com sudo -i ou execute todos os comandos com sudo.

1.    Crie um arquivo de configuração para a interface secundária:

vi /etc/netplan/51-eth1.yaml

2.    Adicione as seguintes linhas ao arquivo 51-eth1.yaml. Certifique-se de editar o exemplo a seguir para corresponder ao seu caso de uso:

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

Esse exemplo de arquivo YAML configura dois endereços IP na interface secundária (eth1).

Observação: para encontrar o intervalo CIDR a ser usado no arquivo YAML, conclua as seguintes etapas:

1.    Abra o console do Amazon EC2, selecione Instâncias e, em seguida, selecione a instância.

2.    Na guia Networking (Rede), vá até Network interfaces (Interfaces de rede) e anote o ID da sub-rede da sua interface de rede secundária.

3.    Abra o console do Amazon Virtual Private Cloud (Amazon VPC), selecione Sub-redes e anote o intervalo CIDR IPv4 listado para o ID da sub-rede.

4.    Aplique a configuração de rede:

netplan --debug apply

Informações relacionadas

Configurar tabelas de rotas

AWS OFICIAL
AWS OFICIALAtualizada há um ano