la ridenominazione dell'interfaccia di rete in Ubuntu 16.04 con systemd non riesce


14

Sto usando un server Ubuntu 16.04 LTS senza testa con due schede di rete fisiche, che sono chiamate enp5s0f0 e enp5s0f1.

Vorrei rinominare queste interfacce e ho seguito questo esempio . Ho quindi creato il file /lib/systemd/network/70-myinterface.link(l'origine originale non sembra funzionare) in questo modo (ho impostato l'indirizzo MAC corretto):

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

[Link]
Name=dmz0

e riavviato il server. Sfortunatamente l'interfaccia non è stata rinominata, anche se udevadmmostra che viene utilizzato il mio file di configurazione:

$ 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

Hai idea del perché la ridenominazione non ha funzionato?


1
Pensavo che / etc / systemd / network sarebbe la posizione migliore per creare questo file.
NGRhodes,

@NGRodi Stavo assumendo un refuso basato sull'esempio citato, ma chi lo sa?
Elder Geek,

Inoltre, controlla che il gestore della rete non sia in esecuzione, superuser.com/a/948996/127393 suggerisce che il
gestore della rete

Dopo aver inserito la taglia ho notato che c'è un nuovo file di regole udev in 16.04 che forza sempre la denominazione del tipo di indirizzo MAC per gli adattatori USB prima che venga consultato networkd (/lib/udev/rules.d/73-usb-net-by -mac.rules). Questo non sembra affatto giusto ... Ho dovuto disabilitare completamente la sua regola, il che ha fatto di nuovo funzionare il file .link. Tuttavia, non sono sicuro che sia l'opzione più corretta.
Antti Haapala,

L'uso MACAddress= [Match]non funziona anche per me nei linkfile, quindi ho finito per usarlo Path=. Dovresti provare anche tu. Inoltre puoi controllare quale linkfile corrisponde al tuo dispositivo con il udevadm test-builtin net_setup_link /sys/class/net/enp5s0f1comando
webKnjaZ

Risposte:


8

Questo potrebbe non essere d'aiuto. Vorrei controllare /etc/udev/rules.d e vedere se hai 70-persistent-net.rules. Dovresti essere in grado di rinominarli usando quel file

Il mio assomiglia a questo:

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

Se hai le voci per le tue carte in questo file, puoi cambiare il nome come preferisci cambiando "NAME = TheNameYouWant"


Va bene. Stavo per pubblicare una risposta in cui ho detto che è interessante notare che ci sono alcune persone che usano Ubuntu che hanno affermato che il metodo di @muffel per cambiare il nome della loro rete non ha funzionato. Questo era quello che stavo per suggerire ... +1
anonymous2

Qui dovrebbe andare la taglia.
EKons,

5

Un'opzione che non richiede regole udev (un'alternativa ai file .link systemd-networkd) che funziona con Ubuntu 16.04 e con molte altre versioni di Linux è

Esempio:

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

Nell'esempio sopra peth0 è il nome dell'interfaccia originale e eth0 è il nome desiderato. Inserisci il nome che hai attualmente dove peth0 è e il nome che vuoi dove eth0 è. Non è necessario o suggerito il riavvio. Ripetere la procedura per la seconda scheda di interfaccia

Testato su Ubuntu 16.04 con kernel 4.4.0-36-generic # 55-Ubuntu

Modifica: se stai cercando una soluzione persistente che sopravviva al riavvio, vedi Modifica del nome delle interfacce di rete Ubuntu 16.04

Fonti: https://www.freedesktop.org/software/systemd/man/systemd.link.html

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

Testing.

Nota: poiché il metodo @ antti-haapala ha funzionato prima e si è improvvisamente interrotto potresti essere interessato a sapere che "In un caso speciale, un file vuoto (dimensione del file 0) o un collegamento simbolico con lo stesso nome che punta a / dev / null disabilita il file di configurazione interamente (è "mascherato") ". <-Source


Sono stato molto utile la tua risposta, grazie + 1 @ElderGeek

1
@Alberto sono contento che ti sia stato d'aiuto!
Anziano Geek,

abbastanza purtroppo non è persistente ma comunque + 1
delfiler

@delfiler Grazie per il tuo commento. Se ti sto capendo correttamente, stai cercando una soluzione che sopravviva al riavvio. Sono chiaro su questo?
Elder Geek,


3
  • Tutti e tre i metodi di denominazione personalizzati, spiegati systemd: Nomi di interfaccia di rete prevedibili , sono correlati alle regole udev.

    Le regole di systemd .link e udev hanno la priorità nella cartella. /etcsostituisce /runsostituisce /lib.

    Quindi controlla l'impostazione corrente.

    # 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
    

    Dopo che qualsiasi modifica a queste regole udev (aggiunta / rimozione di file di sostituzione) sia efficace, il disco RAM di avvio deve essere aggiornato:

    sudo update-initramfs -u
    

    Per impostazione predefinita, questi sono gli unici file che potresti trovare

    ~$ 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
    

    Li ho testati tutti nell'installazione di VBox 16.04 come documentato nel link seguente, tutti i metodi funzionano come previsto:

    Ubuntu 16.04 Nomi di interfaccia complicata

  • /etc/udev/rules.d/70-persistent-net-rulesproviene da versioni precedenti sostituite da systemd .link (ma non sono create automaticamente), l'ho aggiunto qui per verificarne l'esistenza per problemi specifici ma non per il caso di AnttiHaapala .


1

Devi aggiornare il tuo initrdcon qualcosa di simile update-initramfs -k all -c, poiché udev applica tali configurazioni già durante l'esecuzione initrd.

Ubuntu 16.04 non ha più il file 70-persistent-net-rules.


1
È strano, questo sistema 16.04 lo fa. Ahh ma è un sistema aggiornato. Hai ragione che non è presente in una nuova installazione.
Elder Geek,

0

Non ho abbastanza reputazione per commentare, ma solo per aggiungere alla risposta contrassegnata, le installazioni pulite di Ubuntu 16.04 non avranno il file /etc/udev/rules.d/70-persistent-net.rules presente. Tuttavia, se lo crei manualmente, puoi aggiungere una riga come mostrato nella risposta qui e dovrebbe funzionare esattamente come nelle versioni precedenti, con una notevole differenza: il parametro KERNEL dovrebbe essere specificato come nome assegnato al interfaccia di default. Ad esempio, se il sistema ha chiamato l'interfaccia come "ens160" e si desidera cambiarla in "eth0", la linea potrebbe apparire come:

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

Questo dice alla regola di corrispondere solo su un'interfaccia che corrisponde al MAC specificato (nel parametro ATTR {address}) e con un nome del kernel corrispondente al parametro KERNEL. In alternativa potresti probabilmente omettere del tutto il parametro KERNEL e anche questo dovrebbe funzionare.

EDIT: E come già accennato, se si desidera utilizzare il metodo del file .link, sarà necessario aggiornare initramfs affinché abbia effetto. Nota anche che il file .link personalizzato dovrebbe essere creato in / etc / systemd / network e non in / lib / systemd / network (funzionerà entrambi, ma la migliore pratica è usare / etc / systemd / network poiché è quello che serve per - consentire file .link personalizzati che sovrascrivono i valori predefiniti in / lib / systemd / network).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.