Wie werden Sie zurückgesetzt, /etc/networking/interfaces
wenn Sie "vorhersehbare Netzwerkschnittstellennamen" verwenden?
Ubuntu-Versionen älter als 15.10 verwenden Netzwerkadapternamen wie:
eth0
eth1
eth2
Das Ersetzen einer Netzwerkkarte oder das Verschieben einer VM auf einen neuen Hypervisor würde dazu führen, dass Linux die Schnittstellennummer erhöht. Durch das Löschen /etc/udev/rules.d/70-peristent-net.rules
würde Linux wiederverwendet eth0
.
Ubuntu 15.10 und höher verwenden ' Vorhersagbare Netzwerkschnittstellennamen '. Der Name des Netzwerkadapters wird von der Mac-Adresse abgeleitet.
ens3
ens32
ens192
Bei der Migration einer VM wird das Netzwerk nicht gestartet, da /etc/network/interfaces
immer noch auf den alten nicht vorhandenen Netzwerkadapter verwiesen wird.
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto ens32
iface ens32 inet dhcp
pre-up sleep 2
Wie kann die Datei / etc / network / interfaces am besten zurückgesetzt werden?
Ich muss diese Aktion ausführen, bevor ich die VM herunterfahre und auf einen neuen Hypervisor migriere, da ich Packer verwende , um automatisierte goldene Bilder basierend auf den goldenen Bildern des Küchenchefs / Bento zu erstellen.
Ich habe festgestellt, dass das Löschen von / etc / network / interfaces nicht funktioniert, da die Datei beim nächsten Start nach der Migration nicht automatisch neu generiert wird.
Ich habe versucht, meine Grub-Datei zu bearbeiten, um zur Namenskonvention 'eth0' zurückzukehren. Während sich / etc / network / interfaces auf den alten Namen (eth0) bezieht, erhält die VM keine IP und bei Neustarts verwendet die VM die neue Namenskonvention. Außerdem habe ich festgestellt, dass systemd immer Vorrang hat, es sei denn, ich kann garantieren, dass es biosdevname=0
dauerhaft in der grub-Konfiguration bleibt . Ich bin mir nicht sicher, wie ich das dauerhaft anwenden soll
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 bios.devname=0"
Wenn möglich, würde ich lieber keine Cloud-Init oder Skripte nach dem Start verwenden, da ich die goldenen Bilder lieber so sauber wie möglich halten möchte.
Dies ist sicherlich ein Problem, das Cloud-Anbieter (Azure, AWS, RackSpace, Openstack) bereits beim Importieren von VMs gelöst haben. Ich kann unmöglich die erste Person sein, die versucht, eine VM mit vorhersehbaren Netzwerkschnittstellennamen zu migrieren.
Ich habe versucht, diese Befehle auszuführen, bevor ich die VM heruntergefahren und migriert habe
apt-get remove biosdevname -y;
ln -s /dev/null /etc/systemd/network/99-default.link;
Ich finde, wenn ich die VM migriere, das /etc/network/interfaces
und ip address
verweise immer noch aufens32
Antworten:
Ich denke, OpenStack verwendet Cloud-Init im ConfigDrive-Format und bietet eine Netzwerkkonfiguration, die der VM-Hardware entspricht. Quellen:
Wenn Sie ein First-Boot-Skript ausschließen, gibt es eine offensichtliche Antwort.
https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
Das Zurückschalten auf die alten persistenten Schnittstellennamen ist keine der dokumentierten Optionen.
Die andere Alternative ist ein Setup, bei dem Netzwerkschnittstellen unabhängig von ihrem genauen Namen standardmäßig aktiviert sind. Ich denke, NetworkManager unterstützt dies standardmäßig. systemd-networkd kann auch dazu aufgefordert werden .
Sobald Sie mehr als ein Netzwerkgerät für eine VM haben, benötigen diese wahrscheinlich ohnehin eine bestimmte Konfiguration ...
Außerhalb von VMs gibt es einen offensichtlichen Vorteil des NetworkManager-Ansatzes: Ein PC verfügt möglicherweise über mehrere Netzwerkschnittstellen, möglicherweise unterschiedlicher Art, von denen nur eine verbunden ist. Dies kann beispielsweise auf einigen Premium-Motherboards oder auf einem System beobachtet werden, auf dem die erste Netzwerkschnittstelle nicht wie gewünscht funktioniert hat und irgendwann eine zweite Schnittstelle installiert wurde.
quelle
ln -s /dev/null /etc/systemd/network/99-default.link
macht keinen Unterschied. Meine VMs verwenden immer noch die neue Namenskonvention.Ich gab es auf, dies sauber zu machen, und fand den folgenden Hack. Wenn Sie das folgende Skript ausführen, bevor Sie die VM herunterfahren und migrieren, hat die VM beim Einschalten eth0 als Netzwerkadapter.
Genau genommen
apt-get remove biosdevname
ist dies nicht erforderlich, da dieses Paket unter Ubuntu 16.04 nicht standardmäßig installiert ist. Außerdem ist das Hinzufügenbios.devname=0
zumGRUB_CMDLINE_LINUX_DEFAULT
nicht erforderlich, da biosdevname nicht installiert ist. Es verhindert, dass das Netzwerk unterbrochen wird, wenn biosdevname jemals in der Zukunft installiert wird.quelle
Benötigen Sie vorhersehbare Netzwerkschnittstellennamen?
Meine Lösung war die Deinstallation
biosdevname
, und das hat zuverlässig dazu geführt, dass immer Netzwerkschnittstellen mit den Namen eth0, eth1 usw. vorhanden waren. Ich habe keinen guten Grund gefunden, vorhersehbare Netzwerkschnittstellennamen oder Biosdevnamen zu installieren.In
/etc/udev/rules.d/70-persistent-net.rules
können Sie ändern, welche Hardware-Mac-Adresse in eth0, eth1 usw. benannt wird. Normalerweise lösche ich den Inhalt dieser Datei, speichere sie als leere Datei, starte neu und habe dann einen sauberen Slate mit den richtigen Netzwerkadaptern ...^^ wobei xx: xx: xx: xx: xx: xx die eindeutige Mac-Adresse Ihrer Netzwerkadapter ist.
Ich weiß, dass Sie erwähnen, dass das Löschen dieser Datei nicht die Lösung ist, aber ich poste das obige Beispiel, weil zumindest in Suse
/lib/udev/write_net_rules
diese Datei erstellt wird. Sehen Sie also nach, ob die Rückverfolgung dieser Datei hilfreich ist. Wenn sie für Ihre Distribution gilt, können Sie sie möglicherweise ändern, um Ihr Problem zu lösen.Beachten Sie, dass dies das ist, was ich aus Suse Version 11 kenne, die der alte Init-Weg vor systemd ist. Ich bin mir nicht sicher, ob sich dies für die neuesten Linux-Versionen unter systemd geändert hat.
quelle
Bin auf dieses Upgrade von Ubuntu 14.04 Hosts auf 16.04 gestoßen.
biosdevname
Paket nicht installiert ist, so zurückgegriffen"biosdevname=0 net.ifnames=0"
in/etc/default.grub
wie OP angegeben.Ich führe dieses Skript aus, und wenn die Ausgabe gut aussieht, leiten Sie die Ausgabe
/etc/udev/rules.d/70-persistent-net.rules
um, um neue udev-Regeln zu erstellen, falls der Kernel jemals beschließt, die Ethernet-Ports in einer anderen Reihenfolge aufzulisten.quelle