Configuración de ruta de instancia de interfaz múltiple de GCE Ubuntu

Configuración de ruta de instancia de interfaz múltiple de GCE Ubuntu

Estoy ejecutando una instancia de Ubuntu 16.04 con múltiples interfaces. Estoy buscando configurar algunas rutas en la segunda interfaz. Si bien puedo hacer esto manualmente, eso no persiste al reiniciar.

La mayoría de los métodos sugieren definir rutas con la interfaz en /etc/network/interfaces, lo que se traduce en /etc/network/interfaces.d/50-cloud-init.cfg en función de una llamada desde el archivo de interfaces.

Lo que me tiene confundido es que no estoy seguro de dónde ni cómo se define la segunda interfaz.

Las 2 interfaces son ens4 y ens5. Sólo ens4 se define con iface ens4 inet dhcp. Esperaría ver algo similar para ens5, pero no es así.

La ejecución de ifconfig muestra que ens5 se está ejecutando. Además, ip link showlo demuestra.

Parece que puedo agregar ens5 a /etc/network/interfaces sin que nada se rompa. Si hago eso, parece que también suceden otras cosas. Por ejemplo, ahora aparece un archivo "ifstate.ens5" en /run/network. Además, ifdown/ifup funcionan en la interfaz.

Sin embargo, incluso agregar post-up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1no da como resultado que la ruta se cree en el arranque... Pero si hago un ifdown y luego un ifup, la ruta se agrega como era de esperar.

Mi investigación adicional es que ens5 se define a través del paquete cloud-init de la fuente de datos de Google GCE, lo cual está muy bien, pero no responde por qué solo ens4 está en el archivo 50-cloud-init.cfg.

Entonces, ¿dónde se define ens5 y cómo puedo agregar una ruta estática para ens5?

Respuesta1

No estoy seguro de que esta sea la mejor solución, pero encontré una manera de lograr el resultado deseado.

Primero, creo que el paquete Python google_compute_engine está realizando operaciones de configuración de red en algún momento durante el proceso de arranque. Encontré esto en "/usr/lib/python3/dist-packages/google_compute_engine/network_setup".

Desafortunadamente, creo que si bien el resultado de este método es una red que funciona, hace algunas cosas fuera de los "canales" normales de Ubuntu. Por ejemplo, aunque la segunda interfaz (ens5) funciona y se reconoce en la mayoría de las circunstancias, ya que no está definida en /etc/network/interfaces, es probable que todo lo que dependa de ella no funcione.

Sin embargo, dado que otros comandos como "ruta" todavía parecen funcionar, no estoy seguro de qué importancia tiene esto.

No estoy seguro de si hay una manera de aprovechar este paquete de Google, por lo que no estoy seguro de si sería una buena idea.

Sin embargo, mi solución actual es aprovechar los scripts de inicio, como se define en "https://cloud.google.com/compute/docs/startupscript".

Dado que estos scripts de inicio se ejecutan después de configurar la red, coloco un script en un depósito que realiza un conjunto de acciones en el host en función de un archivo de configuración local al host. Esto ha permitido crear mis rutas estáticas en el arranque ejecutando el comando "route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 dev ens5".

información relacionada