За последние несколько недель я проделал большую работу над QuantumGate. Сейчас он все еще находится на экспериментальной стадии, но очень полезен. Много времени, которое я потратил на работу над ним, ушло на оптимизацию. Я использовал его в последние несколько дней вместе с тестовым расширителем SOCKS 5 (Socks5 Extender) для работы в Интернете, и он работал довольно хорошо.

На одной машине я использовал браузер FireFox и настроил его на использование прокси-сервера SOCKS 5, чтобы он подключался через расширитель Socks5. Я также хотел протестировать его как общесистемную настройку прокси в Windows 10 на другой машине, и оказалось, что Windows 10 использует SOCKS 4 для подключения по умолчанию, поэтому мне пришлось добавить частичную поддержку SOCKS 4 в Socks5. Удлинитель тоже. Это заняло всего несколько часов работы по программированию.

На рисунке 1 вы можете увидеть схему одной из установок, которые я использовал. На пользовательском ПК FireFox подключается к Socks5 Extender, работающему в QuantumGate, с помощью TestApp, который можно найти в папке Test в исходном коде проекта. Этот экземпляр QuantumGate подключен через интернет-провайдера к другому экземпляру QuantumGate (также TestApp), работающему на сервере ретрансляции, который может быть размещен где-то в облаке, например, в Amazon Web Services (AWS) или Microsoft Azure. В моем случае я использовал экземпляр AWS EC2 под управлением Windows Server 2019. Однако это не обязательно должен быть сервер; это может быть просто еще один сверстник. Экземпляр QuantumGate, работающий на сервере ретрансляции, также имеет загруженный тестовый расширитель Socks5. И, как вы можете видеть на изображении, соединения, сделанные FireFox (желтые стрелки), маршрутизируются через зашифрованное соединение между двумя экземплярами QuantumGate (зеленая трубка) и через Socks5 Extender на сервере ретрансляции перенаправляются к месту назначения. сайты.

В этой настройке пользователь сможет обойти слежку, отслеживание, анализ/формирование трафика, шпионаж, цензуру и любые другие виды злонамеренного поведения со стороны своего интернет-провайдера, если они могут получить доступ к серверу ретрансляции. В этом конкретном случае при использовании FireFox вам нужно знать гораздо больше, например, вам также необходимо настроить FireFox для использования прокси-сервера SOCKS 5 для запросов DNS. В случае общесистемных настроек прокси-сервера Windows вы не можете настроить Windows для отправки DNS-запросов на прокси-сервер SOCKS 5, и если вы будете использовать браузеры Microsoft Internet Explorer или Edge, вы будете передавать DNS-запросы на вашего интернет-провайдера (где они могут быть записаны и подделаны).

На рис. 2 схема с рис. 1 немного расширена за счет еще одного узла посередине, что добавляет еще один уровень косвенности. Как видно из изображения, средний узел (сервер ретрансляции 1) запускает экземпляр QuantumGate без расширителя Socks5 (TestApp без загруженного расширителя Socks5). Расширитель Socks5 здесь не нужен, потому что этот узел просто действует как маршрутизатор или шлюз для подключения пользовательского ПК к серверу ретрансляции 2. В этом случае экземпляр QuantumGate на пользовательском ПК сначала подключается к серверу ретрансляции 2 (синяя трубка). через его соединение с сервером ретрансляции 1 и, во-вторых, через соединение между сервером ретрансляции 1 и сервером ретрансляции 2 (зеленые трубки). На изображении вы можете видеть синюю трубку, проходящую через две зеленые трубки. Это то, что называется 2-хоп релейным соединением, подробнее об этом можно прочитать в документации по реле.

Добавление еще одного уровня косвенности таким образом усложняет отслеживание источника и назначения трафика в сети и лучше гарантирует анонимность пользователя, особенно когда большее количество пользователей использует сервер ретрансляции 1 и сервер ретрансляции 2 для подключения к Интернету.

На рис. 3 показана еще одна замечательная возможность QuantumGate. В этой настройке пользовательский ПК подключается напрямую к серверам ретрансляции 1 и 2 через два отдельных прямых соединения (зеленые трубки). Соединения, которые пытается установить FireFox, разделяются Socks5 Extender и туннелируются случайным образом через оба соединения к серверу ретрансляции 1 и 2. Когда вы посещаете веб-сайт, часто случается, что браузер устанавливает несколько соединений ( на пару разных серверов), чтобы загрузить этот веб-сайт. В этой настройке эти подключения будут случайным образом маршрутизироваться Socks5 Extender (который запрограммирован для использования нескольких подключений к экземпляру QuantumGate для этого) либо к серверу ретрансляции 1, либо к серверу 2. Теперь имейте в виду, что серверы ретрансляции 1 и 2 могут быть бег по разным уголкам мира; например, сервер ретрансляции 1 может находиться в США, тогда как сервер ретрансляции 2 работает в Швеции, а пользовательский ПК может находиться в Нидерландах. Целевой веб-сайт (и любой другой веб-сайт, на котором необходимо загружать встроенные ресурсы, такие как CSS, javascript, изображения, шрифты и т. д.) будет видеть соединения, поступающие из разных частей мира, и ему будет трудно понять, что это все связано с одним пользователем.

Не нужно большого воображения, чтобы понять, что это значительно усложнит отслеживание пользователей в рекламных и других целях. Эту настройку можно легко расширить за счет большего количества серверов ретрансляции, чтобы создать еще большую путаницу. И в качестве большого бонуса эта установка также действует как балансировщик нагрузки; Socks5 Extender распределяет нагрузку запросов, сделанных FireFox на пользовательском ПК, по двум серверам ретрансляции, что может привести к повышению производительности.

На рисунке 4 вы можете увидеть комбинацию настроек на рисунке 2 и рисунке 3. Такая настройка вызовет еще большую путаницу и трудности с отслеживанием трафика. То, как спроектирован QuantumGate, действительно позволяет создавать на его основе несколько очень крутых вещей.

Socks5 Extender можно легко превратить в коммерческий продукт для частного просмотра, и в его нынешнем состоянии не требуется много дополнительной работы, которая потребовалась бы для получения минимально жизнеспособного продукта (в основном дополнительная работа, связанная с безопасностью). Например, это может быть услуга, похожая на VPN, с ежемесячной подпиской. Код в настоящее время доступен на GitHub под лицензией MIT, поэтому, если кто-то, кто читает это, заинтересован, не стесняйтесь взять его и использовать.

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

Я также написал два руководства по созданию реле с помощью QuantumGate на языке программирования C++. Вы можете найти их в вики на GitHub: «Как создать ретранслятор с одним переходом» и Как создать ретранслятор с двумя переходами». Я планирую написать больше руководств в будущем, предоставляя больше примеров кода, демонстрирующих, как использовать библиотеку QuantumGate и API. И это не считая проектов-примеров, которые также доступны на GitHub, с поясняющими код комментариями в исходном коде.

Также были внесены некоторые изменения в API QuantumGate, которые прервали бы компиляцию для тех, кто уже использовал библиотеку, но их легко изменить и исправить. В ближайшие дни я обновлю документацию по API в вики на GitHub, чтобы отразить последние изменения. Если вы используете QuantumGate и у вас возникли проблемы, сообщите о них на GitHub, и я буду рад помочь.

Первоначально опубликовано на https://blog.kareldonk.com 17 января 2020 г.