Udev e il MAC address delle interfaccie di rete

In linux molto spesso viene utilizzato un demone chiamato udev in grado di rilevare la configurazione hardware del computer e creare dinamicamente i device nella directory /dev.

E’ un demone molto utile e comodo per cui viene installato di default in quasi tutte le distribuzioni Linux.

Tra le peculiarità di udev c’è quella di mantenere una serie di regole persistenti per quanto riguarda storage ed interfacce di rete: riguardo a queste, il device (/dev/ethX) viene associato in maniera persistente al MAC Address della scheda di rete, questo per far si che la configurazione di ethX rimanga sempre associata ad una determinata scheda di rete fisica.

Nella maggior parte di situazioni questo è comodo ed utile, ma ce ne sono altre in cui si ha la necessità di variare questa impostazione.

Ammettiamo di aver creato una VM in VMWare o KVM le cui schede di rete hanno il Mac Address assegnato automaticamente e che si effettui un clone della VM (non un live migration) su un altro server fisico: in questo caso, all’accensione, non si avrà più la rete configurata in quanto le schede di rete precedentemente impostate spariranno e appariranno nuovi device (con il numero identificativo immediatamente successivo a quelle precedentemente configurate) senza configurazione.

Come fare per tornare alla configurazione precedente e funzionante?

La maggior parte delle distribuzioni salva un file all’interno della directory /etc/udev.d/rules.d chiamto XX-persistent-net-rules.conf: è sufficiente cancellare questo file e riavviare il sistema. I device delle nuove schede di rete verranno ricreati usando la precedente configurazione e tutto dovrebbe ripartire regolarmente.

Ieri mi sono trovato però in una situazione analoga con Vyatta, un appliance basato su linux ottimizzato per fungere da router e firewall: in questo caso la directory /etc/udev.d/rules.d/ rimane vuota e bisogna trovare un altro metodo.

Innanzi tutto rimuoviamo lo script vyatta_net_name:

sudo su

cd /lib/udev/
mv ./vyatta_net_name ./vyatta_net_name_backup

Quindi, cosa più importante, aggiungiamo la reguente riga al file /lib/udev/rules.d/75-persistent-net-generator.rules

<strong>/lib/udev/rules.d/75-persistent-net-generator.rules</strong>
...
ENV{MATCHADDR}==”0*”, ENV{MATCHADDR}=”"

per far si che la configurazione delle schede di rete non venga considerata persistente.