Paketas palieka nešiojamąjį kompiuterį, niekada nepasiekia VPN šliuzo, ir joks ugniasienės skaitiklis nejuda. Maršrutų lentelė jau nusprendė paketo likimą: blackhole įrašas jam atitiko, ir branduolys jį atmetė dar prieš bet kuriai sąsajai jį pamatant. Toks elgesys naudingas, kai paskirties vieta turi nepavykti uždarai, bet tai siauros apimties maršrutizavimo veiksmas. Vertinti jį kaip visą kill switch – būtent ten dizainai ir suklysta.

Ką iš tikrųjų atitinka atmetimo veiksmas

Maršruto paieška pasirenka lentelę, tada joje ilgiausią atitinkantį priešdėlį. Blackhole maršrutas yra įprastas įrašas, kurio veiksmas yra atmetimas, todėl jis veikia tik tuos paketus, kurie būtų pasirinkę šį įrašą po viso sprendimo. Pakeiskite lentelę politikos taisykle arba pridėkite konkretesnį priešdėlį, ir atmetimas nebeveiks.

Todėl blackhole apimtis yra tiksli ir lengvai nusakoma: ji apima priešdėlį, lentelėje, tai adresų šeimai. Ji neapima paskirties vietos, kurią laimėtų kita lentelė, ir neapima IPv6 vien todėl, kad IPv4 priešdėlis atmetamas.

ip route get parodo sprendimą prieš ką nors diegiant, įskaitant lentelę ir maršruto tipą. Skaityti šią išvestį greičiau nei iš nepavykusios užklausos spėlioti, kuri taisyklė ar priešdėlis suveikė.

Blackhole nėra tas pats kaip unreachable ar prohibit

Linux siūlo tris atmetimui artimus maršrutų tipus, ir jie skiriasi tuo, ką stebi siuntėjas. Blackhole numeta paketą be atsakymo, todėl klientas mato laiko limitą. Unreachable maršrutas grąžina ICMP unreachable pranešimą, todėl ryšys greitai nutrūksta su mazgo ar tinklo klaida. Prohibit maršrutas grąžina administracinio draudimo klaidą, kuri artimesnė sąmoningam politikos atmetimui.

Pasirinkite elgesį, kurį norite parodyti programai. Tylus atmetimas tinka, kai nenorite atskleisti politikos, o tiesioginė klaida geresnė, kai naudotojams reikia suprasti, kodėl paskirties vieta nepasiekiama. Tipų maišymas tinkle sukuria pagalbos bilietus, kurie tą pačią politiką apibūdina kaip tris skirtingus gedimus.

Nepamanykite, kad kiekvienas atmetimo įrašas yra keičiamas diagnozuojant ryšį. Klaidos tekstas, laikas ir paketų įrašymas skiriasi, o maršruto tipas lentelėje pasako, į kurį žiūrite. ip-route vadovas išvardija tipus ir jų elgesį klaidų atveju.

Kaip jis lyginamas su kill switch

Kill switch yra paketų filtravimas: ugniasienės taisyklė, atmetanti išeinantį srautą, kuris išeitų už tunelio. Blackhole maršrutas yra perdavimo sprendimas, priimtas anksčiau kamiene. Abu gali sustabdyti srautą, bet mato skirtingus dalykus ir praleidžia skirtingus atvejus.

MechanismWhat it blocksWhat it missesHow failure looks
Blackhole routeDestinations matching the prefix and tableOther tables, other address families, traffic with a different routeSilent timeout
Firewall kill switchEgress not bound to the tunnel interfaceRules that are too broad can break the endpoint or DHCPDropped packets with counters
WireGuard AllowedIPsDestinations not routed into the interfaceTraffic that never enters the interface at allNo tunnel route, direct egress

Aprėptis yra ten, kur palyginimas svarbus. Ugniasienė gali atitikti savininką, prievadą ar sąsają ir blokuoti programą, palikdama galinį tašką pasiekiamą; maršrutas to negali. Atvirkščiai, maršrutas gali nusiųsti visą priešdėlį į atmetimą neįkėlus jokio paketų filtro, o tai naudinga minimalioje sistemoje.

WireGuard AllowedIPs yra šifravimo raktų maršrutizavimas, ne ugniasienė. Jis nusprendžia, kurie paskirties priešdėliai priimami į sąsają, o profilis, kuriame nurodytas tik tunelio potinklis, tiesiog palieka kitas paskirties vietas įprastam numatytajam maršrutui. Todėl viso tunelio profiliai naudoja 0.0.0.0/0 ir todėl wg-quick taip pat įdiegia ugniasienės taisykles, kai gali.

Laikykite tunelio galinį tašką už atmetimo ribų

Galinio taško išorinis adresas turi likti pasiekiamas per fizinę sąsają. Atmetimas, kuris taip pat pagauna šį adresą, neleidžia rankos paspaudimui išeiti, ir tunelis niekada nekeliamas, o tai atrodo kaip VPN gedimas, ne kaip maršrutizavimo politika. Patikrinkite maršrutą iki galinio taško prieš pakeitimą ir po jo.

Valdymo prieiga priklauso tai pačiai peržiūrai. Jei vienintelis kelias į maršrutizatorių ar klientą yra tunelis, per platus atmetimas gali užrakinti jus už mašinos, kuri leistų jį pašalinti. Laikykite dokumentuotą už juostos maršrutą, konsolę ar laiku grįžtamąjį atkūrimą.

IPv6 reikia atskiro įrašo ir atskiros peržiūros. Dizainas, kuris atmeta IPv4 į blackhole, o IPv6 palieka numatytajame maršrute, nutekina būtent tą srautą, kurį politika turėjo sustabdyti, ir klaida nematoma bandyme tik su IPv4.

Diegkite etapais su laikmačiu ir atkūrimu

Taikykite maršrutą su trumpu automatiniu pašalinimu, kad klaida neišliktų po perkrovimo. Toliau pateiktos komandos naudoja dokumentacijos diapazoną; pakeiskite jį priešdėliu, kurį jūsų dizainas iš tikrųjų atmeta:

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/8

Antroji komanda turėtų pranešti blackhole maršrutą ir lentelę, iš kurios jis atėjo. Trečioji suplanuoja pašalinimą po vienos minutės, o to pakanka politikai patvirtinti ir pakankamai trumpa, kad atsigautumėte po klaidos nuotoliniame mazge. Patvirtinus elgesį, padarykite įrašą nuolatiniu per tą patį konfigūracijos valdymą, kuriam priklauso kiti maršrutai.

Uždarykite pakeitimą įrašydami priešdėlį, lentelę, adresų šeimą ir atkūrimo metodą. Atmetimas yra sąmoninga išimtis maršrutizavimo dizaine, ir kitas inžinierius turi žinoti, kokį srautą jis turėjo sustabdyti, prieš nuspręsdamas, ar jis dar priklauso čia.

Susiję straipsniai