eth0 jak zmienić

eth0 – najpopularniejsza nazwa interfejsu sieciowego jaki miałem okazję widzieć w Linuxie to jedno z niewielu podstawowych nazewnictw fizycznych interfejsów sieciowych. Czemu istnieją również inne i co oznaczają?

Praktycznie do 2009 roku wszystkie fizyczne interfejsy sieciowe nazywane były kolejno eth0, eth1, eth2, …, ethN. Biorąc nazewnictwo dosłownie, oznacza ono Ethernet 0, czyli pierwszy interfejs/gniazdo, potem był Ethernet 1 – drugie miejsce i tak dalej.

Minusem tego prostego rozwiązania jest łatwa ich identyfikacja, gdyż nazwy nie zawsze pokrywały się z fizycznym umiejscowieniem i oznaczeniem, ale również nie nakreślały kart sieciowych, które były wykorzystywane. Celem identyfikacji, który to kabel, trzeba było ubiegać się do sztuczek (np.: wyłączenia interfejsu i sprawdzeniu, czy przestał mrugać), to przypadku (np.: odłączmy, zobaczymy), czy weryfikacji od strony sprzętu i powiązanie niczym sznurkami co jest czym. Szczególnie było to widoczne, gdy np.: złącze 1, 2 i 4 były użytkowane, 3 nie – to interfejsy oznaczały się i tak eth0, eth1, eth2. Podłączamy do złącza 3 i ono nagle funkcjonuje jako eth3. Restartujemy i mamy eth0 (1 złącze), eth1 (2 złącze), eth2 (3 złącze), eth4 (4 złącze), czyli doszło do wymieszania interfejsów. Teraz wyobraźmy sobie statyczną adresację sieci lub „na sztywno” przypisane interfejsy do aplikacji. W ten prosty sposób mamy sporo poprawek na głowie.

Jak więc sobie z tym poradzić? Stworzyć nieco lepsze i nowocześniejsze rozwiązanie.

W 2009 roku wymyślono nowy sposób nazewnictwa interfejsów, który rozwiązuje problem opisany przeze mnie wcześniej. Spójne nazewnictwo interfejsów sieciowych (nie bijcie za tłumaczenie) ustaliła bardziej rozbudowany sposób, który ułatwi identyfikację interfejsu ze złączem i kartą sieciową. Następnie zaimplementacją zajęła się firma Dell pod nazwą biosdevname.

eth0 zastąpione!

Nazwy interfejsów miały być od teraz nazywane w bardziej odpowiedzialny sposób.

  • Karty sieciowe zintegrowane z płytą główną miały mieć oznaczenia eno[0-N], np.: eno1, eno4, itd.
  • Karty sieciowe połączone za pomocą interfejsu PCIe oznaczać się powinno ens[0-N], np.: ens2
  • Dodatkowo, by rozróżnić sloty PCIe oraz portu, zastosowano nomenklaturę ensSLOTpPORT, np.: ens0p1 oznaczał pierwszy slot PCIe i port drugi.
  • Dodatkowo można użyć nazewnictwa przy wykorzystaniu adresów MAC jako enx[MAC], np.: enx525400d5e0fb. Ta forma jest najmniej popularna i nie kojarzę żadnej wiodącej dystrybucji, która z tej formy korzysta.
  • W przypadku problemów z uzyskaniem informacji, błędnymi informacjami lub w przypadku wyłączenia tego nazewnictwa, interfejsy miałyby się nazywać po staremu, czyli np.: eth0

Ta prosta w użytkowaniu zmiana pozwoliła rozwiązać wspomniane wyżej problemy, zachowując kompatybilność. Dodatkowo do tego systemu dochodzi oznaczenie urządzeń WiFi poprez wl[0-N], np.: wl0

Jak włączyć/wyłączyć „Consistent Network Device Naming”?

Jest kilka sposobów na wykonanie tej operacji.

Po pierwsze w przypadku rodziny dystrybucji RHEL można ustawić w parametrach kernela dodatkowy parametr:

net.ifnames=0

Można w ten sposób przetestować, czy na pewno wszystko nam zadziała. Wdrożenie na stałe tej zmiany można wykonać następująco:

  1. Otwórz plik /etc/default/grub, następnie dodaj net.ifnames=0 do parametru GRUB_CMDLINE_LINUX.
  2. Przebuduj plik konfiguracji:
    1. Na systemach z użyciem EFI:
      grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    2. Na systemach z użyciem LEGACY BIOS:
      grub2-mkconfig -o /boot/grub2/grub.cfg
  3. Uruchom serwer ponownie.

Rozwiązanie zapewne będzie funkcjonowało również w innych dystrybucjach, jednak nie miałem okazji testować.

Drugą opcją jest modyfikacja poprzez systemd-links, jednak tutaj odeślę od dokumentacji. Link na końcu artykułu.

eth0 jest gorsze?

Moim zdaniem system takiego nazewnictwa poprzez fizyczną identyfikację sprzętu jest świetnym ułatwieniem, gdy wykorzystujemy jednolitą infrastrukturę, chociaż zawiera również wiele utrudnień w automatyzacji, które oczywiście są do obejścia.

Sam korzystam z obu form i nie potrafię wybrać tej lepszej lub bardziej praktycznej, gdyż obie mają swoich zwolenników i każda strona ma rację w pewnych aspektach.

https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
https://www.freedesktop.org/software/systemd/man/systemd.link.html
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/consistent-network-interface-device-naming_configuring-and-managing-networking

Źródła

Polecam również sprawdzenie, gdzie jeszcze modyfikujemy ustawienia BIOSu, np.: aktualizując kernel.

Dołącz do newslettera, by być na bieżąco!

Jeśli chcesz być na bieżąco z blogiem, otrzymywać świetne porady dot. programowania i administracji serwerami, opinie w temacie gier - dołącz do newslettera!

Raz na jakiś czas wyślę Ci informację nt. bloga, a także będę wysyłać ekskluzywne materiały techniczne!

Nie czekaj i dołącz!

Dołączając do newslettera, akceptujesz naszą politykę prywatności!