Am observat o tendință în ultima vreme. În loc să înlocuiesc un router atunci când acesta încetează literalmente să mai funcționeze, am fost nevoit să acționez mai devreme – schimbând un nou echipament deoarece un router vechi nu mai putea ține pasul cu vitezele tot mai mari de internet disponibile în zonă. (Notă, sunt recunoscător în mod corespunzător pentru această problemă.) Ca cel mai recent exemplu, o grămadă de routere Netgear ProSafe 318G m-au dezamăgit pentru ultima dată, deoarece întreprinderile mici au trecut de la conexiuni T1 tradiționale de 1,5-9mbps la conexiuni coaxiale (cablu) de 50mbps.
Da, coaxial – nu fibră optică. Chiar și coaxialul s-a dovedit a fi prea mult pentru vechea serie ProSafe. Aceste dispozitive nu doar că nu au reușit să țină pasul, ci s-au prăbușit. În mod frecvent, vechile routere au scăzut rezultatele testelor de viteză de la 9mbps cu vechea conexiune la 3mbps sau mai puțin cu conexiunea de 50mbps. Evident, asta nu zboară.
În zilele noastre, răspunsul pare să fie din ce în ce mai mult routerele wireless. Acestea tind să fie lungi în ceea ce privește plasticul cu aspect elegant și interfețele Web viu colorate, dar scurte în ceea ce privește caracteristicile tehnice și fiabilitatea. Ce trebuie să facă un administrator de sistem mercenar? Ei bine, în esență, orice lucru cu două interfețe fizice de rețea poate fi un router. Iar astăzi, există o mulțime și o mulțime de cutii generice relativ rapide, ieftine și (superimportant!) cu stare complet solidă.
Așa că, în sfârșit, venise momentul. Confruntat cu hardware îmbătrânit și cu noile oferte de consum care nu-mi satisfăceau nevoile, am decis să-mi construiesc propriul router. Și dacă peisajul de conectivitate în transformare de astăzi vă lasă într-o poziție similară, se pare că atât construcția, cât și construcția sunt destul de rapide.
De ce să o facem pe calea cea mai grea
Mulți dintre voi mormăiți, probabil, „corect, pfSense, sigur”. Unii dintre voi s-ar putea chiar să vă gândiți la smoothwall sau untangle NG. M-am jucat cu cele mai multe dintre distribuțiile de firewall existente, dar am decis să merg mai elementar, mai de școală veche: o instalare simplă, doar CLI, a Ubuntu Server și câteva reguli iptables.
Admitem că, probabil, aceasta nu este cea mai practică abordare pentru fiecare cititor, dar pentru mine a avut sens. Am destul de multă experiență în perfecționarea iptables și a nucleului Linux în sine pentru un debit ridicat la scară de internet și, cu cât mai puține caracteristici strălucitoare și grafice și lucruri clicky sunt puse între mine și masa de firewall, cu atât mai puține chestii de umplutură pe care trebuie să le scot din cale și cu atât mai puține lucruri noi și neaplicabile în restul muncii mele trebuie să învăț. Orice regulă pe care știu deja cum să o creez în iptables pentru a gestiona accesul la serverele mele, știu de asemenea cum să o aplic la firewall-ul meu – dacă firewall-ul meu rulează aceeași distribuție ca și serverele mele.
De asemenea, lucrez destul de mult cu OpenVPN și vreau să pot continua să configurez atât serverele, cât și clienții săi în modul în care mă bazez deja. Unele distribuții de firewall au suport pentru OpenVPN încorporat, iar altele nu, dar chiar și cele cu suport încorporat au tendința de a se aștepta ca lucrurile să funcționeze altfel decât o fac eu. Din nou, cu cât mai mult sistemul nu-mi stă în cale, cu atât voi fi mai fericit.
Ca un bonus suplimentar, știu că pot foarte ușor să țin totul complet la zi pe noul meu router Ubuntu complet vanilat. Totul este susținut direct de Canonical și poate avea (și are) toate actualizările automate activate. Adăugați din când în când un cron job pentru a reporni routerul (pentru a obține noi nuclee) și sunt în regulă.
Hardware, hardware, hardware
Vom trece în revistă modul de utilizare într-un articol viitor, dar astăzi este important să stabilim de ce o construcție DIY a routerului poate fi cea mai bună opțiune. Pentru a face acest lucru, trebuie mai întâi să înțelegeți peisajul general de astăzi.
În lumea de consum, routerele au în cea mai mare parte procesoare MIPS micuțe sub capotă, fără prea multă memorie RAM (ca să spunem așa). Aceste routere se diferențiază în mare măsură unele de altele în funcție de interfață: Cât de strălucitoare este? Câte caracteristici tehnice are? Pot utilizatorii să și-l dea seama cu ușurință?
La capătul superior al pieței SOHO, începeți să vedeți unele procesoare ARM de nivel smartphone și mult mai multă memorie RAM. Aceste routere – cum ar fi seria Nightgear Nighthawk, una dintre ele pe care o vom ciocăni mai târziu – dispun de mai multe nuclee, viteze de ceas mai mari și mult mai multă memorie RAM. De asemenea, acestea prezintă etichete de preț mult mai mari decât concurența mai ieftină. Am luat un Linksys EA2750 pentru 89 de dolari, dar Netgear Nighthawk X6 pe care l-am primit împreună cu acesta era de aproape trei ori mai scump (chiar și la reduceri de sărbători!), la 249 de dolari.
Cu toate acestea, am vrut să merg pe o altă cale. În ultima vreme au început să apară pe piață o mulțime de mașinuțe x86-64 fanless interesante și rezonabil de ieftine. Trucul pentru construirea unui router este să găsești unul cu mai multe NIC-uri. Puteți găsi câteva pariuri destul de sigure pe Amazon, dar sunt procesoare mai vechi bazate pe Atom, iar eu am vrut un Celeron mai nou. După câteva căutări și tergiversări de modă veche pe internet, în cele din urmă am făcut pasul pe Alibaba și mi-am comandat un nou Partaker Mini PC de la Shenzhen Inctel Technology Company. După 240 de dolari pentru routerul propriu-zis și încă 48 de dolari pentru un SSD Kingston de 120 GB de la Newegg, am cheltuit cu aproximativ 40 de dolari mai mult pentru Homebrew Special decât pentru Nighthawk. Ar fi meritat?
Apare un concurent
Înainte de a începe testarea, să aruncăm o scurtă privire vizuală asupra concurenților.
Acest Nighthawk este, în comparație cu celelalte, URIAȘ și impunător (chiar mai mult decât îl face să pară imaginea). De fapt, este semnificativ mai mare decât Homebrew Special al meu, care este un PC complet funcțional, de uz general, pe care îl poți folosi ca un desktop perfect competent. Este ca și cum DC Comics l-a rugat pe H.R. Giger să dea o mână de ajutor la proiectarea unui router wireless pentru Batman.
Homebrew Special în sine este destul de adorabil. Are un LED albastru și unul roșu în interiorul carcasei, iar noaptea, lumina de la ambele se revarsă indirect prin orificiile sale de răcire, dând stivei de rețea un aspect festiv de petrecere. Dacă ar exista vreun ventilator care să provoace o pâlpâire, m-ar înnebuni, dar din moment ce este o strălucire blândă în stare stabilă, chiar îmi place.
Pe de altă parte, Linksys și Buffalo arată exact ceea ce sunt – routere ieftine. Cu toate acestea, este demn de remarcat faptul că stilul de pe Linksys este o mare îmbunătățire față de trecutul mărcii. Arată mai mult ca ceva profesional și mai puțin ca o jucărie pentru copii. (Dar destul despre stil – este timpul să trecem aceste biete routere prin mănușă.)
Prima provocare evidentă este un simplu test de lățime de bandă. Puneți un computer pe partea LAN și un computer pe partea WAN și rulați prin mijloc un mic instrument ingenios numit iperf. Simplu, nu-i așa?
Bine, asta ar da naștere unui articol scurt și plictisitor. Rețeaua în sine măsoară gigabit, cele trei routere gigabit măsoară gigabit, iar routerul de 100 megabit măsoară 100 megabit.
În realitate, un test atât de simplu nici măcar nu începe să spună povestea. Singurul motiv pentru a-l face poate fi acela de a arăta cât de inutil este. Producătorii de routere devin din ce în ce mai conștienți de faptul că oamenii chiar le testează produsele și niciun producător nu dorește ca produsul său să fie oriunde altundeva decât în fruntea a ceva de genul graficului de routere al smallnetbuilder. În lumină, producătorii urmăresc în mod activ statisticile în aceste zile.
Problema este că statisticile sunt doar statistici. A fi capabil să atingi o cifră mare la un test pur de debit este mai bine decât nimic, dar este departe de a fi întreaga poveste. Am învățat această lecție pe calea cea grea în timp ce lucram pentru un furnizor T-1 la începutul anilor 2000. Modemurile lor Adtran, extrem de scumpe, puteau gestiona foarte bine utilizarea normală a internetului de către 50 până la 100 de persoane, dar un singur utilizator care folosea Limewire sau un alt client P2P ar fi pus totul la pământ într-o clipită. (Soluția de atunci: plasați un router Netopia ieftin, dar grozav, de 150 de dolari în fața modemului Adtran scump. Problema s-a rezolvat.)
Chiar și pentru o rutare relativ simplă – fără inspecție profundă a pachetelor, fără scanare malware în flux sau detectare a intruziunilor, fără modelare – atât CPU-ul, cât și memoria RAM disponibilă pentru router sunt importante cu mult peste capacitatea de saturare a legăturii de internet. Partajarea de fișiere peer-to-peer este cam cea mai brutală activitate pe care o va vedea o rețea, în zilele noastre (fie că este vorba de bittorrent, de una dintre variantele Gnutella sau eDonkey, sau de sistemul de descărcare peer-to-peer al unei companii de jocuri). Eu nu mai jucam WoW în momentul în care a fost introdus sistemul de distribuție P2P al Blizzard, dar colegul meu de cameră de la acea vreme nu era așa. În ziua lansării, noul sistem de descărcare de la egal la egal a WoW nu a avut în mod nefolositor niciun fel de limitare. A încercat în mod vesel să găsească și să mențină conexiuni cu mii de clienți simultan, iar rețeaua mea de acasă a căzut ca și cum Gilbert Godfried ar fi fost atacat de Terry Tate. Colegul meu de cameră și cu mine am avut cuvinte.
Pe baza unei astfel de experiențe anterioare, nu vreau doar să-mi „testez” minim concurenții și să închei ziua, ci vreau să-i fac să transpire cu adevărat. Așa că, pentru a face acest lucru, îi voi lovi cu sarcini de lucru care pun accentul pe trei domenii problematice: saturarea legăturii de rețea, realizarea și întreruperea conexiunilor TCP/IP individuale foarte rapid și menținerea unui număr masiv de conexiuni TCP/IP individuale deschise în același timp.
Am un botnet în buzunar și sunt gata să îl fac să zguduie
M-am gândit pentru scurt timp să înființez un fel de monstruozitate hidoasă, alimentată de Docker, cu zeci de mii de containere Linux cu adrese IP individuale, toate cerând conexiuni și/sau servind pagini web. Apoi mi-am revenit în fire. În ceea ce privește routerele, nu există nicio diferență între a menține conexiuni la mii de adrese IP individuale sau doar la mii de porturi de pe aceeași adresă IP. Am petrecut puțin timp transformând serverul web preferat al lui Lee Hutchinson, nginx, într-un monstru lovecraftian ridicol, cu 10.000 de capete și un apetit pentru distrugere.
Pentru fiecare router, am folosit ApacheBench pentru a testa descărcarea unui jpeg cu trei dimensiuni diferite ale fișierului (10K, 100K și 1M) la patru niveluri diferite de concurență (10, 100, 1.000 și 10.000 de clienți simultani). Acest lucru ne oferă 12 teste în total, fără a pune la socoteală testul nostru iperf inițial, și merită să le vedem pe toate ca un fel de spectru.
În cele mai multe privințe, acel fișier de 10K este mai dificil. Dimensiunea mică a fișierului înseamnă că puteți livra mult mai multe fișiere individuale în fiecare secundă înainte de a satura interfața, ceea ce înseamnă să faceți și să întrerupeți mult mai multe conexiuni TCP, ceea ce este solicitant pentru CPU-ul routerului. Pe de altă parte, fișierul de 1M înseamnă că veți avea garanția că veți menține deschise mai multe conexiuni la nivelurile de concurență mai mari. Merită să vedeți cum gestionează routerele întregul spectru, deoarece fiecare nivel face o treabă destul de decentă de modelare a unei provocări destul de comune pe care un router ar putea fi nevoit să o gestioneze (descărcarea sau trimiterea unui număr mare de e-mailuri, gestionarea partajării de fișiere peer-to-peer sau navigarea generală pe Web de la o mulțime de utilizatori) dacă este dusă la un nivel extrem.
În cele din urmă, am ajuns să fiu nevoit să ajustez nu numai nginx, ci și kernelul Linux în sine, pentru a oferi în mod fiabil tipul de debit pe care îl căutam. Routerele în sine sunt „stock” – chiar și Homebrew Special al meu a fost lăsat neacordat – dar serverele de test, Menhir și Monolith (fiecare cu procesor AMD FX-8320 cu 8 nuclee, 32GB DDR3 RAM și Ubuntu Trusty OS patchat complet la zi) au avut nevoie de o masare destul de serioasă pentru a face față unei astfel de sarcini.
Cu atâta nebunie, doriți să vă asigurați de ceea ce sunt capabile serverele și rețeaua dvs. reale înainte de a trage concluzii pripite cu privire la routerele pe care le puneți între ele. Pentru început, am testat mai întâi Menhir de unul singur pe interfața localhost (fără nicio rețea) și apoi am testat între servere doar prin switch-ul meu de rețea (un Netgear ProSafe 16-port gigabit, în caz că vă întrebați).
Rezultatele localhost nu ar fi putut fi mai bune – un debit mult, mult mai mare decât gigabit pentru fiecare test. De fapt, a trebuit să limitez manual scara axei Y a graficului, altfel ați fi avut probleme în a vedea testele reale. Testul de rețea directă nu a fost prea rău, dar este evident că începem să atingem anumite limite la capătul superior. Nu sunt sigur dacă componenta care se luptă este switch-ul în sine sau interfețele de rețea onboard din ambele servere, dar ceva nu este complet la înălțimea provocării. Totuși, este suficient de bun pentru a lucra cu el. Este timpul să angajăm în sfârșit routerele.
Să ne pregătim să ne batem!
Eram puțin nervos. Deja mă simțeam destul de afectuos față de micul meu dispozitiv homebrew – la urma urmei, l-am construit singur. Știam că îl va domina cu ușurință pe bătrânul Buffalo pe care l-am dezgropat dintr-un sertar și pe Linksys, care era literalmente cel mai ieftin lucru de la Staples cu o interfață gigabit. Dar ar putea să învingă acel ciocan de abur atomic ghidat cu laser al unui Nighthawk? Credeam că da, dar nu eram sigur.
Când testele de descărcare s-au terminat, nu au mai existat întrebări despre Homebrew Special. Da, putea să-l învingă pe Nighthawk… și să plece bosumflat după aceea. În afară de o mică scădere la nivelul de dimensiune a fișierului de 10K/10 conexiuni simultane (care pune la încercare procesorul cu cele mai multe conexiuni realizate și întrerupte în mod absolut), s-a comportat aproape identic cu conexiunea de rețea directă propriu-zisă.
Nighthawk, de altfel, este într-adevăr un router SOHO excelent pe care l-am implementat destul de mult. Cu toate acestea, a căzut aproape imediat. Pentru descărcări de megabyte de 10 în 10, a fost la egalitate. Cu orice provocare mai mare, performanța a început să scadă brusc.
Lansys, fără surpriză, nu s-a descurcat deloc bine. Chiar și o sarcină atât de simplă precum descărcarea a 10 fișiere în același timp i-a redus debitul la aproape jumătate din ceea ce arăta testul naiv iperf. Lucrurile nu au făcut decât să se înrăutățească de acolo, și nu a reușit nici măcar să finalizeze mai multe teste. Pe de altă parte, Linksys face o treabă bună pentru a demonstra că routerul tău chiar contează.
În cele din urmă, micul și viteazul Bivol merită o recunoaștere. În ciuda faptului că a costat mai puțin decât Linksys când era nou-nouț (cu opt ani în urmă, atenție) și a lâncezit într-un sertar de birou timp de cinci ani, a coborât de pe proverbialul scaun de bar și chiar a bătut Linksys în jumătate din teste. Buffalo a avut acest succes în ciuda unei interfețe de rețea care a fost evaluată pentru o zecime din viteză. Asta înseamnă curaj. Data viitoare când cineva va înjunghia ieftin produsele chinezești proaspăt scoase din barcă, voi striga „Amintiți-vă de Buffalo!”
Înainte de a ajunge la orice concluzie, totuși, trebuie luate în calcul vitezele de încărcare.
Din fericire, nimic nu s-a schimbat cu adevărat în ceea ce privește relațiile dintre routerele de aici. Homebrew pare în continuare ca și cum nici măcar nu ar fi acolo, corespunzând aproape în totalitate unei conexiuni directe la rețea. Nighthawk continuă să îl domine complet pe Linksys, iar micul și neînsemnatul Buffalo continuă să se descurce cât se poate de bine învechit. În termeni absoluți, se poate observa că atât Nighthawk, cât și Linksys se descurcă puțin mai bine la încărcare decât la descărcare, dar nu este nimic deosebit. Rezultatul final rămâne același: Homebrew Special ține pasul cu rețeaua (în mod ciudat, se descurcă chiar mai bine decât o conexiune directă în testul de 10.000 de conexiuni/10K de fișiere), Nighthawk își merită în mod clar eticheta de preț în comparație cu Linksys, iar Linksys este, ei bine, ieftin.
Cu acest grafic final, avem totuși un nou set de rezultate – barele de culoare somon, care sunt destul de stabile la un pic peste 200mbps pe tot graficul. Acesta este Homebrew Special care își încordează mușchii criptografici. Are un server OpenVPN în funcțiune. Pentru acest test, serverul de pe partea WAN, Menhir, este conectat la serverul OpenVPN de la bordul routerului. Traficul pentru partea LAN a Homebrew Special este direcționat prin tunelul VPN, astfel încât Menhir ajunge la adresa IP LAN a Monolith (serverul din partea LAN) prin intermediul unei criptări destul de impresionante pe 2048 de biți, bazată pe SSL. Având în vedere că nimeni nu oferă deocamdată conexiuni de internet de peste 200mbps în zona mea, acest lucru face ca tocilarul meu interior de criptografie să danseze de bucurie. Aș putea cripta literalmente fiecare octet al traficului meu de internet, în ambele direcții, fără o penalizare a performanțelor.
Un mic avertisment de încheiere
Oricât de impresionant ar fi micul meu Homebrew Special, îi lipsește un lucru, pe care toți ceilalți trei concurenți îl oferă: accesul wireless. Aș putea adăuga o placă wireless la Homebrew și să-l fac să servească wireless, dar momentan nu am planuri în acest sens. Sunt mult prea familiarizat cu ceea ce este disponibil pentru cardurile wireless pentru PC, și toate sunt nașpa pe gheață. Chiar și dispozitivele ieftine, cum ar fi Linksys sau Buffalo, ar da lovitura în ceea ce privește acoperirea și raza de acțiune wireless, iar Nighthawk nu este nici măcar în aceeași ligă. Este cu adevărat un ciocan de abur atomic ghidat cu laser când vine vorba de rază de acțiune, acoperire și conectivitate simultană wireless. (În momentul de față, am unul dintre ele care acoperă peste 50 de utilizatori într-o instalație de 53.000 de metri pătrați de la un colț la altul.)
Acestea fiind spuse, nimic nu vă împiedică să folosiți un WAP (Wireless Access Point) separat care să se ocupe strict de sarcinile Wi-Fi. În casa mea, acesta este o pereche de WAP-uri Ubiquiti „hockey puck”, unul pentru fiecare etaj al casei. Sunt un pic mai greu de gestionat decât Nighthawk, dar perechea costă jumătate din preț. Sunt dispozitive Linux destul de standard, în care se poate intra direct prin SSH și sunt gestionate de la o mică aplicație web destul de mișto pe care o poți rula… ai ghicit, direct pe Homebrew Special. (Migrarea serverului Ubiquiti de pe stația mea de lucru pe Homebrew Special va fi una dintre primele mele sarcini după această piesă, iar apoi îl voi promova la utilizarea activă în fața rețelei mele de acasă.)
În numele rigurozității, ar trebui să observăm o limitare comună, ceva de către toate echipamentele de rețea de consum pe care le-am gestionat vreodată: dorința de a reporni după aproape orice schimbare. Unele dintre aceste reporniri durează mult peste un minut. Nu am nici cea mai vagă idee de ce, dar oricare ar fi motivul, Homebrew Special nu este afectat de acest standard industrial. Faci o modificare, o aplici, ai terminat. Și dacă trebuie să repornești Special? Este din nou în funcțiune în 12 secunde. (Am cronometrat-o numărând ping-urile scăpate.)
Așa că, dacă cifrele v-au convins și doriți să vă construiți propriul Homebrew Special, tot ce vă trebuie este un PC cu două interfețe de rețea fizice. Acesta poate fi un mini PC special, cum ar fi cel pe care l-am folosit aici, sau poate fi orice cutie veche pe care o ai prin preajmă și în care poți înghesui două plăci de rețea. Nu vă lăsați intimidat de prima captură de ecran. Construirea propriului router cu adevărat rapid nu este atât de greu de deprins. Și, dacă cereți cu insistență o foaie de parcurs, de fapt, vom prezenta în curând procesul de la „aici este un calculator obișnuit” la „aici este un router și iată cum îl configurați”.
Jim Salter (@jrssnet) este autor, vorbitor public, proprietar de mici afaceri, sysadmin mercenar și tată a trei copii – nu neapărat în această ordine. A gustat pentru prima dată cu adevărat din open source rulând Apache pe propriul său server dedicat FreeBSD 3.1 în 1999, iar de atunci a fost un apărător înfocat al FOSS. De asemenea, a creat și întreține http://freebsdwiki.net și http://ubuntuwiki.net.
.