Ubuntu 17.04: como renomear uma interface de rede USB baseada no Path? (NÃO baseado no MAC)

3

Não, isso não é uma duplicata de Por que o meu adaptador Wi-Fi não aparece como wlan0 em 16.04? , pois isso explica como restaurar eth0 nomes, mas não como nomear individualmente uma interface específica.

Eu não quero atribuir com base na correspondência de MAC. Tudo o que preciso é atribuir o nome com base no caminho USB .

Quando eu conecto um adaptador de rede USB, no Ubuntu 17.04 ele recebe um nome de interface de rede baseado em seu MAC, como encx000000000000 . Agora gostaria de renomeá-lo para algo mais revelador, baseado em seu ID_PATH = pci-000:02:03.0-usb-0:1:1.0 . Em particular, eu não quero corresponder com base no endereço MAC . O raciocínio é que, após a substituição da interface, tudo se desintegraria, mas se alguém simplesmente substituir o hardware da interface de rede para que o novo hardware esteja no mesmo local que o antigo, o sistema funcionará sem precisar de suporte de TI e reconfiguração.

Então, criei um arquivo /etc/systemd/network/50-my-island.link :

[Match]
Path=pci-000:02:03.0-usb-0:1:1.0
[Link]
Name=island0

Infelizmente, o nome nunca é atribuído. Usando udevadm info , posso ver que há ID_NET_NAME=island0 set, mas isso não se aplica. A tentativa de NamePolicy= ou NamePolicy=name na seção [Link] também não ajuda.

Estou perdido! Como posso atribuir meu nome no arquivo .link ao meu adaptador de rede USB? Isso é possível sem recorrer a alguma regra do udev? Por que, então, ter arquivos .link quando eles parecem não funcionar no meu caso? Onde cometi um erro?

    
por TheDiveO 18.08.2017 / 17:18

1 resposta

6

Então eu finalmente descobri o que realmente está acontecendo.

Infelizmente, o problema que estou vendo que a renomeação de interfaces de rede baseadas em USB não funciona na verdade é causado pela regra do udev /lib/udev/rules.d/73-usb-net-by-mac.rules no Ubuntu / Debian (e, portanto, também no Raspbian). O culpado é aqui:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \
  ATTR{address}=="?[014589cd]:*", \
  TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \
  TEST!="/etc/systemd/network/99-default.link", \
    IMPORT{builtin}="net_id", NAME="$env{ID_NET_NAME_MAC}"

Observe como essa regra específica verifica se /etc /udev/rules.d/80-net-setup-link.rules está presente; se não for, então NAME será definido como um nome baseado em MAC48 e a regra de instalação padrão posterior /lib /udev/rules.d/80-net-setup-link.rules nunca terá uma chance de atribuir NAME . Agora isso é triste. Novamente.

Para permitir a atribuição de nomes definidos pelo usuário a interfaces de rede USB , precisamos ter /etc /udev/rules.d/80-net-setup-link.rules , pois essa é a regra defina 73-usb-net-by-mac.rules verifica antes de atribuir NAME .

Isso significa que a vinculação de /etc/udev/rules.d/80-net-setup-link.rules a /lib/udev/rules.d/80-net-setup-link.rules é necessária para evitar que os nomes da interface de rede atribuídos pelo usuário sejam ignorados por mais tempo.

sudo ln -s /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules

Reinicie. Feito.

Observe que um efeito colateral do modo 73-usb-net-by-mac.rules está configurado, isso faz com que todas as interfaces de rede baseadas em USB assumam a nomenclatura "antiga" eth0 , et cetera, a menos que seja explicitamente nomeado em um arquivo .link .

Eu não sei por que as regras foram escritas como são, já que seria bom ter nomenclatura baseada em MAC para todos os adaptadores de rede USB não nomeados explicitamente. Em um segundo pensamento ... não , usar nomes baseados em MAC48 não faz sentido, a menos que você rotule todos os seus dongles de rede USB e os troque constantemente; mas talvez os nomes baseados em MAC sejam usados com estações de encaixe, onde na verdade faria sentido ...?

    
por TheDiveO 19.08.2017 / 18:25