Jak zresetować /etc/networking/interfaces
przy użyciu „przewidywalnych nazw interfejsów sieciowych”?
Wersje Ubuntu starsze niż 15.10 używają nazw kart sieciowych, takich jak:
eth0
eth1
eth2
Zastąpienie karty sieciowej lub przeniesienie maszyny wirtualnej do nowego hiperwizora spowodowałoby, że Linux zwiększyłby numer interfejsu. Usunięcie /etc/udev/rules.d/70-peristent-net.rules
spowoduje ponowne użycie Linuksa eth0
.
Ubuntu 15.10 i nowsze używają „ przewidywalnych nazw interfejsów sieciowych ”. Nazwa karty sieciowej pochodzi od adresu mac.
ens3
ens32
ens192
Podczas migracji maszyny wirtualnej sieć nie rozpocznie się, ponieważ /etc/network/interfaces
nadal odwołuje się do starej nieistniejącej karty sieciowej.
# 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
Jaki jest najlepszy sposób na zresetowanie pliku / etc / network / interfaces?
Muszę wykonać tę czynność przed wyłączeniem vm i migracją do nowego hiperwizora, ponieważ używam programu pakującego do tworzenia automatycznych złotych obrazów na podstawie złotych obrazów szefa kuchni / bento .
Odkryłem, że usunięcie / etc / network / interfaces nie działa, ponieważ plik nie jest automatycznie regenerowany przy następnym uruchomieniu po migracji.
Próbowałem edytować mój plik grub, aby powrócić do konwencji nazewnictwa „eth0”. Podczas gdy / etc / network / interfaces odnosi się do starej nazwy (eth0), vm nie otrzyma adresu IP, a jakiekolwiek ponowne uruchomienie spowoduje, że vm użyje nowej konwencji nazewnictwa. Przekonałem się również, że systemd zawsze będzie miał pierwszeństwo, chyba że mogę zagwarantować, że na biosdevname=0
stałe pozostanie w konfiguracji grub . Nie wiesz, jak zastosować to na stałe
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 bios.devname=0"
Jeśli to możliwe, wolałbym nie używać inicjowania w chmurze ani żadnych skryptów po uruchomieniu, ponieważ wolę, aby złote obrazy były tak czyste, jak to możliwe.
Z pewnością jest to problem, który dostawcy chmury (Azure, AWS, RackSpace, Openstack) już rozwiązali podczas importowania vms. Nie mogę być pierwszą osobą, która próbuje migrować maszynę wirtualną przy użyciu przewidywalnych nazw interfejsów sieciowych.
Próbowałem uruchomić te polecenia przed zamknięciem i migracją VM
apt-get remove biosdevname -y;
ln -s /dev/null /etc/systemd/network/99-default.link;
Znajduję, kiedy migruję vm, /etc/network/interfaces
i ip address
nadal się odwołujęens32
Odpowiedzi:
Wydaje mi się, że OpenStack korzysta z inicjowania w chmurze, formatu ConfigDrive i zapewnia konfigurację sieci zgodną ze sprzętem VM. Źródła:
Jeśli wykluczysz skrypt pierwszego uruchomienia, istnieje jedna oczywista odpowiedź.
https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
Powrót do starych trwałych nazw interfejsów nie jest jedną z udokumentowanych opcji.
Inną alternatywą jest konfiguracja, w której interfejsy sieciowe są domyślnie włączone, niezależnie od ich dokładnej nazwy. Myślę, że NetworkManager domyślnie obsługuje to. systemd-networkd może również zostać poproszony o zrobienie tego .
Jak tylko masz więcej niż jedno urządzenie sieciowe dla maszyny wirtualnej, prawdopodobnie i tak potrzebują one określonej konfiguracji ...
Poza maszynami wirtualnymi istnieje jedna oczywista zaleta podejścia w stylu NetworkManager: komputer PC może mieć wiele interfejsów sieciowych, być może różnych typów, a tylko jeden z nich jest podłączony. Na przykład można to zaobserwować na niektórych płytach głównych premium lub w systemie, w którym pierwszy interfejs sieciowy nie działał zgodnie z oczekiwaniami, a drugi interfejs został zainstalowany w pewnym momencie.
źródło
ln -s /dev/null /etc/systemd/network/99-default.link
to nie ma znaczenia. moje vms nadal używają nowej konwencji nazewnictwa.Zrezygnowałem z próby zrobienia tego czysto i wymyśliłem następujący hack. Uruchamiając następujący skrypt tuż przed wyłączeniem vm i migracją, vm będzie miał eth0 jako kartę sieciową po włączeniu.
Ściśle mówiąc,
apt-get remove biosdevname
nie jest wymagany, ponieważ ten pakiet nie jest domyślnie instalowany na Ubuntu 16.04. Ponadto dodawaniebios.devname=0
doGRUB_CMDLINE_LINUX_DEFAULT
nie jest wymagane, ponieważ nazwa biosdevname nie jest zainstalowana. Zapobiega to awarii sieci, jeśli nazwa biosdevname zostanie kiedykolwiek zainstalowana w przyszłości.źródło
Czy potrzebujesz przewidywalnych nazw interfejsów sieciowych?
Moim rozwiązaniem było odinstalowanie
biosdevname
, a to niezawodnie skutkowało zawsze posiadaniem interfejsów sieciowych o nazwach eth0, eth1 itd. Nie znalazłem dobrego powodu do zainstalowania przewidywalnych nazw interfejsów sieciowych ani nazwy biosdevname.in
/etc/udev/rules.d/70-persistent-net.rules
jest miejscem, w którym możesz zmienić, jaki sprzętowy adres mac ma być nazwany eth0, eth1 itd. Zwykle usuwam zawartość tego pliku, zapisuję go jako pusty plik, uruchamiam ponownie, a następnie mam czystą tablicę z odpowiednimi kartami sieciowymi wyświetlanymi ...^^ gdzie xx: xx: xx: xx: xx: xx to unikalny adres mac twoich kart sieciowych.
Wiem, że wspomnienie o usunięciu tego pliku nie jest rozwiązaniem, ale zamieszczam powyższy przykład, ponieważ przynajmniej w Suse to
/lib/udev/write_net_rules
ten plik tworzy. Sprawdź, czy śledzenie wstecz do tego pliku pomaga, jeśli ma on zastosowanie do Twojej dystrybucji, możesz go zmodyfikować w celu rozwiązania problemu.Zauważ, że to wiem z Suse w wersji 11, która jest starym sposobem Init, przed systemd. Nie jestem pewien, czy zmieniło się to w najnowszych wersjach systemu Linux w systemied.
źródło
Wpadłem na to uaktualnienie hostów Ubuntu 14.04 do 16.04.
biosdevname
Pakiet nie jest zainstalowany, więc uciekają się do"biosdevname=0 net.ifnames=0"
w/etc/default.grub
jak stwierdził OP.Uruchamiam ten skrypt i jeśli dane wyjściowe wyglądają dobrze, przekierowują dane wyjściowe w
/etc/udev/rules.d/70-persistent-net.rules
celu zbudowania nowych reguł udev na wypadek, gdyby jądro kiedykolwiek zdecydowało się wyliczyć porty Ethernet w innej kolejności.źródło