VpnHood!

Как работает VpnHood

Приложение VpnHood направляет трафик устройства через зашифрованный туннель на ваш сервер, а тот передает его в интернет. Рассказываем, как устроен этот путь от начала до конца.

Как идет трафик Трафик с устройств пользователей идет по зашифрованному туннелю на ваш сервер, а сервер направляет его к сайтам. Сайты видят адрес вашего сервера, а не пользователей. Зашифрованный туннель на базе HTTPS В интернет Пользователи VpnHood! CLIENT Ваш сервер VpnHood! SERVER Сайты Сайты видят ваш сервер, а не пользователей
Как идет трафик Трафик с устройств пользователей идет по зашифрованному туннелю на ваш сервер, а сервер направляет его к сайтам. Сайты видят адрес вашего сервера, а не пользователей. Зашифрованный туннель на базе HTTPS В интернет Пользователи VpnHood! CLIENT Ваш сервер VpnHood! SERVER Сайты Сайты видят ваш сервер, а не пользователей

На устройстве

Приложение перехватывает трафик через виртуальный сетевой адаптер VPN-системы. Поддерживаются три типа трафика: TCP, UDP и ping. Все остальные пакеты отсекаются.

Раздельное туннелирование тоже работает прямо на устройстве. Исключенный трафик — по приложениям, странам, доменам или IP — идет напрямую в сеть минуя сервер. Подробнее в разделе Раздельное туннелирование.

Приложение также настраивает DNS: используются либо серверы, выбранные пользователем, либо DNS вашего сервера (по умолчанию — публичные серверы Google). Все DNS-запросы идут через туннель, даже если сам сайт пущен в обход него.

Туннель

По умолчанию приложение подключается к TCP-порту вашего сервера (443, если его не изменить) через TLS — шифрование, используемое в HTTPS, — и обменивается с ним сообщениями WebSocket, как обычные веб-приложения. Всё внутри туннеля зашифровано TLS от первого до последнего байта.

Перед отправкой данных приложение проверяет сертификат сервера. Оно принимает сертификат, выданный доверенным центром сертификации для имени из ключа доступа, либо строго тот сертификат, чей отпечаток указан в ключе. Поэтому сервер может начать работу с самоподписанным сертификатом, а ключи продолжают действовать после продления доверенного сертификата.

В настройках протокола можно выбрать UDP или QUIC вместо TCP. При выборе UDP пакеты устройства отправляются на UDP-порт сервера в виде датаграмм, зашифрованных AES-GCM. QUIC передает те же данные, что и TCP, но поверх протокола QUIC со встроенным TLS. Сервер сообщает приложению, какие протоколы доступны, и приложение автоматически использует TCP, если выбранный протокол не поддерживается — например, за обратным прокси. Если же сеть блокирует UDP-порт, трафик через UDP не пойдет, пока пользователь снова не переключится на TCP.

Любой запрос к серверу не из приложения VpnHood вернет лишь стандартную ошибку HTTP — точно так же, как защищенный сайт при попытке входа без авторизации.

TCP: в виде пакетов или по одному запросу на соединение

По умолчанию приложение передает TCP-трафик пакетами через туннель, а сервер перенаправляет их дальше через свой сетевой адаптер, подобно роутеру. Это самый быстрый и энергоэффективный режим.

В Cloak Mode приложение замыкает каждое соединение на самом устройстве и отдельным запросом просит сервер открыть его. Сервер сам подключается к нужному сайту и передает данные в обе стороны. Для сети такой трафик выглядит не как единый длинный туннель, а как обычные разрозненные запросы браузера. Это требует чуть больше ресурсов и скорости, но приложение использует освободившиеся соединения повторно.

Приложение работает по этой схеме и без Cloak Mode: если у сервера нет собственного сетевого адаптера (например, в Docker) или когда настроено разделение трафика по доменам.

UDP и ping

UDP всегда идет пакетами через туннель независимо от выбранного протокола. Точно так же работает и ping (эхо-запросы): приложение передает их, отсекая остальные ICMP-пакеты. Сервер перенаправляет этот трафик через свой сетевой адаптер, а при его отсутствии — отправляет запросы от своего имени через собственные сокеты.

На стороне сервера

При установке на Linux VpnHood! SERVER создает собственный сетевой адаптер и передает пакеты в интернет через NAT, как обычный роутер. В Docker-контейнере такого адаптера нет, поэтому сервер работает в режиме прокси: приложения шлют TCP отдельными запросами, а сервер сам открывает каждое соединение, сокет UDP и отправляет ping. Приложения переключаются на этот режим автоматически.

В обоих режимах сервер блокирует пересылку трафика на свои собственные адреса и в локальные сети, в которых он находится.

Для работы сервера нужен открытый TCP-порт, а также UDP-порт, который назначается при первом запуске (для приложений, использующих UDP). Протокол QUIC по умолчанию отключен. Подробнее о том, как узнать UDP-порт, читайте в руководстве Настройка IP-адресов сервера.

Управляемый сервер связывается с VpnHood! MANAGER по HTTPS через access.vpnhood.com: проверяет ключи при подключении приложений и передает статистику использования. Сам MANAGER никогда напрямую не подключается к серверу, а приложения не обращаются к MANAGER. При необходимости MANAGER может перенаправить приложение на другой сервер в кластере. Автономный же сервер сверяет ключи по локальным файлам.

Что содержит ключ доступа

Ключ доступа хранит всё необходимое для подключения к серверу: доменное имя и адреса, порт, имя или отпечаток сертификата, а также секретный токен. Ключ закодирован, но не зашифрован: любой, у кого он есть, видит адреса сервера и может подключиться. Передавайте ключи только доверенным пользователям и прочтите статью Защита IP-адреса сервера от блокировки, чтобы узнать о сетевых рисках.

Дальнейшие шаги