Как работает ForestVPN
VPN переносит доверие с вашей сети на сервер, которым управляет кто-то другой, поэтому вы должны видеть, как он устроен. Эта страница прослеживает одно нажатие «Подключить», от билета до туннеля, и прямо говорит, что мы храним.
Язык озвучки: английский, субтитры: русский
Открыть файл видео (MP4, 32 МБ). Воспользуйтесь им, если YouTube заблокирован или медленно работает при вашем подключении.
На этой странице (10)
Коротко
- Ваш трафик запечатывается на вашем устройстве и выходит с сервера, которым управляем мы, — выходного узла. Из всех частей ForestVPN только выходной узел видит, куда идёт ваш трафик.
- Прежде чем вы подключитесь, ваше устройство получает подписанный билет. Билет сообщает, какой у вас тариф, а сервис, который его проверяет, работает отдельно от того, что хранит ваш аккаунт.
- Приложение следит, действительно ли идут данные, и само меняет путь, когда они перестают. Вы видите только результат.
- Одна строка связывает ваше устройство и любой привязанный аккаунт с каждой сессией, за которую оно платит, для учёта. Её удаляют через час после завершения сессии или до 17 дней спустя для билета, которым так и не воспользовались. Эта страница показывает её рядом со всем остальным.
Что меняет VPN, а что нет
VPN — это передача доверия. Без него вы доверяете сети и провайдеру, которые видят, куда идёт ваш трафик. С ним вы доверяете VPN. Поэтому полезные вопросы к любому VPN одни и те же: где заканчивается ваш трафик, что знают сервисы перед ним и что делает приложение на вашем устройстве? Эта страница отвечает на них именно в таком порядке, с подробностями за каждым ответом.
Без VPN ваш Wi-Fi и интернет-провайдер видят, с какими серверами общается ваше устройство, а каждый сайт, который вы открываете, видит адрес, выданный вашей сетью. С ForestVPN они видят вместо этого зашифрованный трафик до наших серверов. Этот сервер, выходной узел, и есть место, где ваш трафик выходит в интернет.
| Без ForestVPN | С ForestVPN | |
|---|---|---|
| Ваша сеть Wi-Fi | Серверы, с которыми вы общаетесь | Зашифрованный трафик до наших серверов |
| Ваш интернет-провайдер | Серверы, с которыми вы общаетесь | Зашифрованный трафик до наших серверов |
| Сайты, которые вы посещаете | Адрес, который дала вам сеть | Адрес выходного узла |
| Выходной узел ForestVPN | Не участвует | Сайты, которые вы посещаете, и адрес, с которого вы подключились |
Это переносит доверие, а не убирает его. Выходной узел видит сайты, которые вы посещаете, и адрес, с которого вы подключились, а сайты видят адрес выходного узла вместо вашего. VPN не делает вас анонимным: он меняет то, кто может видеть ваш трафик.
Чего VPN не касается, так это всего, что происходит после выходного узла. Сайты, в которые вы входите, по-прежнему знают аккаунт, под которым вы входите, а сайт, который следит за вами через cookie, по-прежнему следит. Туннель защищает дорогу, а не пункт назначения.
Что происходит, когда вы нажимаете «Подключить»
Вы нажимаете «Подключить». Ваше устройство просит разрешения пользоваться сервером, предъявляет билет с двумя сведениями (ключом какого тарифа он подписан и какой двухнедельке этот ключ принадлежит), получает указание, к какому серверу идти, и строит к нему зашифрованный туннель. Затем проверяет, что данные действительно идут в обе стороны, и только после этого сообщает, что вы защищены.
Сервис входа
Ваше устройство
Список серверов
Сервис сессий
Выход
- Ваше устройство > Сервис входа: 1. Просит билеты. За несколько часов до этого, подписано ключом устройства
- Сервис входа > Ваше устройство: 2. Билеты, подписанные вслепую. Подписывающий никогда не видит билет
- Список серверов > Ваше устройство: 3. Подписанный список серверов. Проверяется на вашем устройстве
- Ваше устройство > Сервис сессий: 4. Билет, его ключ сессии, место
- Сервис сессий > Выход: 5. Установить пир только для этой сессии
- Сервис сессий > Ваше устройство: 6. Адрес выходного узла и пути
- Ваше устройство > Выход: 7. Рукопожатие, затем раунд проверки
Самое интересное здесь — билет. За несколько часов до этого отдельным запросом ваше устройство просит у нашего сервиса входа билеты. Сервис подписывает каждый вслепую: подпись ставится на значение, которого он не видит, поэтому подпись на билете, который вы предъявляете позже, не указывает на запрос, который его создал. Единственное исключение — строка учёта, описанная ниже, которая связывает ваше устройство с каждой сессией, за которую оно платит.
Обратите внимание, что происходит ещё до того, как двинется хоть один ваш байт. Сначала разрешение: билет, который проверяется за долю секунды. Затем размещение: подписанный список серверов, который ваше устройство проверяет само, и сервис сессий, выбирающий выходной узел. В конце доказательство: приложение сообщает, что вы защищены, не когда закончилось рукопожатие, а когда пробные пакеты прошли через туннель и вернулись.
Стоит знать о двух мелочах. Билеты пополняются по базовой сети, никогда не через выходной узел, поэтому к сервису входа никогда не обращаются через туннель, который он помогает построить. А приложение может добраться до наших сервисов несколькими путями и выбирает первый, что ответил, поэтому плохой путь к одному из них не помешает вам подключиться.
Шаг за шагом, для инженеров
- Машинный ключ с первого запуска. Ваше устройство создаёт машинный ключ Ed25519 при первом запуске приложения, ещё до любого аккаунта, и хранит его в системной связке ключей или хранилище ключей. Аккаунт необязателен: это случайное 128-битное число, показанное как 32 символа.
- Билеты, за несколько часов до этого. Устройство просит у эмитента билеты запросом, подписанным машинным ключом. Эмитент проверяет приостановку, суточное число билетов, лимит устройств и право на тариф, а затем вслепую подписывает значение, которого не видит (RFC 9474: RSA-2048, RSASSA-PSS, SHA-384). Каждый билет фиксирует хеш свежего открытого ключа сессии и 16-байтовый nonce. На каждый тариф и 14-дневную эпоху приходится один ключ подписи.
- Вне туннеля. Пополнение билетов идёт по базовой сети, никогда не через выходной узел, и запасного хода в туннель нет.
- Подписанный список серверов. Устройство получает список серверов, подписанный Ed25519 и проверенный по закреплённому ключу, прежде чем им пользоваться. Приложение может добраться до списка и до других наших сервисов несколькими путями и выбирает первый, что ответил.
- Ключ сессии из билета. Устройство отправляет сервису сессий билет, открытый ключ сессии X25519, который оно зафиксировало при выдаче билета, и место, которое вы хотите. Сервис сессий проверяет билет по открытому ключу эпохи (это занимает заметно меньше миллисекунды), выбирает выходной узел и его пути, приказывает узлу установить пир и отвечает.
- Один пир, одна сессия. Выходной узел устанавливает пир для этого одноразового ключа сессии, с одолженным адресом из 100.64.0.0/10, который повторно используется между сессиями, и одним битом тарифа. Ему не передают ни аккаунта, ни машинного ключа, ни постоянного имени.
- Рукопожатие. Устройство обращается к выходному узлу с неизменённым рукопожатием Noise_IKpsk2 по UDP. Если на первое обращение ответа нет за долю секунды, оно также пробует другие пути в рамках той же сессии. Для смены пути второй билет не нужен.
- Раунд проверки. Рукопожатие — ещё не доказательство. После него устройство отправляет пробные пакеты через туннель и считает ответы, и только пройденный раунд переключает статус на «Работает». В некоторых сетях рукопожатие проходит, а данные теряются. Поэтому одно рукопожатие ничего не доказывает.
- Один набор решений. Эти решения записаны один раз, в общем коде на Rust, и попадают в каждое приложение через его родной слой. Приложение оставляет себе только своё: интеграцию с операционной системой, экраны и магазин.
- Тот же билет, та же сессия. Если возвращается тот же билет и тот же ключ сессии, сервис сессий отдаёт ту же сессию на всё время жизни билета, поэтому сон и пробуждение, переход с Wi-Fi на мобильную сеть и повторное подключение стоят один билет.
Внутри туннеля
Всё, что вы отправляете, запечатывается на вашем устройстве ключами, которые знают только ваше устройство и выходной узел. Если ваша сеть меняется, тот же туннель продолжает работать.
- UDP-датаграмма. Первые байты замаскированы и меняются в каждом соединении. Ваша сеть видит это кольцо.
- Запечатанный кадр. Зашифрован ключами из рукопожатия. Открыть его могут только ваше устройство и выходной узел.
- Внутренний кадр. Несёт один пакет с собственным коротким заголовком.
- Ваш пакет. То, что отправило ваше приложение. Выходной узел его читает.
Читайте схему снаружи внутрь. Ваша сеть видит только внешнюю датаграмму: пакет зашифрованных байтов к одному из наших серверов, первые байты которого замаскированы, а размер меняется. Внутри неё запечатанный кадр открывается только ключами, созданными при рукопожатии, которые есть лишь у вашего устройства и выходного узла. А внутри кадра лежит ваш собственный пакет, ровно такой, каким его отправило ваше приложение.
Протокол туннеля называется Quantum. Его рукопожатие — это Noise_IKpsk2 без изменений, с X25519, ChaCha20-Poly1305 и BLAKE2s. Мы намеренно его не трогали: опубликованный анализ этого рукопожатия остаётся в силе. То, что мы добавили, расположено вокруг него. Размеры пакетов и байты заголовков меняются в каждом соединении, а туннель справляется с роумингом и со сменой пути под ним.
Туннель принадлежит сессии, а не сети, в которой вы сейчас находитесь. Когда вы переходите с Wi-Fi на мобильную сеть, ключ сессии остаётся тем же, а пакеты просто начинают приходить с нового адреса, поэтому тот же туннель продолжает работать. Мы не обещаем, что ничего не потеряется: переключение может занять мгновение, а экран состояния показывает, в каком состоянии вы находитесь.
Ваш трафик заканчивается на серверах, которыми управляем мы, а не в облачной функции. Облачный сервис не может нести туннель, поэтому сервисы, выдающие билеты и списки серверов, никогда не пропускают ни одного вашего пакета.
Подробнее о туннеле, для инженеров
- Ваш адрес внутри туннеля одалживается на сессию из пула, который выходной узел использует повторно.
- Туннель привязан к ключу сессии, а не к сетевому пути, поэтому переход между Wi-Fi и мобильной сетью не меняет сессию. Приложение также может перенести соединение на новый порт, не разрывая его.
- Он построен на ядре с открытой лицензией, написанном на Rust, и то же ядро работает на каждой платформе.
Измеренные нами цифры с датами и условиями тестов приведены на странице протокола.
Один туннель, много путей
Если один путь к серверу медленный или перестаёт передавать данные, ForestVPN сам пробует другой и оставляет тот, что действительно передаёт данные. Вам ничего не нужно выбирать.
Зачем несколько путей? Сети разные. Одни хорошо пропускают UDP, другие справляются с ним плохо, а сеть, которая часами работает нормально, может измениться. Один неизменный выбор где-то будет неверным, поэтому приложение измеряет. Для каждой сети, из которой вы подключались, оно хранит на вашем устройстве небольшую заметку под хешированным названием о том, понадобился ли там резервный маршрут. К резервному маршруту оно прибегает только в сети, где прямое подключение не удалось, сейчас или в течение последних суток. В Free резервный маршрут идёт с месячной квотой, а в Premium входит больше.
Путь — это способ доставить те же зашифрованные пакеты к тому же выходному узлу. Приложение всегда первым пробует прямой путь по UDP, и в здоровой сети больше ничего не задействуется. Если прямой путь перестаёт передавать данные, приложение пробует и другие имеющиеся пути в рамках той же сессии: TCP, иногда дополнительный наш сервер, выбранный автоматически, и резервный маршрут, который несёт те же пакеты как обычный веб-трафик через сеть доставки контента. Резервный маршрут — это запасной вариант, а не более быстрый путь, и его учитывают, потому что он стоит дороже.
Одна сессия
- Прямой, по UDPПробуется первым
- TCPТолько когда нужно
- Дополнительный наш серверТолько когда нужно
- Резервный маршрутТолько когда нужно
Смена пути не меняет сессию: билет, ключи и выходной узел остаются теми же.
Приложение решает по данным, а не по рукопожатиям. Путь считается здоровым, только пока он передаёт данные, а экран состояния показывает «Работает», лишь когда данные идут в обе стороны.
В здоровой сети
- Обращение напрямую
- Ответ
- Раунд проверки
- Данные идут в обе стороны
- Работает
Когда прямой путь перестаёт передавать данные
- Нет ответа или данных
- Через долю секунды или после неудачного раунда проверки
- Пробуем другие пути
- Первый, что прошёл раунд проверки
- Работает
Подробнее о состоянии подключения и резервном маршруте.
Умные маршруты
Умные маршруты выбирают маршрут, подходящий вашей сети, продолжают его измерять, пока вы пользуетесь, и сами переходят на лучший, когда тот появляется. Локация, которую вы выбрали сами, остаётся там, где вы её поставили.
Прямой маршрутПерестал передавать данные
Дополнительный наш серверПередаёт данные
Данные передаёт дополнительный сервер, поэтому сессия переходит на него.
Сессия переходит сюда
Резервный маршрутВ резерве
Путь — это один из способов доставить ваши пакеты до выходного узла: прямой, TCP, через дополнительный наш сервер или резервный маршрут. Умные маршруты сравнивают пути, доступные для места, которое вы запросили, и переходят между ними в рамках уже открытой сессии, без нового билета и нового рукопожатия.
От самого дешёвого для нас до самого дорогого
- Напрямую, UDP
- Стоит немного больше
- Напрямую, TCP
- Стоит больше
- Дополнительный сервер
- Стоит больше всего
- Резервный маршрут
Три вещи, которых Умные маршруты не делают. Они не переносят локацию, которую вы выбрали сами. Они не обещают более быстрого соединения: они обещают, что продолжают проверять и переходят, только когда другой маршрут лучше для вашей сети. И они не нуждаются в вас: ничего включать и выбирать не нужно, хотя параметр «Маршрутизация с учётом сети» отключает эти решения, если вы так предпочитаете.
Умные маршруты уже есть в Windows, Linux, приложении для Mac с нашего сайта, командной строке и роутерах OpenWrt. На iPhone, iPad, Apple TV, Android и в версии для Mac из App Store они появятся с обновлением приложения.
Для инженеров: как устроен движок маршрутов
Наши собственные серверы постоянно измеряют связи между собой с небольшой постоянной частотой, которая не растёт вместе с числом пользователей. Устройство и серверы пользуются одной функцией оценки. Сегодня сервис сессий лишь сравнивает эту оценку со своим текущим выбором; предлагаемые им пути пока не строятся из неё.
Наши серверы
Сервис сессий
Ваше устройство
Сервис отчётов
- Наши серверы > Сервис сессий: Измеряют связи между собой
- Сервис сессий > Ваше устройство: Подписанный список маршрутов
- Ваше устройство: Пробует их в рамках сессии
- Ваше устройство > Сервис отчётов: Результат, без идентичности. Хранится только как суточные счётчики
Устройство прогоняет этот короткий список в открытой сессии и оставляет маршрут, который передаёт данные. Более дешёвые пути выигрывают, но только в рамках порога качества: сеть доставки контента — это порог, а не вес, а место оценивается по собственной задержке, никогда по пути, которым оно было достигнуто.
Две программы, один подписанный билет
Зачем вообще делить работу? Потому что этим двум задачам нужны разные знания. Чтобы проверить, что у вас есть тариф, нужно знать ваше устройство. Чтобы выбрать и открыть сессию, нужно знать место и адрес. Если бы одна программа делала и то и другое, она держала бы оба вида знаний вместе. Поэтому это две программы, развёрнутые отдельно. Билет переходит между ними при подключении, а данные, которые использовала сессия, возвращаются, когда она завершается, чтобы их можно было оплатить: это и есть строка учёта, описанная дальше.
Часть, которая знает ваше устройство и тариф, и часть, которая знает ваш сервер, — это отдельные программы. Сервис сессий развёрнут без какой-либо связи с нашей базой аккаунтов, а билет между ними подписан вслепую. Одна строка связывает ваше устройство и любой привязанный аккаунт с каждой сессией, за которую оно платит, чтобы учитывать данные и отключать отозванное устройство. Она удаляется через час после завершения сессии или до 17 дней спустя для билета, которым так и не воспользовались.
Билет
- Сервис входа Знает ваше устройство и тариф
- Подписывает, не видя
- Билет Подписан вслепую
- Предъявляется при подключении
- Сервис сессий и выходные узлы Знают билет, место, одноразовый ключ сессии и адрес, с которого вы подключаетесь
Строка учёта
- Сервис входа Хранит одну строку на сессию
- Записывается при выдаче билета
- Устройство и сессия Связывает ваше устройство и любой привязанный аккаунт с сессией
- Удаляется автоматически
- Удалено Через час после расчёта или до 17 дней для неиспользованного билета
Сервис входа хранит ваш аккаунт, ваши устройства и ваш тариф и видит адрес, с которого приходит каждый запрос билета. Он никогда не узнаёт, какой выходной узел вам дали и куда вы ходили. Сервис сессий видит адрес, с которого вы подключаетесь, выбранную вами локацию и одноразовый ключ сессии. Его запись о сессии удаляется сама, когда сессия истекает, а ваш исходный адрес в неё никогда не записывается.
| Ваше устройство | Ваш тариф | Сервер, которым вы пользуетесь | Ваш адрес | Сайты, которые вы посещаете | |
|---|---|---|---|---|---|
| Хост списка серверов | Не получает | Не получает | Не получает | Получает | Не получает |
| Сервис входа | Получает | Получает | Не получает | Получает | Не получает |
| Сервис сессий | Не получает | Получает | Получает | Получает | Не получает |
| Выходной узел | Не получает | Получает часть | Получает | Получает | Получает |
В таблице перечислено, что каждая часть получает при подключении, а это не то же самое, что обещание относительно того, что можно выяснить, сопоставив записи. Поэтому строка учёта описана словами и нарисована на схеме, а не обойдена молчанием.
Для инженеров: слепые подписи и три ключа
- Слепые подписи. Билеты используют слепые подписи RSA по RFC 9474. Тариф закодирован в том, каким ключом подписан билет, а не в поле, и одновременно действуют не более шести ключей.
- Обеспечено сборкой. В конфигурации развёртывания сервиса сессий нет связи с базой аккаунтов, а проверка в нашей сборке завершается ошибкой, если её добавить.
- Три ключа с разным временем жизни. Машинный ключ (его открытая часть известна сервису входа; закрытая никогда не покидает устройство), номер аккаунта (известен сервису входа, необязателен) и ключ сессии (по одному на билет; сервис сессий и выходной узел видят его при подключении, а сервис входа в другой момент; исчезает, когда сессия заканчивается).
Что мы храним и как долго
В наших системах нигде нет столбца для сайтов, которые вы посещаете, или имён, которые вы запрашиваете. Какой выходной узел использовала сессия, стирается, когда сессия заканчивается. Оплату обрабатывает App Store, Google Play или выбранный вами платёжный сервис, а номера карты мы никогда не видим.
Основные записи и то, как долго живёт каждая, — на одном рисунке; политика конфиденциальности перечисляет каждую из них. Отчёты о маршрутах, которые помогают нам выбирать лучшие маршруты для всех в сети, — это агрегаты без устройства, аккаунта, сессии и выходного узла, публикуемые только за дни, когда было не меньше 10 устройств.
- Строка учёта, после расчёта сессии1 час
- Та же строка для билета, которым не воспользовалисьДо примерно 17 дней
- Отчёт для поддержки, который вы решили отправить72 часа
- Данные и число подключений за день31 день
- Страна и сеть запросов билетов, под псевдонимом3 месяца
- Месячные итоги и записи об устройствах, аккаунтах и оплатеБессрочно
На тот же рисунок относятся ещё две вещи. В приложении нет аналитического SDK, SDK атрибуции и рекламного идентификатора. А если вы решите отправить диагностический отчёт, он сначала показывает вам своё содержимое, отправляется без идентичности вашего устройства в случайный момент следующего часа, никогда не через то соединение, которое он описывает, и удаляется через 72 часа.
Каждая запись перечислена в политике конфиденциальности, а краткая версия есть на странице безопасности.
Ваши устройства, роутеры и телевизоры
Один номер аккаунта работает на устройствах, которых может быть до десяти. Устройства вашего аккаунта могут находить друг друга по имени, а компьютер, остающийся дома, может быть выходным узлом для остальных. iPhone может пользоваться выходным узлом, но пока не может им быть. Роутеры охватывают устройства, на которых нельзя запустить приложение, а телевизоры и роутеры входят без клавиатуры.
Номер вашего аккаунта
- ТелефонТуннель до наших серверов
- НоутбукТуннель до наших серверов
- ТелевизорТуннель до наших серверов
- РоутерТуннель до наших серверов
- Домашний компьютерОт устройства к устройствуИспользовать как выход
Если домашний выходной узел, которым вы пользуетесь, выйдет из сети, приложение переключит вас на другой из ваших собственных и сообщит об этом. Если недоступны все ваши выходные узлы, трафик остаётся заблокированным, а приложение просит вас нажать на экран.
Роутеры — для устройств, на которых нельзя запустить приложение, например игровой консоли или смарт-телевизора. Поставьте ForestVPN на роутер, и всё, что за ним, или только выбранные вами устройства и приложения пойдут через туннель. Пределом скорости служит процессор роутера, поэтому на странице роутеров сказано, что мы измерили и на каком оборудовании. Роутер привязывается к вашему аккаунту по коду, который он печатает для вас, а телевизоры входят без клавиатуры.
Чего эта конструкция не делает
Ничто из этого не делает конструкцию герметичной, и мы лучше скажем, где она заканчивается, чем позволим схеме намекать на иное. Это главные ограничения; политика конфиденциальности перечисляет каждое.
Ограничения, сказанные один раз
- Одна строка связывает ваше устройство и любой привязанный аккаунт с каждой сессией, за которую оно платит, до часа после завершения сессии.
- Сервис входа и выходной узел видят ваш ключ сессии в разные моменты. Вместе эти два взгляда могли бы снова соединить сессию; мы не ведём записи, которая бы это сделала, и ни один из них не может сделать этого сам.
- Выходной узел видит сайты, которые вы посещаете, и адрес, с которого вы подключились. Это точка, где вы доверяете нам.
- VPN не делает вас анонимным.
- Ни одно аварийное отключение не является абсолютным. То, что допускает каждая система, различается, а на устройствах Apple некоторые системные службы всё ещё могут отправлять трафик вне туннеля.
- Слепая подпись не скрывает, что запрос билета и подключение могут приходить с одного и того же сетевого адреса. Поэтому билеты пополняются в случайные моменты, заранее, до вашего подключения.
- Группа, из которой мог прийти билет, — это все, у кого есть билет, подписанный тем же ключом тарифа в ту же двухнедельку, а не все наши пользователи.
- Отчёты о маршрутах — это агрегаты, а не запись о каком-либо отдельном устройстве.
Вопросы
Может ли ForestVPN видеть, какие сайты я посещаю?
Выходной узел, через который проходит ваш трафик, знает, куда он идёт, как и выходной узел любого VPN. В наших системах нигде нет столбца для сайтов, которые вы посещаете, или имён, которые вы запрашиваете.
Нужен ли аккаунт, чтобы пользоваться ForestVPN?
Нет. Free ничего не требует: подключайтесь без аккаунта. Когда вам понадобится подписка на других устройствах, ваш аккаунт — это случайное 32-значное число, без почты, без пароля и без имени.
Что означает «Работает» в приложении?
«Работает» появляется только тогда, когда данные идут в обе стороны. После рукопожатия приложение отправляет пробные пакеты через туннель и ждёт ответов.
Что будет, когда прямой маршрут перестанет передавать данные?
Приложение пробует другие пути в рамках той же сессии: другой транспорт, дополнительный наш сервер или резервный маршрут. Оно оставляет тот, что передаёт данные, а сессия, билет и выходной узел остаются теми же.