Маршрут 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 і таблицю, з якої він узятий. Третя планує видалення за одну хвилину, що дає достатньо часу, щоб підтвердити політику, і достатньо мало, щоб відновитися після помилки на віддаленому хості. Після підтвердження поведінки зробіть запис постійним через те саме керування конфігурацією, якому належать інші маршрути.
Закрийте зміну, записавши префікс, таблицю, родину адрес і метод відкату. Відкидання — це навмисний виняток у маршрутному проєкті, і наступному інженеру потрібно знати, який трафік воно мало зупинити, перш ніж вирішувати, чи воно ще доречне.