Как работает VPN: принцип работы технологии

Каждый раз, когда вы нажимаете кнопку «Подключить» в VPN-клиенте, за доли секунды происходит серия сложных криптографических операций. Если вы ещё не знакомы с тем, что такое VPN, рекомендуем начать с базового руководства: обмен ключами по протоколу Диффи-Хеллмана, аутентификация сервера через TLS-сертификат, создание виртуального сетевого интерфейса, перехват всего исходящего трафика операционной системой, шифрование каждого пакета по алгоритму AES-256-GCM и маршрутизация через зашифрованный туннель. Весь этот процесс занимает от 200 миллисекунд до 3 секунд и остаётся полностью невидимым для пользователя. В этой статье я детально разберу каждый этап — от нажатия кнопки до отображения веб-страницы.

Архитектура VPN-соединения

Компоненты системы

VPN-соединение состоит из четырёх основных компонентов:

1. VPN-клиент — программа на вашем устройстве, которая перехватывает сетевой трафик, шифрует его и отправляет через туннель. VPN-клиент создаёт виртуальный сетевой адаптер (TUN/TAP), через который операционная система направляет весь трафик.

2. VPN-туннель — зашифрованный канал связи между вашим устройством и VPN-сервером. Туннель проходит через обычный интернет, но весь трафик внутри него зашифрован и недоступен третьим лицам.

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

4. Инфраструктура управления — системы аутентификации, маршрутизации, балансировки нагрузки и мониторинга, которые обеспечивают работу VPN-сервиса.

Модель OSI и VPN

VPN работает на разных уровнях сетевой модели OSI:

  • Уровень 2 (Канальный): L2TP, PPTP — инкапсуляция кадров
  • Уровень 3 (Сетевой): IPsec, WireGuard — инкапсуляция IP-пакетов
  • Уровень 4 (Транспортный): OpenVPN (через TCP/UDP), SSTP (через TCP 443)
  • Прикладной уровень: SSL/TLS VPN через браузер

Этап 1: Установление соединения (Handshake)

DNS-разрешение

Перед подключением VPN-клиент должен определить IP-адрес VPN-сервера. Клиент отправляет DNS-запрос к DNS-серверу (обычно провайдера или публичному — 8.8.8.8). После подключения к VPN все DNS-запросы будут перенаправлены на DNS-сервер VPN-провайдера.

TCP/UDP соединение

VPN-клиент устанавливает соединение с VPN-сервером:

  • [OpenVPN](/blog/protokoly/openvpn/): может использовать TCP (надёжнее, медленнее) или UDP (быстрее, менее надёжно) на портах 1194, 443 или произвольных
  • WireGuard: использует UDP на порту 51820 (по умолчанию) или произвольном
  • IKEv2: использует UDP на портах 500 и 4500
  • SSTP: использует TCP на порту 443 (тот же порт, что и HTTPS)

TLS-хэндшейк (для OpenVPN, SSTP)

OpenVPN и SSTP используют TLS (Transport Layer Security) для установления защищённого канала:

  1. Client Hello — клиент отправляет список поддерживаемых шифров, версию TLS, случайные данные
  2. Server Hello — сервер выбирает шифр, отправляет свой TLS-сертификат и случайные данные
  3. Аутентификация сервера — клиент проверяет сертификат сервера: подпись центра сертификации, имя сервера, срок действия
  4. Обмен ключами — клиент и сервер выполняют обмен ключами (ECDHE или DHE) для генерации общего секрета
  5. Готовность — обе стороны подтверждают готовность к шифрованному обмену

Весь TLS-хэндшейк занимает 1–2 RTT (Round Trip Time) — от 50 мс до 300 мс в зависимости от расстояния до сервера.

Noise Handshake (для WireGuard)

WireGuard использует протокол Noise_IKpsk2 вместо TLS:

  1. Инициатор отправляет: тип протокола, версию, публичный ключ (Curve25519), nonce, MAC
  2. Респондер вычисляет общий секрет (ECDH), расшифровывает и проверяет данные
  3. Респондер отправляет: тип протокола, версию, публичный ключ, nonce, MAC, ответные данные
  4. Инициатор вычисляет общий секрет, расшифровывает ответ

Noise-хэндшейк WireGuard выполняется за 1 RTT — в 2 раза быстрее TLS. Это одна из причин, почему WireGuard подключается быстрее OpenVPN.

IKE Handshake (для IKEv2/IPsec)

IKEv2 использует двухфазный хэндшейк:

Phase 1 (IKE SA): - Обмен ключами DH - Установление защищённого канала управления - Аутентификация (сертификаты или PSK)

Phase 2 (Child SA): - Установление SA (Security Association) для данных - Согласование алгоритмов шифрования и аутентификации - Обмен ключами для шифрования данных

Этап 2: Создание виртуального интерфейса

После установления соединения VPN-клиент создаёт виртуальный сетевой адаптер:

TUN-адаптер (уровень 3)

TUN работает на сетевом уровне — обрабатывает IP-пакеты. Используется большинством VPN-протоколов (OpenVPN, WireGuard). TUN-адаптер получает IP-адрес из подсети VPN (например, 10.0.0.2) и становится маршрутом по умолчанию для всего исходящего трафика.

TAP-адаптер (уровень 2)

TAP работает на канальном уровне — обрабатывает Ethernet-кадры. Используется реже (бриджевый режим OpenVPN). TAP необходим для протоколов, которые требуют передачи широковещательных пакетов или не-IP трафика.

Маршрутизация

После создания виртуального интерфейса VPN-клиент изменяет таблицу маршрутизации:

  1. Добавляется маршрут по умолчанию через VPN-туннель (0.0.0.0/0 → VPN-интерфейс)
  2. Добавляется маршрут к VPN-серверу через реальный интерфейс (IP-адрес VPN-сервера → eth0/wlan0)
  3. Все остальные маршруты направляются через VPN-туннель

Это означает, что весь трафик, кроме трафика к самому VPN-серверу, проходит через зашифрованный туннель.

Этап 3: Шифрование и передача данных

Инкапсуляция пакетов

Когда приложение отправляет данные (например, HTTP-запрос к сайту):

  1. ОС формирует TCP/UDP пакет с данными
  2. Пакет направляется на виртуальный VPN-интерфейс
  3. VPN-клиент перехватывает пакет
  4. Пакет шифруется алгоритмом VPN-протокола
  5. Зашифрованный пакет инкапсулируется в новый UDP/TCP пакет
  6. Заголовок нового пакета содержит: IP VPN-клиента → IP VPN-сервера
  7. Пакет отправляется через реальный сетевой интерфейс

Шифрование

Каждый пакет шифруется с использованием:

  • Ключа сессии — уникальный ключ, сгенерированный при handshake
  • Nonce — одноразовое число, предотвращающее повторное использование ключа
  • Алгоритма шифрования — AES-256-GCM или ChaCha20-Poly1305
  • Функции аутентификации — GCM-тег или Poly1305 MAC

Дешифрование на стороне сервера

VPN-сервер получает зашифрованный пакет и:

  1. Проверяет аутентификационный тег (целостность и подлинность)
  2. Дешифрует пакет с использованием ключа сессии
  3. Извлекает оригинальный IP-пакет
  4. Отправляет оригинальный пакет к конечному пункту назначения

Этап 4: Обратный путь

Когда сайт отвечает:

  1. Ответный пакет приходит на VPN-сервер
  2. VPN-сервер шифрует пакет
  3. Инкапсулирует в UDP/TCP пакет
  4. Отправляет через туннель клиенту
  5. VPN-клиент получает пакет
  6. Дешифрует и передаёт на виртуальный интерфейс
  7. ОС передаёт данные приложению

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

VPN добавляет к каждому пакету:

  • Заголовок VPN-протокола — 40–80 байт (зависит от протокола)
  • IV (вектор инициализации) — 8–16 байт
  • Аутентификационный тег — 16 байт
  • Заголовок UDP/TCP — 8–20 байт
  • Заголовок IP — 20 байт

Итого: 80–150 байт дополнительных данных к каждому пакету. При среднем размере пакета 1500 байт это 5–10% overhead. При маленьких пакетах (голосовые вызовы, онлайн-игры) overhead может достигать 30–50%.

Этап 5: Обновление ключей

Rekeying

Для предотвращения компрометации при длительных сессиях VPN-протоколы регулярно обновляют ключи:

  • WireGuard: каждые 120 секунд (таймер) или после передачи 2^64 байт
  • OpenVPN: каждые 3600 секунд по умолчанию (параметр reneg-sec)
  • IKEv2: Phase 2 rekeying каждые 8 часов по умолчанию

Процесс обновления ключей (rekeying) происходит незаметно для пользователя — без обрыва соединения.

Perfect Forward Secrecy (PFS)

PFS гарантирует, что каждый сеанс связи использует уникальный ключ. Если злоумышленник скомпрометирует долгосрочный ключ сервера, он не сможет расшифровать прошлые сессии, потому что ключи каждой сессии генерируются независимо.

PFS реализуется через Ephemeral Diffie-Hellman — для каждой сессии генерируется новая пара ключей DH, которая уничтожается после завершения сессии.

Kill Switch: аварийная защита

Принцип работы

Kill Switch — механизм, который блокирует интернет-соединение при обрыве VPN-туннеля. Реализуется двумя способами:

1. На уровне firewall (pf, iptables, Windows Filtering Platform): - При подключении к VPN в firewall добавляются правила, блокирующие весь трафик, кроме трафика к VPN-серверу - При обрыве VPN правила остаются активными — весь трафик заблокирован - При отключении VPN правила удаляются

2. На уровне мониторинга соединения: - VPN-клиент постоянно мониторит состояние туннеля - При обрыве клиент немедленно блокирует сетевой интерфейс - При восстановлении соединения — разблокирует

Типы Kill Switch

  • System-level Kill Switch — блокирует весь трафик на уровне ОС
  • App-level Kill Switch — блокирует трафик только определённых приложений
  • Network Lock (ExpressVPN) — полная блокировка на уровне firewall

Обфускация: маскировка VPN-трафика

Зачем нужна обфускация

Системы DPI анализируют трафик и определяют протоколы по сигнатурам шифрования. Обфускация маскирует VPN-трафик, делая его неотличимым от обычного HTTPS.

Методы обфускации

1. XOR обфускация (OpenVPN): Каждый байт VPN-пакета XOR-ится со случайным байтом из предопределённой последовательности. Простой, но эффективный против базовых DPI.

2. TLS wrapping (OpenVPN, SSTP): VPN-трафик инкапсулируется в TLS-соединение. DPI видит обычное TLS-соединение с неизвестным содержимым.

3. Маскировка под HTTPS (Shadowsocks, VLESS): VPN-трафик полностью имитирует HTTPS-соединение с реальным веб-сервером. DPI не может отличить от обычного посещения сайта.

4. Domain fronting: VPN-трафик направляется через CDN крупного сервиса (Google, Amazon). DPI видит соединение с легитимным CDN, а не с VPN-сервером.

DNS в контексте VPN

Как DNS работает через VPN

Без VPN: 1. Браузер запрашивает DNS у провайдера 2. Провайдер видит, какой домен вы запрашиваете 3. Провайдер возвращает IP-адрес

С VPN: 1. Браузер запрашивает DNS 2. VPN-клиент перехватывает запрос 3. DNS-запрос отправляется через зашифрованный туннель 4. DNS-сервер VPN-провайдера отвечает 5. Провайдер не видит DNS-запросы

Проблема DNS-утечек

Если VPN неправильно настроен, DNS-запросы могут уходить мимо VPN-туннеля — к DNS-серверу провайдера. Это раскрывает все посещённые домены. Проверить утечку можно на dnsleaktest.com.

Производительность VPN

Факторы, влияющие на скорость

  1. Протокол: WireGuard быстрее OpenVPN на 20–40%
  2. Расстояние до сервера: каждые 1000 км добавляют ~10 мс пинга
  3. Нагрузка на сервер: перегруженный сервер снижает скорость
  4. Шифрование: AES-256-GCM быстрее AES-256-CBC на современных процессорах
  5. Overhead: дополнительные заголовки снижают эффективную полосу пропускания

Оптимизация скорости

  • Используйте ближайший сервер
  • Выбирайте WireGuard вместо OpenVPN
  • Используйте UDP вместо TCP (для OpenVPN)
  • Избегайте Double VPN (двойное шифрование = двойная задержка)

Полезные статьи по теме

Наш VPN оптимизирует каждый этап подключения: автоматический выбор протокола и сервера, Kill Switch встроен в ядро клиента, а DNS-защита предотвращает утечки — технология работает на вас, а не против вас.