Протоколи тунелювання: як один протокол обертає інший
Протокол тунелювання приймає пакети одного протоколу та загортає їх у пакети іншого. Ось як працюють VPN, як IPv6 охопив світ через Інтернет IPv4, як корпоративні мережі охоплюють континенти та як SSH дозволяє підключатися до вашої домашньої мережі через брандмауер готелю. Це пояснення того, що насправді таке тунелювання, і протоколів, які мають значення.
Повний текст статті подано англійською мовою нижче.
Основна ідея протоколу тунелювання
A приймає пакет одного протоколу, загортає його в корисне навантаження іншого протоколу та надсилає результат через мережу, яка зазвичай не передає оригінал. Обгортка називається encapsulation. Загорнутий пакет проходить через мережу, яка розуміє лише зовнішній протокол, і розгортається на дальньому кінці.
Практично: пакет IPv6, загорнутий у пакет IPv4, може перетинати мережі лише з IPv4. Кадр Ethernet, загорнутий в IP-пакет, може переміщатися через публічний Інтернет між двома локальними мережами. TCP-з’єднання, загорнуте в HTTPS, може проходити через брандмауер, який дозволяє лише порт 443.
Чому існує тунелювання
- Протокольне з’єднання: запустіть новий протокол у мережах, які його не підтримують. Класичним прикладом є IPv6-over-IPv4 (Teredo, 6in4).
- Безпека: загорніть незахищений протокол у зашифрований. SMB через SSH, простий HTTP через TLS (= HTTPS), корпоративний трафік через IPsec.
- Віртуалізація мережі: змусьте дві фізично окремі мережі поводитися як одна. Tailscale, ZeroTier, MPLS L3VPN, VXLAN — усі використовують тунелювання під капотом.
- Обхід брандмауера: загортайте заблоковані протоколи в дозволені. OpenVPN-over-TCP/443 виглядає як HTTPS для брандмауера, який блокує все інше.
- Віддалений доступ: надайте сторонньому співробітнику IP-адресу в корпоративній мережі. Корпоративна VPN структурно є тунелем.
Основні протоколи тунелювання
VPN-орієнтовані
- WireGuard — сучасний, швидкий, впевнений. Лише UDP.
- OpenVPN — гнучкий, на основі TLS, працює через TCP або UDP. Можна приховати як HTTPS.
- IKEv2/IPsec — власний мобільний / корпоративний варіант.
- L2TP/IPsec — застарілий, подвійно інкапсульований, повільний.
- PPTP — історично поширений, остаточно зламаний у 2012 році.
- SSTP — TLS-тунельований протокол VPN Microsoft, лише для Windows origin.
IP-in-IP і друзі
- GRE (узагальнена інкапсуляція маршрутизації) — розроблено Cisco, підтримує довільні протоколи мережевого рівня всередині IP. Основа для багатьох корпоративних налаштувань VPN і основа L3 для таких речей, як NVGRE.
- IP-in-IP — найпростіший випадок, просто загортаючи IP-пакет в інший. RFC 2003.
- Teredo — Тунелювання IPv6 через IPv4 для хостів, що знаходяться за NAT. Розроблено Microsoft.
- 6in4 — налаштовані вручну тунелі IPv6 через IPv4, які часто використовуються службами посередників тунелів.
- 4in6 — протилежний напрямок, IPv4 через IPv6.
Накладання центру обробки даних
- VXLAN — віртуальна розширювана локальна мережа. Загортає кадри Ethernet у UDP. Домінуючий протокол накладення в сучасних центрах обробки даних.
- GENEVE — новіший, більш гнучкий конкурент VXLAN. Використовується в деяких підкладках хмарних провайдерів.
- NVGRE — варіант Microsoft на основі GRE.
SSH тунелі
SSH підтримує три режими переадресації: переадресація локального порту (направляє локальний порт через SSH на віддалену адресу), віддалене перенаправлення портів (зворотне) та динамічне проксі SOCKS (використовуйте SSH як загальний проксі SOCKS5). Усі варіанти тунелювання: SSH загортає довільний TCP-трафік у свій зашифрований канал. Класична команда ssh -L 5432:database.internal:5432 jumpbox — це тунель.
HTTP/HTTPS-тунелі
Для корпоративних мереж, які дозволяють лише вихідний порт 443, такі інструменти, як corkscrew, httptunnel і Cloudflare Tunnel загортають довільний TCP у запити HTTP CONNECT або з’єднання WebSocket. Менш ефективний, ніж пряме підключення; надійний крайній засіб обходу.
Провал TCP через TCP
Найпоширеніша помилка під час розгортання VPN. Коли ви тунелюєте TCP-з’єднання всередині іншого TCP-з’єднання (наприклад, OpenVPN-TCP, що передає HTTPS користувача), тепер запускаються таймери повторної передачі two. Коли відбувається втрата пакета, обидва рівні намагаються повторно передати. Розширюється вікно перевантаження внутрішнього TCP; зовнішні буфери TCP не встигають. Затримка зростає в геометричній прогресії.
Ось чому WireGuard підтримує лише UDP і чому OpenVPN-UDP є кращим над OpenVPN-TCP, коли це дозволяє мережа. OpenVPN-TCP — це навмисний компроміс для конкретного випадку, коли обхід брандмауера має більше значення, ніж пропускна здатність.
Ракурс безпеки
Тунелювання є морально нейтральним. Ті самі методи, які дозволяють вашій корпоративній VPN захищати віддалених співробітників, можуть використовуватися зловмисним програмним забезпеченням для викрадання даних через тунелі DNS або HTTPS, які виглядають як звичайний трафік. Групи корпоративної безпеки докладають значних зусиль для виявлення ворожих тунелів за допомогою DPI, аналізу потоку та застосування політики в точках виходу.
Стандартне правило: тунель настільки ж безпечний, наскільки безпечний його внутрішній протокол, його зовнішній протокол і модель загрози оператора. OpenVPN тунелювання простого HTTP не робить HTTP безпечним для пункту призначення; це робить з’єднання між клієнтом і сервером OpenVPN безпечним.
Як перевірити, що тунель працює
- Перевірте, чи трафік виходить там, де ви очікуєте — наш пошук IP показує вихідну IP-адресу та геолокацію.
- Перевірте, чи DNS проходить через тунель — наш Тест витоку DNS.
- Запустіть наш повний тест витоку VPN для WebRTC, IPv6 та інших векторів витоку.
- Для тунелів SSH команда
wна віддаленому кінці показує ваше ефективне джерело IP.
Часті запитання
- Яка різниця між тунелем і VPN?
- VPN є одним із застосувань тунелювання. Тунель є механізмом інкапсуляції; VPN — це продукт, створений навколо нього (керування ключами, налаштування тощо). Усі VPN є тунелями, але не всі тунелі є VPN — сеанс TLS технічно є тунелем, перенаправлення портів SSH є тунелем, підкладка MPLS L3VPN використовує тунелювання.
- Чому протокол TCP поверх TCP поганий?
- Два таймера ретрансляції борються один з одним. Коли пакети відкидаються, внутрішній і зовнішній TCP повторюють спробу. Внутрішнє вікно перевантаження зростає за межі зовнішнього буфера, затримка зростає експоненціально, пропускна здатність падає. Це допустимо в середовищах з низькими втратами; у мережах із втратами даних це найгірша конфігурація VPN. Використовуйте тунелювання на основі UDP, де це дозволяє мережа.
- Чи завжди брандмауер виявляє тунель?
- Сучасний DPI може ідентифікувати загальні сигнатури тунелів (OpenVPN, рукостискання WireGuard). Інструменти обфускації обертають тунелі, щоб вони виглядали як звичайні HTTPS або інші дозволені протоколи. Гонка озброєнь постійна. Для неворожих мереж основні правила брандмауера не перевіряють достатньо глибоко, щоб ідентифікувати тунелі за вмістом.
- Чи є HTTPS тунелем?
- Технічно так. HTTPS обертає HTTP в TLS. Відносини структурно ідентичні OpenVPN, що обгортає довільний IP-трафік у TLS. Межа між «протоколом» і «тунелем» здебільшого залежить від термінології; HTTPS зазвичай не називають тунелем, оскільки внутрішній і зовнішній протоколи розроблені для спільної роботи, але механізм інкапсуляції однаковий.
- Який протокол тунелювання вибрати для VPN?
- Для сучасного споживача чи бізнесу: WireGuard. Для обмежених мереж: OpenVPN-TCP/443 з обфускацією TLS. Для нативної iOS/macOS без сторонніх клієнтів: IKEv2/IPsec. Уникайте PPTP (зламаний) і уникайте чистого L2TP (замість цього використовуйте IKEv2/IPsec).