Пакет пакідае ноўтбук, ніколі не дасягае шлюза 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 і табліцу, з якой ён узяты. Трэцяя плануе выдаленне праз адну хвіліну, што дае дастаткова часу, каб пацвердзіць палітыку, і дастаткова мала, каб аднавіцца пасля памылкі на аддаленым хосце. Пасля пацверджання паводзін зрабіце запіс пастаянным праз тое ж кіраванне канфігурацыяй, якое валодае іншымі маршрутамі.

Завяршыце змену, запісаўшы прэфікс, табліцу, сямейства адрасоў і метад адкату. Адкіданне — гэта наўмыснае выключэнне ў маршрутным праекце, і наступнаму інжынеру трэба ведаць, які трафік яно мела спыніць, перш чым вырашаць, ці яно яшчэ да месца.

Падобныя артыкулы