Nu m-am putut abține să nu înjur nițel o chestiune zilele astea, deși am grămezi de treabă.
Dar întâi puțin backstory. Vă spuneam zilele trecute de Innovation Labs 2015 și de faptul că vom avea o rețea de backup scoasă în internet printr-un 4G. Nimic prea complicat, nu facem BGP sau HSRP/VRRP. Pentru că dispunem de resurse hardware limitate și un downtime al rețelei de 1-2 minute nu e critic încât să complicăm rețeaua. Vom avea o clasă de ip-uri publice (/24) a facultății, routată de facultate și un IP public static pe 4G al Orange. Având un singur IP public pe 4G, va trebui făcut NAT. Problema este că echipamentul pe care-l folosim pentru 4G nu e capabil să facă NAT pentru cei ~150 de utilizatori conectați la rețea. Este un Cisco 819 doar care recomandă în specificații 20 de utilizatori. Nu-mi prea permit să-l pun să facă NAT și să mă trezesc în cazul în care am nevoie că nu merge nimic.
Singura soluție la îndemână pentru un NAT cinstit este un Linux box clasic pregătit pentru treaba asta. Și am luat un desktop ceva mai vechiuț de prin poli, i-am mai înfipt 2 interfețe și m-am apucat să-l pregătesc. Și dau peste o chestie pe care n-o știam până acum și care mi-a stârnit un potop de înjurături.
Interfețele standard ethernet în Linux poartă numele ethX (unde X este un număr întreg care pleacă de la 0). Ei, se pare că de ceva vreme încoace, interfețele on-board (și cele pe PCI-Express după cum am aflat) sunt redenumite în pXpY. De exemplu, pe un sistem cu o placă on-board, una pe PCI și una pe PCI-Express, aia on-board era denumită p2p1, aia pe PCI era eth0 iar cea PCI-Express era p3p1. Nu mă întrebați unde-i p1p1, nu exista. Spre apărarea mea, eu nu știam de treaba asta din cauză că de aproximativ 5-6 ani n-am mai utilizat linuxurile noi decât prin VM-uri. Cele instalate direct pe sisteme erau versiuni suficient de vechi încât să nu aibe problema asta.
De ce-au făcut asta veți întreba ? Vă spun ce-am găsit și eu. Răspunsul oficial este că astfel interfețele respective vor fi văzute întotdeauna cu același nume, indiferent dacă înlocuiești o interfață cu alta atâta timp cât o pui în același loc. Adică dacă o schimb pe aia PCI-Express, teoretic cea nouă se va chema tot p3p1. Într-adevăr, înainte de treaba asta, atunci când înlocuiai o interfață ethernet pe PCI, puteai avea surpriza ca noua interfață să nu se mai cheme eth0 ci eth1 că ți se schimba adresa MAC. Ceea ce-ți cam f.tea configurația.
Problema e că eu văd două probleme aici. Una la mână, interfețele pe PCI au rămas denumite la fel (ethX). Doi la mână, se pare că au existat multe cazuri în care, în urma unui update de kernel, interfețele de forma pXpY s-au redenumit singure.
Unde-s problemele ? Păi hai să începem cu faptul că de ceva vreme comunitatea open-source se cam pișă pe ideea de Keep It Simple, Stupid. Au futut modul de configurare grub deși nu era necesar, majoritatea distribuțiilor s-au umplut de scripturi care “simplifică” operațiile (evident, diferite între distro-uri), complicând inutil administrarea și tot așa. Tot așa și aici. Aveai un sistem care funcționa. Aveai plăcile de rețea denumite ethX și ți se putea întâmpla să fie redenumită DOAR dacă înlocuiai placa fizică. Adică atunci când erai oricum fizic lângă sistem și-l puteai accesa. Da’ ia să ți se modifice numele interfeței după un update de kernel (cum au pățit-o unii cu pXpY-urile), update pe care-l poți face și remote. Cum o mai dregi atunci ?
Pe lângă asta, înainte exista o consistență în numele de interfețe de rețea. Acum, după cum v-am spus, puteți avea un eth0, un p2p1 și un p3p1. Pe același sistem. Înainte, dacă vroiai să modifici numele interfeței, modificai regulile de udev și redenumeai interfața cum vroiai tu pe baza adresei MAC. Acum nu mai poți.
Din fericire poți să revii la sistemul clasic pasând kernelului opțiunea “biosdevname=0” la bootare. Pentru a rezolva problema definitiv modificați configul de la grub ca să paseze opțiunea respectivă. După reboot interfețele vor avea numele clasic și tot universul revine la normal.
Programatorii open-source au mai făcut o treabă de cacao, adminii au rezolvat-o restabilind pacea în lume.
1) Ai uitat de systemd :P
2) Teoretic placile de retea “embedded on motherboard” ar fi trebuit sa aiba nume cu emX. Dar de la teorie pana la practica e cale lunga… :)
Era mai complicat de explicat ce-i în neregula cu systemd (TOT :D ). Dar da…
How I Learned to Stop Worrying and Love BSD (or actually started hating RH):
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html
si
http://devopsreactions.tumblr.com/post/112502661235/watching-systemd-evolve
Eh, eu întotdeauna am urât RH. Am învățat *nix cu Solaris și ulterior cu Slackware. RH/SuSe au fost chestii complet “câh” pentru mine. Dar nu mă așteptam să se ajungă chiar în halul ăsta.
Welcome to the world of systemd :)
solutia simpla si eficienta ar fi fost un routeros x86
alte alternative ar fi ubiquity edge lite sau un rb2011.