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

Один шлях пересилає пакети за когось іншого; інший доставляє їх самому хосту.

Пакет, адресований хосту, залишається в хості

Віддалений клієнт надсилає IP-пакет на адресу, якою володіє хост. Маршрутизація ставить одне питання про цей пакет: чи ця адреса призначення локальна? Кожна адреса, яку тримає хост, з’являється в локальній таблиці маршрутизації, і ця таблиця переглядається раніше за основну, тому пакет іде до власного стеку хоста, а не назовні через інший інтерфейс. Відповідь створюється локально, і вона повертається через тунель, бо запит прийшов звідти.

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

Чому ip_forward не застосовується

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

Ось чому вимкнення пересилання і припущення, що хост ізольований, створює хибне відчуття безпеки.

Прочитайте локальну таблицю, яка вирішила

ip rule show зазвичай повідомляє про правило з нульовим пріоритетом, яке надсилає всі пошуки спочатку до локальної таблиці, а ip route show table local перелічує власні адреси хоста з локальною областю. Ця таблиця включає адреси на інтерфейсах, які адміністративно вимкнені, але все ще налаштовані. Статично призначені адреси IPv4 зазвичай переживають обрив зв’язку, і саме тому пінг до вимкненого мосту все ще може вдатися і здивувати оператора.

IPv6 розходиться саме в цьому пункті. Його адреси зазвичай відкликаються, коли зв’язок падає, якщо не встановлено keep_addr_on_down. Порівнюйте родини, а не припускайте, що одне правило покриває обидві.

Чого насправді досягає пір

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

Обмеження піра службами, прив’язаними до адреси тунелю, — питання вхідної політики. Дозвольте потрібну службу на інтерфейсі тунелю і обмежте джерела, яким можна нею користуватися, бо пакет справді приходить туди.

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

Схожі статті