GCE Ubuntu Multi-Interface Instance Routenkonfiguration

GCE Ubuntu Multi-Interface Instance Routenkonfiguration

Ich verwende eine Ubuntu 16.04-Instanz mit mehreren Schnittstellen. Ich möchte einige Routen auf der zweiten Schnittstelle konfigurieren. Ich kann dies zwar manuell tun, aber nach einem Neustart bleibt dies nicht bestehen.

Die meisten Methoden empfehlen, Routen mit der Schnittstelle in /etc/network/interfaces zu definieren, was basierend auf einem Aufruf aus der Schnittstellendatei in /etc/network/interfaces.d/50-cloud-init.cfg übersetzt wird.

Was mich verwirrt, ist, dass ich nicht sicher bin, wo oder wie die zweite Schnittstelle überhaupt definiert ist.

Die 2 Schnittstellen sind ens4 und ens5. Nur ens4 ist mit definiert iface ens4 inet dhcp. Ich würde erwarten, etwas Ähnliches für ens5 zu sehen, aber das ist nicht der Fall.

Beim Ausführen von ifconfig wird ens5 als ausgeführt angezeigt. ip link showZeigt es auch an.

Es scheint, dass ich ens5 zu /etc/network/interfaces hinzufügen kann, ohne dass etwas kaputt geht. Wenn ich das tue, scheinen auch andere Dinge zu passieren. Beispielsweise erscheint jetzt eine Datei „ifstate.ens5“ in /run/network. Außerdem funktionieren ifdown / ifup auf der Schnittstelle.

Allerdings post-up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1führt auch das Hinzufügen nicht dazu, dass die Route beim Booten erstellt wird … Wenn ich jedoch ein ifdown und dann ein ifup ausführe, wird die Route wie erwartet hinzugefügt.

Meine zusätzlichen Untersuchungen haben ergeben, dass ens5 über das Cloud-Init-Paket aus der Google GCE-Datenquelle definiert ist. Das ist zwar schön und gut, beantwortet aber nicht die Frage, warum sich in der Datei 50-cloud-init.cfg nur ens4 befindet.

Wo ist ens5 definiert und wie kann ich eine statische Route für ens5 hinzufügen?

Antwort1

Ich bin nicht sicher, ob das die beste Lösung ist, aber ich habe einen Weg gefunden, das gewünschte Ergebnis zu erzielen.

Erstens bin ich der Meinung, dass das Python-Paket google_compute_engine irgendwann während des Startvorgangs Netzwerkeinrichtungsvorgänge durchführt. Ich habe dies in "/usr/lib/python3/dist-packages/google_compute_engine/network_setup" gefunden.

Leider glaube ich, dass diese Methode zwar ein funktionierendes Netzwerk erzeugt, aber einige Dinge außerhalb der normalen Ubuntu-"Kanäle" tut. Beispielsweise funktioniert die zweite Schnittstelle (ens5) zwar und wird in den meisten Fällen erkannt, aber da sie nicht in /etc/network/interfaces definiert ist, funktioniert wahrscheinlich nichts, was davon abhängt.

Da andere Befehle wie „route“ jedoch immer noch zu funktionieren scheinen, bin ich mir nicht sicher, wie wichtig das ist.

Ich bin nicht sicher, ob es eine Möglichkeit gibt, dieses Google-Paket zu nutzen, und bin mir daher nicht sicher, ob das überhaupt eine gute Idee wäre.

Meine aktuelle Lösung besteht jedoch darin, Startskripte zu nutzen, wie unter "https://cloud.google.com/compute/docs/startupscript".

Da diese Startskripte ausgeführt werden, nachdem das Netzwerk konfiguriert wurde, habe ich ein Skript in einen Bucket gelegt, das basierend auf einer lokalen Konfigurationsdatei auf dem Host eine Reihe von Aktionen auf dem Host ausführt. Dadurch konnten meine statischen Routen beim Booten erstellt werden, indem ich den Befehl „route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 dev ens5“ ausführte.

verwandte Informationen