Tři způsoby, jak změnit název síťového rozhraní 

Pokud je v počítači více než jedno rozhraní, které se hlásí jménem ethX, máme zaděláno na problémy. Pokud se jednotlivá rozhraní liší například čipsetem, není to ještě tak špatné, i když po upgradu na novou verzi kernelu se docela klidně může stát, že se ovladače zavedou v jiném pořadí. Ještě horší situace nastává, pokud je v systému několik identických síťových karet. Pak o jejich očíslování totiž rozhoduje i pořadí v PCI slotu a to se může změnit například resetem CMOS paměti.

Proto je vhodné, zachovat si trvalé jméno karty podle její MAC adresy. Objevil jsem hned tři způsoby, jak na to:

  1. Pomocí udev. Přestože síťová rozhraní nemají speciální soubor v adresáři /dev, udev s nimi dokáže také pracovat. Vcelku pěkný návod, jak na to, je například zde. Jen je potřeba zadávat MAC adresu malými písmeny, jinak jí to nenajde.
  2. Pomocí utilitky nameif. Tak to používám já, protože v době, kdy jsem tenhle problém řešil, ještě udev nebyl a já migroval z Fedory, kde to dělal initskript automaticky, na Gentoo, které to samozřemě neumělo. Tak jsem pročetl initskript Fedory, zjistil, že na to používá právě nameif a přepsal jednodušší initskript pro Gentoo:
    #!/sbin/runscript
    # Copyright 1999-2004 Gentoo Foundation
    # Distributed under the terms of the GNU General Public License v2
    
    # Changing names of network interfaces, according to /etc/mactab
    # Author: Ondrej Caletka
    
    NAMEIF=/sbin/nameif
    MACTAB=/etc/mactab
    #Temporary mactab, to allow eg. swapping between eth0 & eth1
    MACTMP=/etc/mactab.tmp
    
    # Example: Swaping between eth0 (MAC 000000000000) and eth1 (MAC 001122334455)
    
    #/etc/mactab:
    # # Formerly eth0:
    # eth1          00:00:00:00:00:00
    # # Formerly eth1:
    # eth0          00:11:22:33:44:55
    #EOF
    
    #/etc/mactab.tmp:
    # # Formerly eth0:
    # tmp1          00:00:00:00:00:00
    # # Formerly eth1:
    # tmp0          00:11:22:33:44:55
    #EOF
    
    depend() {
            before net
    }
    
    start() {
            [ -a ${MACTAB} ] || return
            ebegin "Renaming network interfaces"
            [ -a ${MACTMP} ] && ${NAMEIF} -c ${MACTMP}
            ${NAMEIF} -c ${MACTAB}
            eend $?
    }
    Jak je vidět, řešení je to poněkud těžkopádné, zejména v případě, kdy chceme názvy jen prohodit, protože není možné jedné kartě přiřadit název, který už má jiná karta.
  3. Pomocí iproute2. To se spíš hodí pro dočasné změny, protože moc dobře nejde měnit na základě MAC adresy, ale na základě předchozího názvu. Syntaxe je taková:
    ip link set eth0 name lan0

Všechny způsoby vyžadují, aby bylo rozraní, které se má přejmenovat, ve stavu down a aby nedošlo ke konfliktu s jiným síťovým zařízením (snad kromě udev, kde by mělo prohození názvů fungovat - ještě jsem to nezkoušel).


Komentáře

Pro tento záznam nejsou komentáře povoleny.