Як використовувати тунель TUN / TAP з користувацької програми?


9

Нещодавно я виявив існування інтерфейсів TUN / TAP Linux і досі намагаюся їх зрозуміти. Я думаю, що я отримую основну концепцію - створюються псевдопристрої, що імітують мережевий інтерфейс, а замість передачі даних до апаратного забезпечення передаються програмі простору користувачів.

Як би ви скеровували незв'язану програму для використання цього тунелю?

Наприклад, перед створенням тунелю моя система містить лише eth0 і lo, звичайний інтерфейс Ethernet (підключений до моєї локальної мережі) та інтерфейс зворотного зв'язку. Після того, як програма створює і налаштовує тунель, у мене з'явився новий інтерфейс gr0, який я вказав IP-адресу, яка знаходиться в моїй локальній мережі, але не використовується (тому ми всі в одній підмережі). Як я можу змусити неспоріднену програму використовувати цей "тунель"? Скажіть, у мене був простий додаток для передачі повідомлень клієнт / сервер Python, який використовує TCP-з'єднання, як я можу налаштувати його на використання тунелю?

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

Дякую!

Відповіді:


7

Це не завжди "тунель". TUN / TAP - це лише конкретні драйвери NIC. З точки зору мережевого стеку вони діють як і будь-які інші мережеві інтерфейси: вони можуть мати IP-адреси, можуть бути точковими або широкомовними інтерфейсами. На них також поширюються правила маршрутизації. Але весь трафік, який записується на один з цих мережевих інтерфейсів, спрямований на деяку програму простору користувачів для обробки, і всі дані, записані програмою простору користувачів, безпосередньо /dev/tunXвиглядають як вхідні пакети для мережевого стеку.

У звичайних серверах настройки тунелів та клієнта є пристрої TUN з призначеними адресами. Таблиці маршрутизації, налаштовані на обох, спрямовують необхідний трафік на ці пристрої TUN. Коли пакет передається до tun0, ядро ​​надсилає його програмі (клієнту) простору користувача, яка передає цей пакет іншій програмі на віддаленій машині (сервері) через, наприклад, з'єднання TCP. На віддаленій машині інша програма (сервер) отримує пакет від клієнта і записує його на власний /dev/tunXпристрій, "вводячи" цей пакет в мережевий стек. І тунельований пакет обробляється як і будь-який інший.


1
Тому відповідь (для моїх цілей) полягає в налаштуванні таблиці маршрутизації для спрямування трафіку на ці інтерфейси. Це був момент, який я пропускаю, але тепер я повинен мати можливість знайти рішення. Також я вдячний за пояснення, оскільки воно прояснює речі. Дякую!
Містер Шикаданс

2
Я в кінцевому підсумку використовував "route add <TUN IP ADDR> dev gr0". Це дозволило перенаправити трафік через новий інтерфейс. Знову дякую!
Містер Шикаданс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.