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:
- Otwórz plik
/etc/default/grub
, następnie dodajnet.ifnames=0
do parametruGRUB_CMDLINE_LINUX
. - Przebuduj plik konfiguracji:
- Na systemach z użyciem EFI:
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
- Na systemach z użyciem LEGACY BIOS:
grub2-mkconfig -o /boot/grub2/grub.cfg
- Na systemach z użyciem EFI:
- 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/
Źródła
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
Polecam również sprawdzenie, gdzie jeszcze modyfikujemy ustawienia BIOSu, np.: aktualizując kernel.