Пір VPN пінгує інші інтерфейси, бо вони локальні
Локальна таблиця маршрутизації надсилає пакети на будь-яку адресу, якою володіє хост, на якому б інтерфейсі він не був. Налаштування пересилання ніколи не потрапляють на цей шлях.
Клієнт WireGuard підключається і пінгує адресу на зовсім іншому інтерфейсі, і відповідь надходить. Записи показують запит лише на тунелі. Нічого не зламано, і ретельно вимкнене налаштування пересилання тут ні до чого. Це порівняння двох шляхів, які на схемі виглядають схоже, а в ядрі цілком різні.
Один шлях пересилає пакети за когось іншого; інший доставляє їх самому хосту.
Пакет, адресований хосту, залишається в хості
Віддалений клієнт надсилає IP-пакет на адресу, якою володіє хост. Маршрутизація ставить одне питання про цей пакет: чи ця адреса призначення локальна? Кожна адреса, яку тримає хост, з’являється в локальній таблиці маршрутизації, і ця таблиця переглядається раніше за основну, тому пакет іде до власного стеку хоста, а не назовні через інший інтерфейс. Відповідь створюється локально, і вона повертається через тунель, бо запит прийшов звідти.
Це весь механізм. Пересилання не відбувається, зміна стану інтерфейсу не бере участі, і розглядуваній адресі не потрібно бути доступною з будь-якого іншого місця.
Чому ip_forward не застосовується
Пересилання керує пакетами, які мають вийти через інший інтерфейс, ніж той, на який вони прийшли. Пінг до самого хоста ніколи не йде цим шляхом: пакет споживається локально, і відповідь створюється локально. Тому встановлення net.ipv4.ip_forward=0 тут нічого не змінює, і правило в ланцюжку пересилання ніколи не бачить цей трафік. Правильний контроль розташований на вхідному шляху, обмежений вхідним інтерфейсом або джерелом.
Ось чому вимкнення пересилання і припущення, що хост ізольований, створює хибне відчуття безпеки.
Прочитайте локальну таблицю, яка вирішила
ip rule show зазвичай повідомляє про правило з нульовим пріоритетом, яке надсилає всі пошуки спочатку до локальної таблиці, а ip route show table local перелічує власні адреси хоста з локальною областю. Ця таблиця включає адреси на інтерфейсах, які адміністративно вимкнені, але все ще налаштовані. Статично призначені адреси IPv4 зазвичай переживають обрив зв’язку, і саме тому пінг до вимкненого мосту все ще може вдатися і здивувати оператора.
IPv6 розходиться саме в цьому пункті. Його адреси зазвичай відкликаються, коли зв’язок падає, якщо не встановлено keep_addr_on_down. Порівнюйте родини, а не припускайте, що одне правило покриває обидві.
Чого насправді досягає пір
Відповідь з власної адреси маршрутизатора в сегменті нічого не каже про машини за цим сегментом. Пір не може досягти хоста за іншим інтерфейсом цим шляхом; він досягає лише адрес, якими володіє сам маршрутизатор. Перевірка служби на окремому хості LAN, а не пінг адреси маршрутизатора, — це те, що встановлює, чи пересилання взагалі дозволене.
Обмеження піра службами, прив’язаними до адреси тунелю, — питання вхідної політики. Дозвольте потрібну службу на інтерфейсі тунелю і обмежте джерела, яким можна нею користуватися, бо пакет справді приходить туди.
Перевірте також адреси, які ви збиралися вивести з експлуатації. Видалити адресу з інтерфейсу надійніше, ніж нагромаджувати правила міжмережевого екрана поверх застарілої.