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

У класичному шляху даних у просторі користувача маршрут ядра заводить пакет у процес тунелю, а iroute каже цьому процесу, який пір має його отримати. Жоден не замінює іншого, і конфігурація лише з одним із них виглядатиме слушною аж до першого ping.

Два рішення, а не один маршрут

Уявіть з'єднання «сайт-сайт», де 10.77.20.0/24 стоїть за одним клієнтом. Маршрут ядра на сервері, наприклад ip route add 10.77.20.0/24 dev tun0, надсилає відповідні пакети на пристрій тунелю. Далі OpenVPN звертається до власної внутрішньої таблиці, побудованої з записів iroute у каталозі конфігурації клієнтів, щоб вирішити, яке з'єднання піра їх отримає. Без маршруту ядра пакет взагалі не досягає процесу, а без маршруту піра він досягає процесу і нікуди не йде.

Цей поділ легко забути, бо один рядок маршруту в профілі клієнта може здатися таким, що виконує обидві роботи. Це не так: надсилання маршруту каже клієнтам, що передавати через тунель, тоді як iroute каже серверу, кому належить діапазон адрес за клієнтом. Вони живуть у різних файлах, читаються різними сторонами і відмовляють у протилежних напрямках.

Де місце iroute і що він означає

Запис іде в окремий файл клієнта, названий за common_name клієнта, у каталозі client-config-dir, у вигляді iroute 10.77.20.0/24. Збіг імені файлу не косметичний: OpenVPN знаходить автентифіковану особу й читає файл саме з таким іменем, тож файл із назвою site-a діє лише для клієнта, у якого common name — site-a. Додайте ccd-exclusive, якщо клієнтів без такого файлу слід відхиляти одразу, і це правильне налаштування, коли кожен клієнт є шлюзом сайту. Тримайте по одному файлу на шлюз і називайте його за тим subject сертифіката, який ви справді видаєте.

Перевірте запис із сервера, перш ніж звинувачувати далеку LAN. Файл стану перелічує підключених клієнтів з їхніми common name, а сервер, запущений із --verb 4, записує встановлення iroute у міру підключення піра. Якщо під час підключення нічого не з'являється, файл лежить не в тому каталозі або називає не ту особу.

Пастка: файл є, особа не та

Правильний на вигляд iroute, прикріплений до не того піра, марнує більше часу, ніж відсутній файл, бо на диску все виглядає гаразд. Перейменування сертифікатів, повторювані common name і username-as-common-name, що змінює чинну особу, — усе це його породжує. Перевіряйте, яку особу автентифікував сервер, а не яку ви очікували: вивід стану є авторитетним, а ім'я файлу — лише ключем пошуку.

Маршрут може пережити свого власника. Статичні маршрути й записи iroute описують префікс, а не гарантію доступності, тож трафік може й далі спрямовуватися до піра, який зараз від'єднаний.

Завершіть шлях за межами піра

Володіння піром — це середина шляху, а не кінець. Клієнт має пересилати пакети з тунелю у свою LAN, а це означає ввімкнене IP-пересилання на тому хості та правило брандмауера, що дозволяє транзит. Хостам у далекій LAN потрібен зворотний шлях для адреси тунелю: або маршрут, що вказує назад на шлюз, або свідомо спроєктований NAT на боці клієнта. Підтвердьте налаштування пересилання на клієнті за допомогою sysctl net.ipv4.ip_forward, а не припускайте типове значення дистрибутива.

Якщо інші клієнти VPN мають діставатися цієї підмережі, схема знову ускладнюється: серверу потрібен client-to-client, а тим клієнтам — маршрутизація префікса через тунель. Ніщо з цього не випливає з власної таблиці маршрутів сервера.

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

Схожі статті