zmiana nazwy interfejsu sieciowego w Ubuntu 16.04 z systemd kończy się niepowodzeniem


14

Używam bezgłowego serwera Ubuntu 16.04 LTS z dwiema fizycznymi kartami sieciowymi o nazwach enp5s0f0 i enp5s0f1.

Chciałbym zmienić nazwy tych interfejsów i poszedłem za tym przykładem . Dlatego utworzyłem plik /lib/systemd/network/70-myinterface.link(wydaje się, że oryginalne źródło nie działa) w ten sposób (ustawiłem prawidłowy adres mac):

[Match]
MACAddress=12:34:56:78:9a:bc

[Link]
Name=dmz0

i ponownie uruchomiłem serwer. Niestety nazwa interfejsu nie została zmieniona, chociaż udevadmpokazuje, że używany jest mój plik konfiguracyjny:

$ udevadm info /sys/class/net/enp5s0f1
P: /devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=80003ES2LAN Gigabit Ethernet Controller (Copper)
E: ID_MODEL_ID=0x1096
E: ID_NET_DRIVER=e1000e
E: ID_NET_LINK_FILE=/lib/systemd/network/70-myinterface.link  <-- my file
E: ID_NET_NAME_MAC=enx123456789abc
E: ID_NET_NAME_PATH=enp5s0f1
E: ID_OUI_FROM_DATABASE=Intel Corporation
E: ID_PATH=pci-0000:05:00.1
E: ID_PATH_TAG=pci-0000_05_00_1
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
E: ID_VENDOR_ID=0x8086
E: IFINDEX=3
E: INTERFACE=enp5s0f1
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp5s0f1
E: TAGS=:systemd:
E: USEC_INITIALIZED=1900192

Czy masz pojęcie, dlaczego zmiana nazwy nie zadziałała?


1
Myślałem, że najlepszym rozwiązaniem do stworzenia tego pliku będzie / etc / systemd / network.
— NGRhodes

@NGRhodes Zakładałem literówkę na podstawie cytowanego przykładu, ale kto wie?
— Elder Geek

Ponadto sprawdź, czy menedżer sieci nie działa, superuser.com/a/948996/127393 sugeruje, że
— menedżer sieci

Po tym, jak umieściłem nagrodę, zauważyłem, że w 16.04 istnieje nowy plik reguł udev, który zawsze wymusza nazwanie adresów MAC adapterów USB przed skonsultowaniem się z networkd (/lib/udev/rules.d/73-usb-net-by -mac.rules). To wcale nie wydaje się właściwe ... Musiałem całkowicie wyłączyć tę regułę, co sprawiło, że plik .link znów zaczął działać. Nie jestem jednak pewien, czy jest to najbardziej odpowiednia opcja.
— Antti Haapala

Używanie MACAddress= [Match]nie działa również dla mnie w linkplikach, więc skończyło się na użyciu Path=. Ty też powinieneś spróbować. Możesz także sprawdzić, który linkplik pasuje do twojego urządzenia za pomocą udevadm test-builtin net_setup_link /sys/class/net/enp5s0f1polecenia
— webKnjaZ

Odpowiedzi:


8

To może, ale nie musi pomóc. Sprawdziłbym /etc/udev/rules.d i sprawdziłbym, czy masz 70-persistent-net.rules. Powinieneś być w stanie zmienić ich nazwy przy użyciu tego pliku

Mój wygląda następująco:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="e0:cb:ee:d7:ff:9a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Jeśli masz wpisy dotyczące kart w tym pliku, możesz zmienić nazwę na dowolną, zmieniając „NAME = TheNameYouWant”


Tak jest. Właśnie miałem opublikować odpowiedź, w której wspomniałem, że ciekawie, jest kilka osób korzystających z Ubuntu, które powiedziały, że metoda @muffel do zmiany nazwy sieci nie działa. To właśnie zamierzałem zasugerować ... +1
— anonimowy2

Oto nagroda.
— EKons,

5

Opcją, która nie wymaga reguł udev (alternatywa dla plików .link systemd-networkd), która działa z Ubuntu 16.04, a także z wieloma innymi wersjami Linuksa, jest

Przykład:

ifconfig peth0 down  
ip link set peth0 name eth0  
ifconfig eth0 up 

W powyższym przykładzie peth0 to oryginalna nazwa interfejsu, a eth0 to pożądana nazwa. Podaj nazwę, którą aktualnie masz, gdzie jest peth0, i nazwę, którą chcesz, gdzie jest eth0. Ponowne uruchomienie nie jest wymagane ani sugerowane. Powtórz proces dla drugiej karty interfejsu

Testowany na Ubuntu 16.04 z jądrem 4.4.0-36-generic # 55-Ubuntu

Edycja: Jeśli szukasz trwałego rozwiązania, które przetrwa restart, zobacz Zmiana nazwy interfejsów sieciowych Ubuntu 16.04

Źródła: https://www.freedesktop.org/software/systemd/man/systemd.link.html

http://kernelpanik.net/rename-a-linux-network-interface-without-udev/

