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

Два компоненти, один шлях пакета

Ядро записує IP-пакет у пристрій, а програма читає його з файлового дескриптора. У зворотному напрямку програма записує пакет назад, і ядро маршрутизує його так, ніби він прийшов на справжній інтерфейс. TUN переносить IP, а TAP — кадри Ethernet. Читання пакета на цій межі показує кадрування, і саме для цього пристрій і потрібен.

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

Створіть пристрій, потім спостерігайте за межею

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

sudo ip tuntap add dev tun9 mode tun user alice
ip -d link show tun9

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

Чого не може обіцяти ім'я інтерфейсу

Ім'я інтерфейсу нічого не говорить про шифрування чи автентифікацію. Програма може загорнути пакети в TLS, у власний протокол, в IPsec або взагалі ні в що. Вибір TUN замість TAP змінює кадрування на межі, а не проєкт безпеки. Вибір кадрування реальний і набагато менший за питання безпеки.

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

Узгодьте виправлення з етапом, що збоїть

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

ip -d link show tun0
journalctl -u openvpn-client@corp --since '10 min ago'

Якщо пристрій існує і процес тримає його, локальна межа працює, а проблема далі. Якщо пристрою немає, жодна перевірка облікових даних не допоможе. Етап, який ви можете назвати, — це етап, який ви можете перевірити. Документація TUN/TAP описує межу й модель пристрою.

Схожі статті