Configuração de rota de instância multi-interface do GCE Ubuntu

Configuração de rota de instância multi-interface do GCE Ubuntu

Estou executando uma instância do Ubuntu 16.04 com múltiplas interfaces. Estou procurando configurar algumas rotas na 2ª interface. Embora eu possa fazer isso manualmente, isso não persiste após a reinicialização.

A maioria dos métodos sugere definir rotas com a interface em /etc/network/interfaces, que se traduz em /etc/network/interfaces.d/50-cloud-init.cfg com base em uma chamada do arquivo de interfaces.

O que me confunde é que não tenho certeza de onde ou como a segunda interface é definida.

As 2 interfaces são ens4 e ens5. Apenas ens4 é definido com iface ens4 inet dhcp. Eu esperaria ver algo semelhante para ens5, mas não vejo.

A execução do ifconfig mostra o ens5 em execução. Além disso, ip link showmostra isso.

Parece que posso adicionar ens5 a /etc/network/interfaces sem quebrar nada. Se eu fizer isso, parece que outras coisas também acontecem. Por exemplo, um arquivo "ifstate.ens5" agora aparece em /run/network. Além disso, ifdown / ifup funcionam na interface.

No entanto, mesmo a adição post-up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1não resulta na criação da rota na inicialização... Mas se eu fizer um ifdown e depois um ifup, a rota será adicionada como seria de esperar.

Minha pesquisa adicional é que ens5 é definido por meio do pacote cloud-init da fonte de dados Google GCE, o que é muito bom, mas não responde por que apenas ens4 está no arquivo 50-cloud-init.cfg.

Então, onde o ens5 está definido e como posso adicionar uma rota estática para o ens5?

Responder1

Não tenho certeza se esta é a melhor solução, mas encontrei uma maneira de alcançar o resultado desejado.

Primeiro, acredito que o pacote python google_compute_engine esteja executando operações de configuração de rede em algum momento durante o processo de inicialização. Encontrei isso em "/usr/lib/python3/dist-packages/google_compute_engine/network_setup".

Infelizmente, acredito que embora o resultado desse método seja uma rede funcional, ele faz algumas coisas fora dos "canais" normais do Ubuntu. Por exemplo, embora a segunda interface (ens5) funcione e seja reconhecida na maioria das circunstâncias, uma vez que não está definida em /etc/network/interfaces, qualquer coisa que dependa dela provavelmente não funcionará.

Como outros comandos como "route" ainda parecem funcionar, não tenho certeza do quão importante isso é.

Não tenho certeza se existe uma maneira de aproveitar esse pacote do Google, então não tenho certeza se isso seria uma boa ideia.

Minha solução atual, porém, é aproveitar scripts de inicialização, conforme definido em "https://cloud.google.com/compute/docs/startupscript".

Como esses scripts de inicialização são executados após a configuração da rede, coloco um script de script em um bucket que executa um conjunto de ações no host com base em um arquivo de configuração local para o host. Isso permitiu que minhas rotas estáticas fossem criadas na inicialização executando o comando "route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 dev ens5".

informação relacionada