Como escrever regras para nomes de redes persistentes?

3

Eu sei que um processo gera nomes de placas de rede persistentes com base nas regras encontradas em /lib/udev/rules.d/75-persistent-net-generator.rules. Eu também sei como desativar completamente este processo com um simples

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules

mas eu li que eu "também poderia escrever meu próprio arquivo de regras para dar um nome à interface - o gerador de regras persistentes ignora a interface se um nome já foi definido" (/etc/udev/rules.d/ O README confirma que isso é possível).

Você pode fornecer instruções e / ou exemplos sobre como escrever essas regras? (Eu principalmente me importo com o Debian / Ubuntu e um pouco menos com o CentOS). No meu caso, gostaria de adicionar regras como as seguintes:

  • cartões com MAC A ou B devem ser denominados eth0
  • cartões com MAC C ou D devem ser nomeados eth1
  • siga o esquema de nomenclatura padrão para qualquer outra coisa

Como um exemplo específico de porque eu quero escrever regras personalizadas: Eu tenho dois servidores idênticos com uma LAN onboard e uma LAN PCI. Em caso de falha de HW, quero poder mover discos de HW # 1 para HW # 2 e é importante que a eth0 continue apontando para a placa onboard e eth1 para a placa PCI (ninguém quer mexer com o cabeamento no meio de um pânico de falha HW). Minha solução atual funciona, mas é muito trabalhoso [1]. Então, pergunto-me se escrever regras personalizadas permitiria que eu expressasse as regras acima

[1] instale o SO no HW # 1 e mantenha uma cópia do /etc/udev/rules.d/70-persistent-net.rules. Mova os discos para HW # 2 e mantenha uma segunda cópia do mesmo arquivo. Concatene as duas cópias e edite manualmente a parte NAME="ethX". Substitua /etc/udev/rules.d/70-persistent-net.rules pela minha versão. Finalmente desative a criação automática de um novo 70-persistent-net.rules usando

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules
    
por ndemou 03.06.2014 / 17:20

2 respostas

3

Para responder à sua pergunta específica, adicione isso a persistent-net.rules:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="AA:AA:AA:AA:AA:AA", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="BB:BB:BB:BB:BB:BB", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="CC:CC:CC:CC:CC:CC", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="DD:DD:DD:DD:DD:DD", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

Deixe o persistent-net-generator.rules sozinho. O udev não substituirá as regras adicionadas manualmente, mas as regras do gerador farão com que novas regras sejam adicionadas para novos cartões, como de costume.

    
por 29.08.2014 / 12:10
0

Geralmente tudo que eu quero fazer em termos de interfaces de nomes é trocar eth0 e eth1. Deixei o sistema criar o arquivo /etc/udev/rules.d/70-persistent-net-rules , edite-o alternando os nomes, reinicie e configure as sub-rotinas de interface nos arquivos de configuração de rede. Tédio, mas é feito. Há uma sugestão no topo do arquivo sobre isso:

/etc/udev/rules.d/70-persistent-net.rules 
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x108c (e1000e) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:22:74:24", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    
por 06.06.2014 / 08:34