Пакет напушта преносни рачунар, никада не стиже до VPN приступника и ниједан бројач заштитног зида се не помера. Табела рутирања је већ одлучила судбину пакета: blackhole запис се поклопио с њим и језгро га је одбацило пре него што га је видело било које сучеље. Такво понашање је корисно када одредиште треба да падне затворено, али то је радња рутирања уског обухвата. Управо је третирање тога као потпуног kill switch-а место где дизајни погреше.

Шта радња одбацивања заправо покрива

Претрага руте бира табелу, а затим најдужи одговарајући префикс у њој. Маршрута blackhole је обичан запис чија је радња одбацивање, па утиче само на пакете који би изабрали тај запис након целе одлуке. Промените табелу правилом политике или додајте конкретнији префикс и одбацивање више не важи.

Зато је обухват blackhole-а прецизан и лако се описује: покрива префикс, у табели, за ту фамилију адреса. Не покрива одредиште које би добила друга табела и не покрива IPv6 само зато што је IPv4 префикс одбачен.

ip route get приказује одлуку пре него што било шта поставите, укључујући табелу и тип руте. Читање тог излаза је брже од закључивања из неуспелог захтева које је правило или префикс деловао.

Blackhole није исто што и unreachable или prohibit

Linux нуди три типа рута сличних одбацивању и они се разликују по томе шта пошиљалац види. Blackhole одбацује пакет без одговора, па клијент види истек времена. Рута unreachable враћа ICMP unreachable поруку, па веза брзо пада с грешком хоста или мреже. Рута prohibit враћа грешку административне забране, што је ближе намерном одбијању политике.

Изаберите понашање које желите да апликација види. Тихо одбацивање је прикладно када не желите да откријете политику, а тренутна грешка је боља када корисници треба да разумеју зашто је одредиште недоступно. Мешање типова кроз мрежу ствара тикете подршке који исту политику описују као три различита квара.

Не претпостављајте да је сваки запис одбацивања заменљив када дијагностикујете везу. Текст грешке, време и снимак пакета се разликују, а тип руте у табели вам говори на који гледате. приручник за ip-route наводи типове и њихово понашање при грешци.

Како се пореди са kill switch-ом

Kill switch је филтрирање пакета: правило заштитног зида које одбацује излазни саобраћај који би изашао изван тунела. Маршрута blackhole је одлука о прослеђивању донета раније у стек-у. Обе могу да зауставе саобраћај, али виде различите ствари и промашују различите случајеве.

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

Обухват је оно где је поређење важно. Заштитни зид може да упари власника, порт или сучеље и блокира апликацију док крајња тачка остаје доступна; рута то не може. Супротно, рута може да пошаље цео префикс у одбацивање без иједног учитаног филтера пакета, што је корисно на минималном систему.

AllowedIPs у WireGuard-у је криптокључно рутирање, а не заштитни зид. Одлучује који се префикси одредишта прихватају у сучеље, а профил који наводи само подмрежу тунела једноставно оставља друга одредишта уобичајеној подразумеваној рути. Зато профили пуног тунела користе 0.0.0.0/0 и зато wg-quick такође инсталира правила заштитног зида када може.

Држите крајњу тачку тунела изван одбацивања

Спољна адреса крајње тачке мора да остане доступна кроз физичко сучеље. Одбацивање које ухвати и ту адресу спречава да руковање изађе и тунел се никада не подиже, што изгледа као квар VPN-а, а не као политика рутирања. Проверите руту до крајње тачке пре и после промене.

Административни приступ припада истом прегледу. Ако је једини пут до рутера или клијента тунел, прешироко одбацивање може да вас закључа изван машине која би вам омогућила да га уклоните. Држите документовану ванпојасну руту, конзолу или враћање по тајмеру.

IPv6 захтева сопствени запис и сопствени преглед. Дизајн који одбацује IPv4 у blackhole, а оставља IPv6 на подразумеваној рути, цури управо онај саобраћај који је политика требало да заустави, а грешка је невидљива у тесту само са IPv4.

Уведите то фазно са тајмером и враћањем

Примените руту са кратким аутоматским уклањањем да грешка не преживи рестарт. Команде испод користе распон за документацију; замените га префиксом који ваш дизајн заиста одбацује:

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

Друга команда треба да пријави blackhole руту и табелу из које потиче. Трећа заказује уклањање за један минут, што је довољно времена да потврдите политику и довољно кратко да се опоравите од грешке на удаљеном хосту. Када се понашање потврди, учините запис трајним кроз исто управљање конфигурацијом које поседује остале руте.

Затворите промену тако што ћете забележити префикс, табелу, фамилију адреса и метод враћања. Одбацивање је намерни изузетак у дизајну рутирања и следећи инжењер мора да зна који је саобраћај требало зауставити пре него што одлучи да ли још припада тамо.

Повезани чланци