renomear a interface de rede no Ubuntu 16.04 com systemd falha

14

Estou usando um servidor LTS Ubuntu 16.04 decapitado com duas placas de rede físicas, denominadas enp5s0f0 e enp5s0f1.

Eu gostaria de renomear essas interfaces e segui este exemplo . Por isso, criei o arquivo /lib/systemd/network/70-myinterface.link(a fonte original não parece funcionar) assim (defino o endereço MAC correto):

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

[Link]
Name=dmz0

e reiniciou o servidor. Infelizmente, a interface não foi renomeada, apesar de udevadmmostrar que meu arquivo de configuração é usado:

$ 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

Você tem alguma idéia de por que a renomeação não funcionou?

muffel
fonte
1
Eu pensaria que / etc / systemd / network seria o melhor local para criar este arquivo.
NGRhodes 03/09/19
@NGRhodes Eu estava assumindo um erro de digitação com base no exemplo citado, mas quem sabe?
Elder Geek
Além disso, de verificação networkmanager não está a funcionar, superuser.com/a/948996/127393 sugere networkmanager tendo prioridade
NGRhodes
Depois de colocar a recompensa, notei que há um novo arquivo de regras do udev na 16.04 que sempre força a nomeação do tipo de endereço MAC para adaptadores USB antes da consulta do networkd (/lib/udev/rules.d/73-usb-net-by -mac.rules). Isso não parece certo ... Eu tive que desativar completamente a regra, o que fez o arquivo .link funcionar novamente. Mas não tenho certeza se é a opção mais correta.
Antti Haapala
Usar MACAddress= [Match]não funciona para mim também nos linkarquivos, então acabei usando Path=. Você deveria tentar também. Além disso, você pode verificar qual linkarquivo corresponde ao seu dispositivo com o udevadm test-builtin net_setup_link /sys/class/net/enp5s0f1comando
webKnjaZ 4/16

Respostas:

8

Isso pode ou não ajudar. Gostaria de verificar o /etc/udev/rules.d e ver se você possui 70-persistent-net.rules. Você poderá renomeá-los usando esse arquivo

O meu fica assim:

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 você tiver as entradas para seus cartões nesse arquivo, poderá alterar o nome para o que desejar, alterando o "NAME = TheNameYouWant"

John Orion
fonte
Pode apostar. Eu estava prestes a postar uma resposta na qual mencionei que, curiosamente, algumas pessoas usando o Ubuntu disseram que o método do @muffel para alterar o nome da rede não funcionava. Isso é o que eu ia sugerir ... +1
anonymous2
Aqui a recompensa deve ir.
EKons
5

Uma opção que não requer regras do udev (uma alternativa aos arquivos systemd-networkd .link) que funciona com o Ubuntu 16.04 e com muitas outras versões do Linux é

Exemplo:

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

No exemplo acima, peth0 é o nome da interface original e eth0 é o nome desejado. Conecte o nome que você possui atualmente onde peth0 está e o nome que deseja onde eth0 está. Nenhuma reinicialização é necessária ou sugerida. Repita o processo para a segunda placa de interface

Testado no Ubuntu 16.04 com o kernel 4.4.0-36-generic # 55-Ubuntu

Edit: Se você estiver procurando por uma solução persistente que sobreviva à reinicialização, consulte Alterando o nome de interfaces de rede Ubuntu 16.04

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

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

Teste.

Nota: como o método @ antti-haapala funcionou antes e parou subitamente, você pode estar interessado em saber que "Como um caso especial, um arquivo vazio (tamanho 0) ou um link simbólico com o mesmo nome apontando para / dev / null desabilitam o arquivo de configuração inteiramente (é "mascarado") ". <-Fonte

Elder Geek
fonte
Fui muito útil na sua resposta, obrigado + 1 @ElderGeek
1
@ Alberto Estou feliz que ajudou!
Elder Geek
infelizmente não é persistente, mas ainda + 1
delfiler
Obrigado por seu comentário. Se estou entendendo corretamente, você está procurando uma solução que sobreviva a uma reinicialização. Estou claro sobre isso?
Elder Geek
@delfiler, consulte askubuntu.com/questions/767786/…
Elder Geek
3
  • Todos os três métodos de nomeação personalizados, explicados em systemd: nomes previsíveis da interface de rede , estão relacionados às regras do udev.

    As regras do systemd .link & udev têm prioridade de pasta. /etcsubstituições /runsubstituições /lib.

    Portanto, verifique a configuração atual.

    # 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
    

    Após qualquer alteração nessas regras do udev (adição / remoção de arquivos de substituição), o disco RAM de inicialização deve ser atualizado:

    sudo update-initramfs -u
    

    Por padrão, esses são os únicos arquivos que você pode encontrar

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

    Eu testei todos eles na instalação do VBox fresh 16.04, conforme documentado no link abaixo, todos os métodos funcionam conforme o esperado:

    Nomes de interface complicada do Ubuntu 16.04

  • /etc/udev/rules.d/70-persistent-net-rulesé de versões mais antigas substituídas por systemd .link (mas elas não são criadas automaticamente), adicionei-a aqui para verificar sua existência quanto a problemas específicos, mas não no caso do AnttiHaapala .

user.dz
fonte
1

Você precisa atualizar o seu initrdcom algo como update-initramfs -k all -c, uma vez que o udev já aplica essas configurações durante a execução initrd.

O Ubuntu 16.04 não tem mais o arquivo 70-persistent-net-rules.

Jani Jaakkola
fonte
1
Isso é estranho, esse sistema 16.04 sim. Ah, mas é um sistema atualizado. Você está certo de que ele não está presente em uma nova instalação.
Elder Geek
0

Não tenho reputação suficiente para comentar, mas apenas para adicionar à resposta marcada, as instalações limpas do Ubuntu 16.04 não terão o arquivo /etc/udev/rules.d/70-persistent-net.rules presente. No entanto, se você criá-lo manualmente, poderá adicionar uma linha, como mostrado na resposta aqui, e deve funcionar como nas versões anteriores, com uma diferença notável - o parâmetro KERNEL deve ser especificado como o nome atribuído ao interface por padrão. Por exemplo, se o sistema nomeou a interface como "ens160" e você deseja alterá-la para "eth0", a linha pode se parecer com:

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

Isso diz à regra para corresponder apenas em uma interface que corresponda ao MAC especificado (no parâmetro ATTR {address}) e com um nome de kernel que corresponda ao parâmetro KERNEL. Como alternativa, você provavelmente poderia omitir o parâmetro KERNEL completamente e isso também deve funcionar.

EDIT: E como já mencionado, se você quiser usar o método de arquivo .link, será necessário atualizar o initramfs para que ele entre em vigor. Observe também que o arquivo .link personalizado deve ser criado em / etc / systemd / network e não em / lib / systemd / network (isso funcionará, mas a melhor prática é usar / etc / systemd / network, pois é para isso - permita arquivos .link personalizados que substituam os padrões em / lib / systemd / network).

dwillis77
fonte