- PVSM.RU - https://www.pvsm.ru -
Думаю про VPN слышали все, и многим приходилось им пользоваться. При этом использование готового VPN, которым руководит какой - то неизвестный человек, не является хорошей идей. Тем более в России на данный момент пытаются блокировать, как сами VPN провайдеры (Windscribe, Proton и другие известные сервисы), так и сами протоколы.
На данный момент DPI (Deep packet inspection) умеет блокировать не только конкретные ресурсы, но и протоколы обмена информацией. При этом есть протокол, который вряд ли заблокируют - SSH. Блокировка данного протокола невозможна без катастрофических последствий для всей инфраструктуры.
SSH (secure shell) - протокол для удалённого управления операционной системы на основе TCP. Похож на telnet, но все пакеты шифруются, что делает его безопасным.
SSH "из коробки" работает с шифрованием, поэтому мы можем не беспокоиться за безопасность своего трафика.
Существуют разные инструменты для реализации VPN через SSH, я остановлюсь на sshuttle [1]. Преимущества sshuttle:
не требует ничего от сервера (просто запущенный ssh сервер)
Работает везде, в том числе OpenWRT и Windows (должно работать)
Поддерживает тунелирование DNS запросов
Для того, чтобы поднять VPN для себя хватит любого самого дешёвого сервера с белым IP. Но мы хотим всё сделать бесплатно, поэтому отбрасываем этот вариант.
Есть Корейский goorm.io [2], который позволяет внутри докера запускать свой код на различных языках программирования. По сути repl.it [3], но goorm.io [2] позволяет официально запускать ssh сервер из их контейнера, а следовательно предоставляет белый IP адрес.
Проходим простую регистрацию.
Кстати goorm.io пропускает для регистрации временные почты.

Далее переходим в IDE [4], и создаём новый контейнер.

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

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

Остальные настройки оставляем дефолтными. Создаём контейнер и через несколько секунд оказываемся в ide.

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

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

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

Состояние контейнера сохраняется после его выключения. Поэтому для себя я создал ещё одного пользователя с удобным для меня паролем и подключаюсь через него.
В GitHub репозитории [5] есть команды для установки утилиты практически на любую операционную систему. Здесь приведу только пример для лучшего дистрибутива.
sudo pacman -S sshuttle
После установки выполним следующую команду:
sshuttle -r sshuser@IP:PORT -x IP 0/0 -v --dns
Вместо IP и PORT подставляете данные от своего контейнера. Сначала вам потребуется ввести пароль от вашего, локального root юзера, а затем пароль от пользователя запущенного контейнера.
Открываем любой определитель IP адреса и видим, то, что IPv4 изменился, а IPv6 - нет

Разработчики sshuttle утверждают, что IPv6 поддерживается, но конкретно у меня - IPv6 не поменялся. К сожалению большинство сайтов определяют регион по IPv6, в том числе и DPI проверяет трафик, идущий через IPv6.
Но это можно исправить.
Возможно есть более удобный способ исправить данную проблему. Моё решение - отключить IPv6 на стороне браузера, т.е. запретить ему использовать IPv6 в принципе.
Покажу, как это сделать на примере Firefox.
Открываем страницу about:config и в поиске вводим: network.dns.disableIPv6 и переключаем его на "true".

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

Если всё ещё не работает, то проверьте, не включен ли у вас QUIC (HTTP/3). QUIC использует UDP, а sshuttle не умеет работать с таким трафиком.
И все сайты заблокированные со стороны РФ, так же работают.
Контейнер может работать 24/7, если у вас открыта вкладка в браузере с его ide. А в платной подписке его можно заставить работать всегда при любых условиях.
Но я не думаю, что кому - то нужен VPN, который работает постоянно, даже когда вы не у компьютера.
Для бесплатного VPN скорость достаточная. Важно, что она стабильная.

К сожалению в текущих реалиях, даже платная подписка на хороший VPN не гарантирует, что он будет работать стабильно, так как его могут в любой момент заблокировать.
Меня полностью устраивает способ, который я изложил в этой статье (сейчас я только им и пользуюсь).
Касательно запуска OpenVPN и подобных. У goorm есть возможность пробрасывать порты.

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

Написано про прокси, но, как причина для блокировки "высокая нагрузка". Если будет время, то проверю OpenVPN.
Надеюсь, статья была интересная, а главное полезная.
Автор: Stephan Zhdanov
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/382026
Ссылки в тексте:
[1] sshuttle: https://github.com/sshuttle/sshuttle
[2] goorm.io: http://goorm.io
[3] repl.it: https://repl.it
[4] IDE: https://ide-run.goorm.io
[5] GitHub репозитории: https://github.com/sshuttle/sshuttle/
[6] Источник: https://habr.com/ru/post/710448/?utm_source=habrahabr&utm_medium=rss&utm_campaign=710448
Нажмите здесь для печати.