Skip to main content

Cyber AI România

Network namespaces și veth pairs pe Linux: cum construiești un laborator de rețea izolat direct în sistem

Dacă vrei să testezi reguli de rutare, conectivitate între două servicii sau comportamentul unei aplicații în condiții de rețea controlată, nu ai nevoie neapărat de mașini virtuale. Linux oferă deja două mecanisme foarte utile pentru astfel de scenarii: network namespaces și veth pairs. Împreună, ele îți permit să construiești un laborator de rețea izolat direct în sistemul de operare, rapid, repetabil și ușor de șters după test.

Pe scurt, un network namespace separă resursele de rețea. Documentația network_namespaces(7) explică faptul că un namespace izolează dispozitivele de rețea, stack-urile IPv4 și IPv6, tabelele de rutare, regulile de firewall, directoarele precum /proc/net și chiar spațiul pentru anumite socket-uri. Asta înseamnă că poți crea un mediu în care o aplicație „vede” altă interfață, alte adrese IP și alte reguli decât cele din sistemul principal.

A doua piesă este veth pair. Conform veth(4), dispozitivele veth funcționează ca un cablu virtual: pachetele trimise pe o interfață sunt primite imediat pe capătul pereche. Exact de aceea sunt folosite frecvent pentru a conecta namespace-uri între ele sau pentru a lega containerele de restul rețelei. Practic, creezi două capete virtuale, muți câte unul unde ai nevoie și obții o legătură punct-la-punct complet izolată de rețeaua ta fizică.

De ce merită acest laborator? În primul rând, este ideal pentru învățare și diagnostic. Poți simula două gazde Linux pe același calculator, fără să atingi configurația de producție. În al doilea rând, poți reproduce probleme de rețea într-un mediu curat: o rută lipsă, un serviciu care ascultă doar pe anumite interfețe sau reguli nftables care trebuie testate înainte de a fi aplicate pe un server real. În al treilea rând, setup-ul este foarte rapid și poate fi automatizat în scripturi de test.

Un laborator minim pornește de la doi namespace-uri, de exemplu ns-client și ns-server. Cu ip netns add creezi spațiile de rețea, iar cu ip link add creezi perechea veth. Un capăt rămâne asociat unui namespace, celălalt este mutat în al doilea. Apoi ridici interfețele și loopback-ul din fiecare spațiu, atribui adrese IP și verifici conectivitatea cu ping rulat prin ip netns exec. Pagina ip-netns(8) este utilă aici și pentru că arată cum poți executa comenzi direct într-un namespace fără să schimbi sesiunea principală.

Un exemplu simplu, sigur pentru laborator, arată așa:

ip netns add ns-client

ip netns add ns-server

ip link add veth-client type veth peer name veth-server

ip link set veth-client netns ns-client

ip link set veth-server netns ns-server

ip -n ns-client addr add 10.10.0.1/24 dev veth-client

ip -n ns-server addr add 10.10.0.2/24 dev veth-server

ip -n ns-client link set lo up

ip -n ns-server link set lo up

ip -n ns-client link set veth-client up

ip -n ns-server link set veth-server up

ip netns exec ns-client ping -c 2 10.10.0.2

Dacă ping-ul răspunde, ai deja două „mașini” virtuale de rețea în același Linux. De aici poți merge mai departe: adaugi un bridge, conectezi un namespace la un container, testezi rezolvarea DNS sau verifici ce se întâmplă când o aplicație ascultă doar pe localhost. Un detaliu important este că fiecare namespace are propriul loopback, iar acesta trebuie activat explicit. Altfel, unele teste pot părea „stricate” deși problema este doar interfața lo neactivată.

Mai există și limite practice. Documentația network_namespaces(7) subliniază că un dispozitiv fizic poate exista într-un singur namespace la un moment dat. În plus, când un namespace este eliberat, interfețele veth din interior sunt distruse, iar dispozitivele fizice sunt mutate înapoi în namespace-ul inițial. Asta e util pentru curățenie, dar înseamnă că trebuie să planifici atent testele dacă lucrezi cu interfețe reale, nu doar virtuale.

Pentru lucru sigur, regula bună este să începi doar cu namespace-uri și interfețe veth, fără să muți plăci fizice și fără să umbli la firewall-ul gazdei principale până nu înțelegi topologia. Pentru verificare, folosește comenzi precum ip netns list, ip -n nume-namespace addr, ip -n nume-namespace route și ip netns pids. Dacă vrei să ștergi laboratorul, îl poți dezactiva curat cu ip netns del pentru fiecare spațiu creat.

Pentru administratori, dezvoltatori și oameni care învață networking pe Linux, acesta este unul dintre cele mai utile laboratoare locale: pornește în câteva secunde, nu consumă resurse ca o mașină virtuală și te ajută să înțelegi mai clar cum circulă traficul între procese, interfețe și namespace-uri.

Surse

Facebook
X
WhatsApp
Network namespaces și veth pairs pe Linux: cum construiești un laborator de rețea izolat direct în sistem

Te-ar putea interesa si: