Абсолютно бесплатный VPN с бесплатного VPS

Специальный корреспондент
Собака

Собака

Пресс-служба
Команда форума
Private Club
Регистрация
13/10/15
Сообщения
54.880
Репутация
62.390
Реакции
277.074
RUB
0
Думаю про VPN слышали все, и многим приходилось им пользоваться. При этом использование готового VPN, которым руководит какой - то неизвестный человек, не является хорошей идей. Тем более в России на данный момент пытаются блокировать, как сами VPN провайдеры (Windscribe, Proton и другие известные сервисы), так и сами протоколы.

VPN через SSH​

На данный момент DPI (Deep packet inspection) умеет блокировать не только конкретные ресурсы, но и протоколы обмена информацией. При этом есть протокол, который вряд ли заблокируют - SSH. Блокировка данного протокола невозможна без катастрофических последствий для всей инфраструктуры.

SSH
SSH (secure shell) - протокол для удалённого управления операционной системы на основе TCP. Похож на telnet, но все пакеты шифруются, что делает его безопасным.
SSH "из коробки" работает с шифрованием, поэтому мы можем не беспокоиться за безопасность своего трафика.

Существуют разные инструменты для реализации VPN через SSH, я остановлюсь на . Преимущества sshuttle:

  • не требует ничего от сервера (просто запущенный ssh сервер)
  • Работает везде, в том числе OpenWRT и Windows (должно работать)
  • Поддерживает тунелирование DNS запросов

VPS​

Для того, чтобы поднять VPN для себя хватит любого самого дешёвого сервера с белым IP. Но мы хотим всё сделать бесплатно, поэтому отбрасываем этот вариант.

Есть Корейский , который позволяет внутри докера запускать свой код на различных языках программирования. По сути , но позволяет официально запускать ssh сервер из их контейнера, а следовательно предоставляет белый IP адрес.

Goorm.io​

Проходим простую регистрацию.

Кстати goorm.io пропускает для регистрации временные почты.

Регистрация
Регистрация
Далее переходим в , и создаём новый контейнер.

cb544882aa056157bf2b8566226b471a.png

На выбор есть 4 региона расположения сервера (точнее расположения амазоновского инстанса на котором будет запущен ваш контейнер). Нам нужно выбрать ближайший к нам, чтобы пинг был меньше (если вам конечно не принципиально в какой стране у вас будет VPN).

aed2dfdcd08c1adb8a822e3a3c9dd6ce.png

Пресет контейнера выбираем "blank". Можно ещё выбрать версию убунты в контейнере, правда выбор слишком скромный. Либо 18.04, либо 16.04.

Почему только LTS убунты
Arch is the best!
Жалко, что в пресете c PyTorch не выдаётся GPU...
Жалко, что в пресете c PyTorch не выдаётся GPU...
Остальные настройки оставляем дефолтными. Создаём контейнер и через несколько секунд оказываемся в ide.

IDE
IDE
В верхнем меню выбираем Container -> SSH Configuration

66ac048ac6a062f602924ae4678b9c9f.png

Откроется модал в котором будет команда для подключения по SSH.

efa9e6baf462f095cd2dc26572df752e.png

Можно подключиться через терминал, чтобы автоматически добавить хост в доверенные.

6da9f22856e21f3f13aac32f5b37e406.png

Состояние контейнера сохраняется после его выключения. Поэтому для себя я создал ещё одного пользователя с удобным для меня паролем и подключаюсь через него.

SSHUTTLE​

В есть команды для установки утилиты практически на любую операционную систему. Здесь приведу только пример для лучшего дистрибутива.

sudo pacman -S sshuttle
После установки выполним следующую команду:

sshuttle -r sshuser@IP:PORT -x IP 0/0 -v --dns
Вместо IP и PORT подставляете данные от своего контейнера. Сначала вам потребуется ввести пароль от вашего, локального root юзера, а затем пароль от пользователя запущенного контейнера.

Открываем любой определитель IP адреса и видим, то, что IPv4 изменился, а IPv6 - нет

1e2f1dfe223f325979cdca9a4fd83104.png

Разработчики sshuttle утверждают, что IPv6 поддерживается, но конкретно у меня - IPv6 не поменялся. К сожалению большинство сайтов определяют регион по IPv6, в том числе и DPI проверяет трафик, идущий через IPv6.

Но это можно исправить.

IPv6​

Возможно есть более удобный способ исправить данную проблему. Моё решение - отключить IPv6 на стороне браузера, т.е. запретить ему использовать IPv6 в принципе.

Покажу, как это сделать на примере Firefox.
Открываем страницу about:config и в поиске вводим: network.dns.disableIPv6
и переключаем его на "true".

03cc785949b1f168d3592dd811e348d9.png

После перезапуска браузера видим, что всё работает

619c9f81bfd8f7aba1aa61eea37e6f92.png
Если всё ещё не работает
Если всё ещё не работает, то проверьте, не включен ли у вас QUIC (HTTP/3). QUIC использует UDP, а sshuttle не умеет работать с таким трафиком.
И все сайты заблокированные со стороны РФ, так же работают.

Бенчмарк​

Контейнер может работать 24/7, если у вас открыта вкладка в браузере с его ide. А в платной подписке его можно заставить работать всегда при любых условиях.
Но я не думаю, что кому - то нужен VPN, который работает постоянно, даже когда вы не у компьютера.

Для бесплатного VPN скорость достаточная. Важно, что она стабильная.

В самом контейнере около 650 мб/c
В самом контейнере около 650 мб/c

Выводы​

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

Меня полностью устраивает способ, который я изложил в этой статье (сейчас я только им и пользуюсь).

Касательно запуска OpenVPN и подобных. У goorm есть возможность пробрасывать порты.

Для теста пробросил 2 http порта
Для теста пробросил 2 http порта
Времени протестировать OpenVPN не было. Он должен запустится и работать, но я не знаю, как к этому отнесётся администрация goorm. В правилах про VPN через из контейнеры я ничего не нашёл.

bf9c6cb234a06cfa81ee96226433fe62.png

Написано про прокси, но, как причина для блокировки "высокая нагрузка". Если будет время, то проверю OpenVPN.

Надеюсь, статья была интересная, а главное полезная.






















 
Сверху Снизу