Маршрут blackhole против kill switch VPN: что делает каждый
Маршрут blackhole отбрасывает подходящий трафик и обеспечивает закрытый путь при сбое. Сравните его охват и слепые зоны с kill switch на основе фильтрации пакетов.
Пакет покидает ноутбук, никогда не доходит до шлюза 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 — это решение о пересылке, принятое раньше в стеке. Оба могут остановить трафик, но они видят разное и пропускают разные случаи.
| 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 |
Охват — это то, где сравнение имеет значение. Межсетевой экран может сопоставлять владельца, порт или интерфейс и блокировать приложение, оставляя конечную точку доступной; маршрут так не может. Наоборот, маршрут может отправить целый префикс в отбрасывание без загруженного фильтра пакетов, что полезно в минимальной системе.
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 и таблицу, из которой он взят. Третья планирует удаление через одну минуту, что даёт достаточно времени, чтобы подтвердить политику, и достаточно коротко, чтобы восстановиться после ошибки на удалённом хосте. После подтверждения поведения сделайте запись постоянной через то же управление конфигурацией, которому принадлежат остальные маршруты.
Закройте изменение, записав префикс, таблицу, семейство адресов и метод отката. Отбрасывание — это намеренное исключение в маршрутном проекте, и следующему инженеру нужно знать, какой трафик оно должно было остановить, прежде чем решать, уместно ли оно ещё.