Rută blackhole versus kill switch VPN: ce face fiecare
O rută blackhole aruncă traficul corespunzător și impune o cale închisă la eșec. Comparați amploarea și punctele oarbe cu un kill switch bazat pe filtrarea pachetelor.
Un pachet pleacă de pe un laptop, nu ajunge niciodată la gateway-ul VPN, iar niciun contor al firewall-ului nu se mișcă. Tabela de rutare a decis deja soarta pachetului: o intrare blackhole s-a potrivit cu el, iar nucleul l-a aruncat înainte ca vreo interfață să-l vadă. Acest comportament este util când o destinație trebuie să eșueze închis, dar este o acțiune de rutare cu scop îngust. Tratarea ei ca un kill switch complet este locul unde proiectele greșesc.
Ce acoperă de fapt acțiunea de aruncare
O căutare de rută alege o tabelă, apoi cel mai lung prefix potrivit din ea. O rută blackhole este o intrare obișnuită a cărei acțiune este aruncarea, deci afectează doar pachetele care ar fi ales acea intrare după întreaga decizie. Schimbați tabela cu o regulă de politică sau adăugați un prefix mai specific, iar aruncarea nu mai se aplică.
De aceea amploarea unui blackhole este precisă și ușor de enunțat: acoperă prefixul, în tabelă, pentru acea familie de adrese. Nu acoperă o destinație pe care ar câștiga-o altă tabelă și nu acoperă IPv6 doar pentru că prefixul IPv4 este aruncat.
ip route get arată decizia înainte de a implementa ceva, inclusiv tabela și tipul rutei. Citirea acelei ieșiri este mai rapidă decât deducerea dintr-o cerere eșuată a regulii sau prefixului care a acționat.
Blackhole nu este același lucru cu unreachable sau prohibit
Linux oferă trei tipuri de rută asemănătoare aruncării, iar ele diferă prin ce observă expeditorul. Un blackhole aruncă pachetul fără răspuns, așa că clientul vede un timeout. O rută unreachable returnează un mesaj ICMP unreachable, așa că conexiunea eșuează rapid cu o eroare de gazdă sau de rețea. O rută prohibit returnează o eroare de interdicție administrativă, mai aproape de un refuz deliberat al politicii.
Alegeți comportamentul pe care vreți să-l vadă aplicația. Aruncarea silențioasă este potrivită când nu vreți să dezvăluiți politica, iar o eroare imediată este mai bună când utilizatorii trebuie să înțeleagă de ce o destinație nu este disponibilă. Amestecarea tipurilor într-o rețea produce tichete de suport care descriu aceeași politică drept trei defecțiuni diferite.
Nu presupuneți că fiecare intrare de aruncare este interschimbabilă când diagnosticați o conexiune. Textul erorii, momentul și captura de pachete diferă, iar tipul rutei din tabelă vă spune la care vă uitați. manualul ip-route enumeră tipurile și comportamentul lor la eroare.
Cum se compară cu un kill switch
Un kill switch este filtrare de pachete: o regulă de firewall care aruncă traficul de ieșire care ar părăsi în afara tunelului. O rută blackhole este o decizie de forwardare luată mai devreme în stivă. Ambele pot opri traficul, dar văd lucruri diferite și ratează cazuri diferite.
| Mechanism | What it blocks | What it misses | How failure looks |
|---|---|---|---|
| Blackhole route | Destinations matching the prefix and table | Other tables, other address families, traffic with a different route | Silent timeout |
| Firewall kill switch | Egress not bound to the tunnel interface | Rules that are too broad can break the endpoint or DHCP | Dropped packets with counters |
| WireGuard AllowedIPs | Destinations not routed into the interface | Traffic that never enters the interface at all | No tunnel route, direct egress |
Acoperirea este locul unde comparația contează. Un firewall poate potrivi proprietarul, portul sau interfața și poate bloca o aplicație lăsând punctul final accesibil; o rută nu poate. Invers, o rută poate trimite un prefix întreg la aruncare fără ca vreun filtru de pachete să fie încărcat, ceea ce este util pe un sistem minimal.
AllowedIPs din WireGuard este rutare cu cheie criptografică, nu un firewall. Decide ce prefixe de destinație sunt acceptate în interfață, iar un profil care listează doar subrețeaua tunelului lasă pur și simplu celelalte destinații rutei implicite obișnuite. De aceea profilurile de tunel complet folosesc 0.0.0.0/0 și de aceea wg-quick instalează și reguli de firewall când poate.
Țineți punctul final al tunelului în afara aruncării
Adresa exterioară a punctului final trebuie să rămână accesibilă prin interfața fizică. O aruncare care capturează și acea adresă împiedică ieșirea strângerii de mână, iar tunelul nu urcă niciodată, ceea ce arată ca o defecțiune VPN, nu ca o politică de rutare. Verificați ruta către punctul final înainte și după modificare.
Accesul de administrare aparține aceleiași revizuiri. Dacă singura cale către router sau client este tunelul, o aruncare prea largă vă poate bloca în afara mașinii care v-ar permite să o eliminați. Păstrați o rută documentată în afara benzii, o consolă sau o revenire temporizată.
IPv6 are nevoie de propria intrare și de propria revizuire. Un proiect care aruncă IPv4 într-un blackhole și lasă IPv6 pe ruta implicită scurge exact traficul pe care politica voia să-l oprească, iar greșeala este invizibilă într-un test doar cu IPv4.
Implementați-l etapizat cu un temporizator și o revenire
Aplicați ruta cu o eliminare automată scurtă, ca o greșeală să nu supraviețuiască unei reporniri. Comenzile de mai jos folosesc un interval de documentare; înlocuiți-l cu prefixul pe care proiectul dumneavoastră îl aruncă efectiv:
sudo ip route replace blackhole 10.0.0.0/8
ip route get 10.1.2.3
sudo systemd-run --on-active=60 /sbin/ip route del blackhole 10.0.0.0/8A doua comandă ar trebui să raporteze ruta blackhole și tabela din care provine. A treia programează eliminarea într-un minut, ceea ce este suficient timp pentru a confirma politica și suficient de scurt pentru a reveni dintr-o greșeală pe un host la distanță. După confirmarea comportamentului, faceți intrarea permanentă prin aceeași administrare a configurației care deține celelalte rute.
Închideți modificarea înregistrând prefixul, tabela, familia de adrese și metoda de revenire. Aruncarea este o excepție deliberată în proiectul de rutare, iar următorul inginer trebuie să știe ce trafic trebuia oprit înainte de a decide dacă mai aparține acolo.