Paket opustí notebook, nikdy nedorazí k bráně VPN a žádný čítač firewallu se nepohne. Tabulka směrování už rozhodla o osudu paketu: blackhole záznam se s ním shodoval a jádro ho zahodilo dřív, než ho vidělo jakékoli rozhraní. Takové chování je užitečné, když má cíl selhat uzavřeně, ale je to směrovací akce s úzkým rozsahem. Právě považování za úplný kill switch je místo, kde se návrhy pokazí.

Čeho se akce zahození vlastně týká

Vyhledání trasy vybere tabulku a potom nejdelší odpovídající prefix v ní. Blackhole route je běžný záznam, jehož akcí je zahodit, takže ovlivní jen pakety, které by tento záznam zvolily až po celém rozhodnutí. Změňte tabulku pomocí pravidla zásad nebo přidejte konkrétnější prefix a zahození už neplatí.

Proto je rozsah blackhole přesný a snadno se popisuje: pokrývá prefix, v tabulce, pro onu rodinu adres. Nepokrývá cíl, který by vyhrála jiná tabulka, a nepokrývá IPv6 jen proto, že se zahazuje prefix IPv4.

ip route get ukazuje rozhodnutí dřív, než cokoli nasadíte, včetně tabulky a typu trasy. Čtení tohoto výstupu je rychlejší než odhadování z neúspěšného požadavku, které pravidlo nebo prefix zabralo.

Blackhole není totéž co unreachable nebo prohibit

Linux nabízí tři typy tras podobné zahození a liší se v tom, co odesílatel pozoruje. Blackhole zahodí paket bez odpovědi, takže klient vidí vypršení času. Trasa unreachable vrací zprávu ICMP unreachable, takže spojení rychle selže s chybou hostitele nebo sítě. Trasa prohibit vrací chybu administrativního zákazu, což je blíž úmyslnému odmítnutí zásad.

Vyberte chování, které má aplikace vidět. Tiché zahození je vhodné, když nechcete prozradit zásady, a okamžitá chyba je lepší, když uživatelé potřebují pochopit, proč je cíl nedostupný. Míchání typů v síti vytváří tikety podpory, které popisují stejné zásady jako tři různé závady.

Nepředpokládejte, že každý záznam zahození je zaměnitelný, když diagnostikujete spojení. Text chyby, načasování i zachycení paketů se liší a typ trasy v tabulce vám říká, na který z nich se díváte. manuál ip-route uvádí typy a jejich chování při chybě.

Jak si stojí proti kill switchi

Kill switch je filtrování paketů: pravidlo firewallu, které zahazuje odchozí provoz, jenž by odešel mimo tunel. Blackhole route je rozhodnutí o předávání učiněné dřív v zásobníku. Obě mohou provoz zastavit, ale vidí různé věci a minou různé případy.

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

Na pokrytí záleží nejvíc. Firewall může porovnávat vlastníka, port nebo rozhraní a zablokovat aplikaci, přitom koncový bod zůstane dostupný; trasa to neumí. Naopak trasa může poslat celý prefix do zahození, aniž by byl načten jakýkoli filtr paketů, což se hodí na minimálním systému.

AllowedIPs ve WireGuardu je kryptoklíčové směrování, ne firewall. Rozhoduje, které prefixy cílů se do rozhraní přijmou, a profil, který uvádí jen podsíť tunelu, prostě ostatní cíle nechá na běžné výchozí trase. Proto profily plného tunelu používají 0.0.0.0/0 a proto wg-quick také instaluje pravidla firewallu, když může.

Držte koncový bod tunelu mimo zahození

Vnější adresa koncového bodu musí zůstat dostupná přes fyzické rozhraní. Zahození, které tuto adresu také zachytí, zabrání odchodu handshake a tunel se nikdy nezvedne, což vypadá jako závada VPN, ne jako směrovací zásada. Zkontrolujte trasu ke koncovému bodu před změnou i po ní.

Správcovský přístup patří do stejné revize. Pokud je jedinou cestou k routeru nebo klientovi tunel, příliš široké zahození vás může zamknout mimo stroj, který by vám umožnil ho odstranit. Udržujte zdokumentovanou mimopásmovou trasu, konzoli nebo časovaný návrat.

IPv6 potřebuje vlastní záznam a vlastní revizi. Návrh, který zahazuje IPv4 do blackhole a nechává IPv6 na výchozí trase, uniká přesně ten provoz, který měly zásady zastavit, a chyba je neviditelná v testu jen pro IPv4.

Nasaďte to s časovačem a návratem

Použijte trasu s krátkým automatickým odstraněním, aby chyba nepřežila restart. Níže uvedené příkazy používají dokumentační rozsah; nahraďte ho prefixem, který váš návrh skutečně zahazuje:

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

Druhý příkaz by měl hlásit trasu blackhole a tabulku, ze které pochází. Třetí naplánuje odstranění za jednu minutu, což je dost času na potvrzení zásad a dost krátké na zotavení z chyby na vzdáleném hostiteli. Po potvrzení chování udělejte záznam trvalým přes stejnou správu konfigurace, která vlastní ostatní trasy.

Změnu uzavřete zapsáním prefixu, tabulky, rodiny adres a metody návratu. Zahození je záměrná výjimka v návrhu směrování a další inženýr musí vědět, který provoz mělo zastavit, než rozhodne, zda tam ještě patří.

Související články