Testowanie.

Uwaga: ponieważ metoda @ antti-haapala działała wcześniej i nagle przestała działać, możesz być zainteresowany tym, że „W specjalnym przypadku pusty plik (rozmiar pliku 0) lub dowiązanie symboliczne o tej samej nazwie wskazujące na / dev / null wyłącza plik konfiguracyjny całkowicie (jest „zamaskowany”) ”. <-Źródło


Byłem bardzo przydatny w twojej odpowiedzi, dziękuję + 1 @ElderGeek

1
@Alberto Cieszę się, że pomogło!
— Starszy Geek

niestety nie jest trwały, ale nadal + 1
— delfiler

@delfiler Dziękujemy za komentarz. Jeśli dobrze cię rozumiem, szukasz rozwiązania, które przetrwa restart. Czy to jasne?
— Starszy Geek


3
  • Wszystkie trzy niestandardowe metody nazewnictwa, wyjaśnione systemd: Przewidywalne nazwy interfejsów sieciowych , są powiązane z regułami udev.

    Systemd .link i udev mają priorytet folderów. /etcprzesłania /runprzesłonięcia /lib.

    Sprawdź bieżącą konfigurację.

    # links
    ls -l /*/systemd/network/
    
    # rule that read links
    ls -l /*/udev/rules.d/80-net-setup-link.rules
    
    # rule that check for /etc/.../80-net-setup-link.rules & net.ifnames
    ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    

    Po każdej zmianie tych reguł udev (dodawanie / usuwanie plików zastępujących), aby były skuteczne, dysk RAM pamięci rozruchowej powinien zostać zaktualizowany:

    sudo update-initramfs -u
    

    Domyślnie są to jedyne pliki, jakie możesz znaleźć

    ~$ ls -l /*/systemd/network/
    /etc/systemd/network/:
    total 0
    
    /lib/systemd/network/:
    total 12
    -rw-r--r-- 1 root root 404 Jul 12 17:28 80-container-host0.network ##(virtual-interface)
    -rw-r--r-- 1 root root 482 Jul 12 17:28 80-container-ve.network ##(virtual-interface)
    -rw-r--r-- 1 root root  80 Jul 12 17:28 99-default.link
    
    
    ~$ ls -l /*/udev/rules.d/80-net-setup-link.rules
    -rw-r--r-- 1 root root 292 Jul 12 17:28 /lib/udev/rules.d/80-net-setup-link.rules
    
    ~$ ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    -rw-r--r-- 1 root root 551 Jul 12 16:37 /lib/udev/rules.d/73-usb-net-by-mac.rules
    

    Przetestowałem je wszystkie w instalacji VBox fresh 16.04, jak udokumentowano w poniższym linku, wszystkie metody działają zgodnie z oczekiwaniami:

    Skomplikowane nazwy interfejsów Ubuntu 16.04

  • /etc/udev/rules.d/70-persistent-net-rulespochodzi ze starszych wydań zastąpionych przez systemd .link (ale nie są tworzone automatycznie), dodałem go tutaj, aby sprawdzić jego istnienie pod kątem konkretnych problemów, ale nie w przypadku AnttiHaapala .


1

Musisz zaktualizować initrdcoś podobnego update-initramfs -k all -c, ponieważ udev stosuje te konfiguracje już podczas działania initrd.

Ubuntu 16.04 nie ma już pliku 70-persistent-net-rules.


1
To dziwne, że działa system 16.04. Ach, ale to ulepszony system. Masz rację, że nie ma go w nowej instalacji.
— Elder Geek

0

Nie mam wystarczającej reputacji, aby komentować, ale aby dodać do zaznaczonej odpowiedzi, czyste instalacje Ubuntu 16.04 nie będą zawierały pliku /etc/udev/rules.d/70-persistent-net.rules. Jeśli jednak utworzysz go ręcznie, możesz dodać wiersz, jak pokazano w odpowiedzi tutaj, i powinien on działać tak samo jak w starszych wersjach, z jedną zauważalną różnicą - parametr KERNEL należy określić jako nazwę przypisaną do parametru interfejs domyślnie. Na przykład, jeśli system nazwał interfejs jako „ens160” i chcesz go zmienić na „eth0”, linia może wyglądać następująco:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="ens160", NAME="eth0"

Mówi to regule, że pasuje tylko na interfejsie pasującym do określonego MAC (w parametrze ATTR {adres}) i z nazwą jądra pasującą do parametru KERNEL. Alternatywnie możesz prawdopodobnie całkowicie pominąć parametr KERNEL i to też powinno działać.

EDYCJA: Jak już wspomniano, jeśli chcesz użyć metody pliku .link, musisz zaktualizować initramfs, aby zadziałało. Pamiętaj również, że niestandardowy plik .link powinien zostać utworzony w / etc / systemd / network, a nie w / lib / systemd / network (albo będzie działał, ale najlepszą praktyką jest użycie / etc / systemd / network, ponieważ po to jest - zezwalaj na niestandardowe pliki .link, które zastępują ustawienia domyślne w / lib / systemd / network).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.