Імена розв'язуються в адреси, і ці адреси можуть потрапити до набору міжмережевого екрана, який згодом впливає на маршрутизацію, що дає змогу скерування за іменем без проксі. Заковика в тому, що чотири компоненти мають правильно передати: розв'язувач, набір, класифікатор, який позначає новий потік, і партнер, який його несе. Кожна передача зривається по-своєму, і кожна тримає свій час.

Розглядайте схему як ланцюг, а не як конфігурацію. Питання на кожному кроці: який компонент володіє рішенням і що стається, коли його входу немає.

Що може і чого не може відповідь DNS

dnsmasq може копіювати адреси з відповідей до набору nftables, і це живлення, а не рішення про маршрутизацію. Цей параметр, описаний у посібнику dnsmasq, задає родину, таблицю й набір, а його провідний 4# вибирає лише записи A, тому адресатам v6 потрібен власний лад. Набір уже має існувати, бо розв'язувач додає елементи до того, що створив власник екрана. Ніщо на цьому кроці не вибирає інтерфейс, таблицю чи партнера.

Клієнт також має використовувати цей розв'язувач для імені. Застосунок із власним зашифрованим DNS або відповідь із кешу часів до появи політики підключається, не створюючи жодного запису в наборі.

Набір — це вхід, а не маршрут

Елемент у наборі — це умова збігу. Щось має подивитися на нього, вирішити, що цей пакет починає новий потік, і застосувати політику, яка відправляє потік через тунель. У Linux це зазвичай означає вихідний шлях із підтримкою маршрутизації, який уміє ставити мітку, правило, що надсилає позначені пакети до окремої таблиці, і маршрут у цій таблиці на пристрій WireGuard. Саме лише членство нічого з цього не встановлює.

nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips

Партнер застосовує другу перевірку покриття, про яку забувають. WireGuard шифрує пакет лише для партнера, чиї дозволені адреси охоплюють адресата, тому маршруту за політикою в інтерфейс недостатньо, коли список партнера виключає цей префікс. Тримайте список під контролем власника маршрутизації, а не покладайтеся на те, яке створення маршрутів випадково виконає менеджер.

Мітки, таблиці й покриття партнера

Мітки — це спільний простір імен, тому і значення, і маска мають бути узгоджені з усім іншим, що їх використовує. Правилу, яке надсилає позначений трафік до окремої таблиці, потрібен визначений результат, коли в цій таблиці немає відповідного маршруту, бо пошук без відповіді може продовжитися до наступного правила й випустити пакет через фізичний інтерфейс. Маршрут за замовчуванням типу blackhole всередині окремої таблиці перетворює цю тиху втечу на видиме скидання. Чого схема досі не може — закриватися при відмові для адресата, який так і не потрапив до набору.

Власні зовнішні пакети тунелю мають уникнути класифікатора. Інструменти WireGuard дають мітку сокета саме для цього, і її використання не дає інкапсуляції маршрутизуватися назад в інтерфейс, який вона будує.

Перевіряйте кожен строк життя окремо

Три сховища старіють за трьома графіками: кеш розв'язувача, елементи набору й відстежуване з'єднання. Перевіряйте їх у цьому порядку й дивіться, чи рухається кожне тоді, коли має. Команди нижче читають розв'язувач, набір, таблицю з'єднань і правила політики, нічого не змінюючи.

dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show

Свіжий пошук, що додає елемент, доводить, що живлення працює, а застарілий елемент, який пережив свою відповідь, — це незбіг строків життя, який варто записати. Нове з'єднання в таблиці з'єднань з очікуваною міткою показує, що класифікатор працював, а старе з'єднання, що зберігає початкову мітку, — це правильна поведінка, а не помилка. Список правил відповідає, чи пошук політики взагалі існує, і це інше питання, ніж чи він збігся. Прочитайте чотири виводи в цьому порядку, і збійна передача викриє себе сама.

Там, де вимога полягає в тому, щоб певне ім'я завжди використовувало один шлях, набір, який живить DNS, не може це довести, бо спільні адреси несуть і інші імена. Проксі або механізм рівня застосунку — інструмент для такої гарантії.

Схожі статті