VPN & Proxy

Туннелирование

Упаковка пакетов одного протокола в полезную нагрузку другого, чтобы передать их через сеть, которая исходный протокол не маршрутизирует.

Что такое туннелирование

Туннелирование (tunneling) — приём, при котором пакеты одного протокола упаковываются в полезную нагрузку другого и передаются через сеть, которая исходный протокол не поддерживает или не маршрутизирует. Для промежуточных узлов это обычный трафик протокола-переносчика, а исходный пакет внутри — просто данные, в которые никто не заглядывает.

Аналогия ровно из названия: письмо кладут в конверт и отправляют обычной почтой. Почта везёт конверт и читает адрес на конверте. На той стороне конверт вскрывают и достают исходное письмо, которое дальше едет по своим правилам.

Шаги всегда одни и те же:

1. Инкапсуляция   исходный пакет + новый заголовок → пакет-переносчик
2. Транспорт      сеть везёт пакет-переносчик как обычный трафик
3. Декапсуляция   на выходе заголовок снимается, исходный пакет идёт дальше

Зачем это нужно

  • Связать сети, между которыми нет прямой маршрутизации — две частные подсети через интернет, то есть site-to-site VPN.
  • Перенести протокол через чуждую сеть — IPv6 через IPv4-only участок, кадры Ethernet через маршрутизируемую L3-сеть.
  • Добавить шифрование поверх открытого протокола — приложение не меняли, но по сети трафик идёт внутри зашифрованного туннеля.
  • Построить overlay — виртуальную сеть поверх физической, с собственной адресацией, не зависящей от того, как устроена сеть ЦОД снизу.

Протоколы туннелирования

Протокол Что во что упаковывает Шифрование Где встречается
GRE почти что угодно в IP нет связки сетей, часто в паре с IPsec
IPIP IP в IP нет простые L3-туннели между Linux-узлами
IPsec (tunnel mode) IP в IP да корпоративные site-to-site
WireGuard IP в UDP да современные VPN
L2TP кадры L2 в UDP нет, нужен IPsec доступ у операторов, legacy
VXLAN кадры Ethernet в UDP нет overlay-сети в ЦОД и Kubernetes
SSH-туннель TCP-соединение в SSH-сессию да доступ админа к внутренним сервисам
6in4 IPv6 в IPv4 нет IPv6 через IPv4-сеть

SSH-туннель: самый частый в работе

Типичная задача: подключиться к базе, которая слушает только внутренний интерфейс и наружу не опубликована.

# локальный форвардинг: localhost:5432 → db.internal:5432 через бастион
ssh -L 5432:db.internal:5432 admin@bastion.example.com

# теперь клиент ходит как будто в локальную БД
psql -h 127.0.0.1 -p 5432 -U app appdb

# обратный форвардинг: открыть свой локальный сервис на удалённой машине
ssh -R 8080:localhost:3000 admin@server.example.com

# динамический: SOCKS5-прокси на localhost:1080, трафик приложения — через сервер
ssh -D 1080 admin@bastion.example.com

Порт СУБД при этом наружу не открыт вообще: iptables пускает только 22-й, а всё остальное едет внутри SSH-сессии — с её шифрованием и её аутентификацией по ключу.

Накладные расходы и MTU

Каждый уровень упаковки добавляет заголовок, а размер кадра ограничен MTU (в Ethernet обычно 1500 байт). Значит, полезная нагрузка внутри туннеля меньше:

Туннель Накладные расходы Типичный MTU внутри
IPIP 20 байт 1480
GRE 24 байта 1476
VXLAN 50 байт 1450
WireGuard (поверх IPv4) 60 байт 1420
IPsec ESP (tunnel mode) ~50–70 байт 1400–1440

Симптом неправильного MTU обманчив: ping через туннель идёт, SSH подключается и даже работает, а крупные ответы и загрузка файлов виснут намертво. Причина в том, что большие пакеты в туннель не влезают, а ICMP-сообщения «нужна фрагментация» кто-то по пути режет, и Path MTU Discovery не срабатывает. Лечится выставлением MTU на интерфейсе туннеля или зажимом MSS на шлюзе:

# подогнать MSS под реальный MTU туннеля
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
  -j TCPMSS --clamp-mss-to-pmtu

Туннелирование в инфраструктуре

Главный потребитель туннелей сегодня — overlay-сети. В Kubernetes поды получают адреса из собственной подсети, а трафик между узлами идёт в VXLAN-туннелях: поэтому под может переехать на другой узел, сохранив свой IP, а сеть ЦОД про эту адресацию ничего не знает. Тот же приём в облаках: VPC — это адресация клиента поверх общей физической сети ЦОД, развязанная туннелями. Изоляция между клиентами при этом обеспечивается тем, что чужой трафик просто не попадает в ваш туннель.

Связанные термины

  • VPN — зашифрованный туннель как готовый продукт
  • VPN-протоколы (L2TP/PPTP/IPsec) — конкретные реализации туннелей
  • SSH — самый доступный туннель, ничего ставить не нужно
  • MTU и MSS — то, что ломается при туннелировании чаще всего
  • VPC — облачная сеть, построенная на туннелях
  • NAT — соседний механизм преобразования трафика на пути

Готовы запустить GPU-задачу?

Запустить GPU-сервер