Přejmenování síťových zařízení v systemd
V souvislosti s update Debianu z 9 na 10 někteří uživatelé řeší nové pojmenování síťových zařízení.
Je doporučována varianta přejít na nové stabilní pojmenování siťových interface, kdy je jméno síťovky odvozeno z mnoha různých informací.
Například síťovka na PCI sběrnici 3 s jedním portem bude mít jméno ensp3s0
,
pokud firmware poskytne index síťových zařízení, tak se může jmenovat eno0
apod.
Názvy to nejsou moc prediktivní (protože záleží na mnoha faktorech, které ani často nelze dopředu znát, například skutečné pořadí PCI-E slotů na MB apod.), ale důležité je, že jednou přiřazené jméno už by se měnit nemělo a síťovka na dané HW pozici se bude jmenovat pořád stejně.
Existuje stále možnost toto nové pojmenovávání vypnout pamatetrem jádra net.ifnames=0
.
Já ovšem doporučuju přejít na nové pojmenovávání, protože je jen otázkou času, kdy bude stará možnost z udevu odstraněna.
Co ale dělat v případě, kdy nechceme po každé změně pozice síťovky (a tedy změně jména rozhraní) měnit všechny se síti související skripty (firewall, bridge, sítě pro virtuálky)? Velmi dlouho (určitě od 2007) existovala možnost si v udev rules definovat jméno síťovky podle její MAC adresy. S novým modelem toto ale není doporučováno.
Existuje jedno, podle mě, velmi elegantní a čistě systemd řešení o kterém se
ale v žádné diskusi nepíše (a to kolem prediktivních jmen iface bylo hodně
dusno).
Systemd.link
sám o sobě umí přejmenovat síťovku na adminem definované jméno. A síťovku lze
“matchnout” podle mnoha různých atributů. I včetně MAC. Jen se z pochopitelných
důvodů nedoporučuje změnit jméno na takové, které koliduje s konvencí
pojmenovávání v systému, vyhněte se tedy názvům jako ethX ensXpY apod. Vhodné
názvy jsou např.: lan0
, wan0
, internal0
apod.
Takže jak na to, stačí v /etc/systemd/network
vytvořit soubor třeba
01.lan0.link
a tam si síťovku pojmenovat:
[Match]
MACAddress=d4:3d:7e:xx:xx:xx
[Link]
Name=lan0
Od této chvíle je nutné k ní přistupovat pod tímto novým jménem, takže pokud ji
chcete přiřadit adresu nebo zapojit do bridge, už je to lan0
.
Sice to nepatří do článku tohoto typu, ale neodpustím si malou poznámku. Tohle je na systemd a diskusích kolem něj velmi zvláštní. Je hromada diskusí většinou velmi bouřlivě a nelibě komentující nějakou změnu, v této diskusi je i mnoho zastánců systemd, změna se kritizuje ze všech stran, ale málokdy někdo přispěje s tím, že se změnou se o nic nepřišlo a že to lze nakonfigurovat i v systemd (a často i čistějším způsobem). Takto jsem viděl šílené rady o tom, jak přidat statické routy. Přitom je to tak jednoduché. Nebo možnost běhu vlastních user service. Diskuse jsou zaplaveny stovkami naprosto nesmyslných rad, lidé se hádají o systemd a jak moc je neschopný, ale téměř nikdy se v diskusích neobjeví skutečná rada to udělat správně “the systemd way”. A to ani od jeho příznivců, což je zarážející.
A úplně nakonec se přiznám k tomu, že ani já jsem o možnosti pojmenovat si síťovku vlastním názvem nevěděl (mimo staré možnosti v udev rules). V žádné diskusi se to nevyskytuje. Až dneska úplnou náhodou to napsal někdo do diskuse na abclinuxu. A díky mu za to.