Думаю про VPN слышали все, и многим приходилось им пользоваться. При этом использование готового VPN, которым руководит какой - то неизвестный человек, не является хорошей идей. Тем более в России на данный момент пытаются блокировать, как сами VPN провайдеры (Windscribe, Proton и другие известные сервисы), так и сами протоколы.
VPN через SSH
На данный момент DPI (Deep packet inspection) умеет блокировать не только конкретные ресурсы, но и протоколы обмена информацией. При этом есть протокол, который вряд ли заблокируют - SSH. Блокировка данного протокола невозможна без катастрофических последствий для всей инфраструктуры.
SSH
SSH (secure shell) - протокол для удалённого управления операционной системы на основе TCP. Похож на telnet, но все пакеты шифруются, что делает его безопасным.
SSH "из коробки" работает с шифрованием, поэтому мы можем не беспокоиться за безопасность своего трафика.
Существуют разные инструменты для реализации VPN через SSH, я остановлюсь на sshuttle. Преимущества sshuttle:
не требует ничего от сервера (просто запущенный ssh сервер)
Работает везде, в том числе OpenWRT и Windows (должно работать)
Поддерживает тунелирование DNS запросов
VPS
Для того, чтобы поднять VPN для себя хватит любого самого дешёвого сервера с белым IP. Но мы хотим всё сделать бесплатно, поэтому отбрасываем этот вариант.
Есть Корейский goorm.io, который позволяет внутри докера запускать свой код на различных языках программирования. По сути repl.it, но goorm.io позволяет официально запускать ssh сервер из их контейнера, а следовательно предоставляет белый IP адрес.
Goorm.io
Проходим простую регистрацию.
Кстати goorm.io пропускает для регистрации временные почты.
Далее переходим в IDE, и создаём новый контейнер.
На выбор есть 4 региона расположения сервера (точнее расположения амазоновского инстанса на котором будет запущен ваш контейнер). Нам нужно выбрать ближайший к нам, чтобы пинг был меньше (если вам конечно не принципиально в какой стране у вас будет VPN).
Пресет контейнера выбираем "blank". Можно ещё выбрать версию убунты в контейнере, правда выбор слишком скромный. Либо 18.04, либо 16.04.
Почему только LTS убунты
Arch is the best!
Остальные настройки оставляем дефолтными. Создаём контейнер и через несколько секунд оказываемся в ide.
В верхнем меню выбираем Container -> SSH Configuration
Откроется модал в котором будет команда для подключения по SSH.
Можно подключиться через терминал, чтобы автоматически добавить хост в доверенные.
Состояние контейнера сохраняется после его выключения. Поэтому для себя я создал ещё одного пользователя с удобным для меня паролем и подключаюсь через него.
SSHUTTLE
В GitHub репозитории есть команды для установки утилиты практически на любую операционную систему. Здесь приведу только пример для лучшего дистрибутива.
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 на стороне браузера, т.е. запретить ему использовать 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.
Надеюсь, статья была интересная, а главное полезная.
Комментарии (75)
F0iL
13.01.2023 16:01+19При этом есть протокол, который вряд ли заблокируют - SSH. Блокировка данного протокола невозможна без катастрофических последствий для всей инфраструктуры.
Китайцы вполне себе научились. Если использовать SSH в режиме терминала или изредка лить файлы, то всё нормально, если сидеть через него как через прокси, то через небольшое время скорость режется до черепашьей и серфинг становится невозможным. Уже давно есть техники выявления TLS-внутри-whatever и эвристики по размерам пакетов и паттернам передаваемого трафика (в том числе с помощью машинного обучения), так что не надо обольщаться.
GbrtR
13.01.2023 19:35-17Почему «катастрофические последствия» — админ удалённо поуправлять чем-то не сможет? в чём катастрофа то?
Внутри страны же его не блокируют, а если вы зависите от чужой инфраструктуры, то в зависимости от важности системы либо вы обязаны мигрировать внутрь или у вас есть выбор это сделать, ну или на альтернативные методы управления перейти.Areso
14.01.2023 03:36+11... либо эмигрировать наружу.
А вы случайно не депутат?)
GbrtR
14.01.2023 03:46+4Где вы увидели что я одобряю данные действия? Я написал как оно выглядит с точки зрения рационального объяснения.
Просто когда пишут что закрытие ssh приведёт к «катастрострофическим последствиям» хотелось бы понять в каком месте. Иначе для тех кто понимает что такое ssh, это такие же голословные утверждения как и с другой стороны.
И подрывают доверие к остальным утверждениям.Areso
14.01.2023 03:49+1Ну, довольно много оборудования управлялось и обновлялось именно по SSH. В т.ч. иностранного.
Ну и конкретно у меня катастрофы не случится, просто отвалится к фигам всё зарубежное - сервисы, игры, и т.п., в сумме несколько десятков сервисов станут неуправлямыми.
Причем, что самое смешное, с учётом, что я уже снаружи - примерно столько же отломается у меня и внутри.
GbrtR
14.01.2023 03:56+6Ну для какого-нибудь конкретного человека или бизнеса может и будет катастрофой, но мне кажется прикроют ssh и не чихнут. Нету в нём никаких волшебных свойств которые делают его неприкасаемым.
Скажут надо ssh, в первый отдел с паспортом зайдите. И военный билет не забудьте.
izogfif
13.01.2023 16:10+3В таблице упомянут "Proxy server". Не думаю, что OpenVPN с целью посерфить отличается от "Proxy server".
ret77876 Автор
15.01.2023 13:16Согласен, OpenVPN тоже по сути запрещён, но использование ssh, как прокси они отследить не смогут.
F0iL
15.01.2023 23:34но использование ssh, как прокси они отследить не смогут.
Если захотят, то смогут. Паттерны траффика у ssh-as-console, ssh-as-ftp и ssh-as-proxy очень разные и элементарно выявляются простым ML.
Wesha
16.01.2023 02:27Ну так надо ж мусором паддить, чтобы поток постоянный шёл, без чётко выраженных горбов и провалов.
shadrap
13.01.2023 17:27спасибо. хороший вариант в копилку. а как юзера дополнительно в контейнере заводить?
Dmitry27
14.01.2023 07:39стандартно для убунты useradd и usermod -aG
shadrap
14.01.2023 09:32спасибо, я понял , что bash терминал , просто он у меня сначала все по корейски писал и ничего не ясно было) теперь ок.
NeoCode
14.01.2023 23:56А для чего необходимо создание дополнительного юзера?
ret77876 Автор
15.01.2023 13:17Для удобства. Этот пользователь сохраняется при перезапуске контейнера, а следовательно при подключении у вас будет всегда пароль от этого пользователя, который не будет меняться.
NeoCode
16.01.2023 08:29У меня при перезапуске айпишник и порт ssh поменялся, так что все равно лезть в настройки ssh придется каждый раз (правда я не ставил sshuttle, а просто использовал kitty как ssh proxy, но думаю это несвязанные вещи)
shumaher86
16.01.2023 13:46можно с этого места поподробней? а то в статье ничего не написано про винду :)
rstepanov
13.01.2023 17:28+5Есть хостеры в РФ, которые все еще предлагают VPS не в РФ. Оплачивать можно с карты российского банка, траффик от виртуалки в остальной мир не фильтруется.
ЗЫ: забавно когда из другой страны доступно все, что режется в РФ, но зато закрыто что-то другое...
Resursator
15.01.2023 13:23Из-за этого приходится вносить кучу подсетей в исключения в wireguard. Правда что-то при этом всё равно может не работать, но какого-то лёгкого способа отследить нужные пакеты не нашёл в винде, Wireshark не может фильтровать трафик по приложению, только весь интерфейс целиком.
sden77
15.01.2023 18:54Можно использовать тот же ssh socks прокси и дополнение для браузера, которое будет пускать траффик через прокси по спискам доменов
pantsarny
13.01.2023 17:48+2А не проще взять за несколько баксов в год vps и поставить там полноценный впн сервер? Lowendbox
Nikopol25
13.01.2023 22:43+1Можно в личку или здесь пример за несколько баксов, а то vps арендую за 5 евро, а на нём уже routeros развернул.
Areso
14.01.2023 03:38+1будьте осторожны, хостеры с LEB имеют свойство "помирать" без предупреждений.
Сколько не покупал там - все закрылись. Кому-то везло больше, но не мне.
Nikopol25
14.01.2023 10:27У меня был раньше на Оракл бесплатный. Друзьям так же сделал там сервера и поднял vpn. Но когда Оракл перестал работать с Россией у них почти сразу перестал работать, а у меня до января держался сервер. Вот недавно за 4.77 евро арендовал vps с безлимитным трафиком 100мбит. Если на несколько людей то не дорого получается, чашка "лавандового рафа"
Siberianice
14.01.2023 13:54Тоже недавно бесплатный Oracle отключился. Почти год продержался. Но скорость там не фонтан была. Сейчас арендовал за 6.6 руб. в день на vdsina. Скорость больше 100 получается с VPN.
Aelliari
15.01.2023 11:19На х86 действительно не супер широкий канал, но для личного vpn мне хватало. А вот для ARMов заявлен гигабит (на самом деле сеть там больше, но шейпится), в итоге я разок на тестах видел даже 1,5Гб/с, но пару раз попал и на просадки до скоростей ниже гигабита. Плюс можно аж 4 сетевых адаптера накидать и разделить нагрузки на 4 "гигабитных" псевдо-сетевушки
aik
15.01.2023 19:36Выбирать надо с историей какой-никакой.
Да, они подороже, но и живут не полгода.
Я там купил greenkvm за 25$ в год (5core/5GB RAM/55GB SSD/5TB трафика) — второй год с ними. И до этого народ не сильно жаловался. Для vpn и персональных сервисов мне вполне хватает.
dartraiden
14.01.2023 19:32+1Aeza — есть тариф за 99 рублей в месяц (1 core, 8 GB RAM, 20 GB NVMe, 100 Mbit/s, только Нидерланды). Но надо караулить, серверы быстро кончаются.
Если есть знакомые за пределами России и Белоруссии, готовые зарегистрировать аккаунт для вас, то Oracle — бесплатные серверы с 4 ядрами и 24 гигами памяти, но ограниченным трафиком — 10 терабайт исходящего в месяц.
Siberianice
13.01.2023 17:57Открытая вкладка не радует) А как же телефоны и прочие устройства? Например, Oculus.
ShadF0x
14.01.2023 13:31В Quest можно держать "перед собой" до трёх приложений одновременно. Wireguard вообще каким-то образом в фоне живёт, я так обновления прошивки через шлем тяну.
Siberianice
14.01.2023 13:40Oculus является пиром? А через что это настраивается с Wireguard?
ShadF0x
14.01.2023 13:52+1Не совсем понял вопрос.
Установить и настроить Wireguard на шлеме можно через adb с соответствующими драйверами, так как шлем работает на Android.
Можно использовать SideQuest, он просто все команды adb оборачивает в GUI.
Импортировать файл конфигурации шлем не даст, поэтому придётся его "вводить ручками" через
adb shell input
(в SideQuest это "Tools -> Paste Text to your device").Siberianice
14.01.2023 13:58Да, спасибо. Не подумал о такой возможности. Вне дома без роутера Oculus был без интернета.
ret77876 Автор
15.01.2023 13:20+1OpenWRT. Ставите на свой роутер и все устройства в сети работают через VPN.
RAX7
13.01.2023 18:35+2Контейнер может работать 24/7, если у вас открыта вкладка в браузере с его ide
А если ркн забанит айпишник этой вкладки, то вам понадобится еще один vpn чтобы включить vpn. We need to go deeper ????
s-a-u-r-o-n
13.01.2023 18:56Не выйдет, так как Goorm не разрешает работать со своей IDE из-под VPN.
xsergex
13.01.2023 20:14+1Но как и всегда - "есть один нюанс..."
F0iL
13.01.2023 20:16+6А что не так? 7 мегабит для серфинга и даже для просмотра 720p-видео в наше время вполне достаточно. Вы же не фильмы в 4K через проксю качать собираетесь?
xsergex
13.01.2023 20:21+2Ну всё же слишком много махинаций для 7 мегабит, да и бонусом где-то держать вечно-открытую вкладку.
Тот же cf-warp (не сочтите за рекламу) требует меньше телодвижений и даёт бОльшие бенефиты.Fodin
13.01.2023 20:32+1А если еще и достать их креденшелсы для WireGuard, то вообще волшебненько все получается. Скорости у них просто дикие, доступность обалденная. Пользуюсь и радуюсь.
xenon
13.01.2023 21:52В смысле, можно обычным wireguard'ом пользоваться, не их кастомным клиентом? А есть гайд, как извлечь эти ключи и прочее?
Но когда я проверял - cloudflare warp в хидерах светил адрес клиента. То есть, для обхода блокировок подходит, а вот для анонимности - нет.xsergex
13.01.2023 22:08+1Загуглите cf-warp. В первой тройке ссылок будет гитхаб с нужным проектом.
xenon
14.01.2023 02:05Что-то у меня его конфиги не работают, но ладно, потом с этим разберусь. Спасибо!
xsergex
14.01.2023 15:01+2Скорее всего из-за того, что часть серверов заблокировано роскомпозором.
Попробуйте поменять эндпоинт на один из этих:
https://pastebin.com/cFPdi6yN
dartraiden
14.01.2023 19:43То есть, для обхода блокировок подходит
Причём, только российских. Проблема «ах, ты из России — вон с нашего сайта» никуда не девается.
nitro80
14.01.2023 01:59+1Из "школьного" интернета Ростелеком уже недоступен ssh, да и в целом VPN даже внутри страны ????????
penetration
14.01.2023 08:36Попытался запустить обычный iodine на сервере, ругается на tun адаптер и запрет операции
loskiq
14.01.2023 09:36+1У GCP тоже есть подобное в shell.cloud.google.com. Достаточно иметь белый ip-адрес с нашей стороны, затем поставить пакет wireguard на обе стороны и со стороны контейнера Google установить туннель со своим роутером/сервером. Затем подключиться по ssh к контейнеру через туннель wireguard, например, вот так:
ssh -D 1080 user@10.50.0.1
Ну и само собой добавить правило nat на стороне контейнера и разрешить ip forward в sysctl.
Для этого нужен лишь аккаунт Google и белый ip-адрес от интернет-провайдера.
dukzcry
14.01.2023 11:46+2Подкроватный сервер + tor вместо мутной корейской «халявы»
dartraiden
14.01.2023 19:29Плюс гемор с периодическим поиском мостов, т.к. множество адресов узлов Tor заблокировано.
eps
15.01.2023 01:59Плюс ужасно низкая скорость, большие задержки, и выходные узлы в чёрных списках многих сайтов
litalen
15.01.2023 13:23+1С некоторых пор в Tor с территории РФ так просто не попасть: https://habr.com/ru/news/t/596507/, https://habr.com/ru/post/595853/
SerpentFly
14.01.2023 15:36+1Раз уж зашла речь про ssh, то стоило бы упомянуть Dynamic Port Forwarding(DPF). Любой современный браузер поддерживает SOCKS, а любой приличный ssh клиент поддерживает DPF. Так что достаточно подключиться к ssh серверу добавив -D[PORT] к командной строке и сконфигурировать 127.0.0.1:PORT SOCKS proxy в браузере. Если хочется отправить DNS через этот туннель - просто включите DNS over HTTPS.
Если нужно отправить в SSH туннель произвольное приложение, то под Windows есть еще вот такой вариант.
igorhak
14.01.2023 19:17Что мешает поставить бесплатный pfSense в какой нибудь не дорогой, платный VDS, есть достаточно много, которые можно оплатить русской картой. Писать названия тут не буду, да бы не блочили их. Цены 200-300 р в мес 100мб, Германия, Финляндия. Юзайте openvpn или wireguard прямо из коробки. У самого стоит несколько серверов, использую openvpn на всем Linux, Mac, windows, android, iOS, , работают года полтара без каких-либо проблем. На всем устанавливается openvpn connect и работает тоже из коробки. Есть нюанс с Honor и Huawei , в их магазине нет приложения, но можете настроить как L2TP.
dartraiden
14.01.2023 19:27Открываем страницу about:config и в поиске вводим: network.dns.disableIPv6
Это может сломать работу некоторых сайтов.
и переключаем его на «true».
Tresimeno
14.01.2023 21:39В GitHub репозитории есть команды для установки утилиты практически на любую операционную систему.
Любую - это, например, Windows 10. В то время как текст репы говорит Works with Linux and MacOS. Стоит уточнить что приложения под win нет (ну или я не там искал и с ходу не нашел).
fk0
А чё у них адрес амазоновский? Амазон-то за свои впс деньги берёт! Напоминает бесплатный сыр...
an0nim0u5
Эти инстансы еще более урезанные, чем бесплатные (trial free) у амазона. Этот сервис можно юзать только под что-то простенькое. Типа тестануть скрипт или потренироваться слепой печати в терминале) Что-то серьезное на нем не поднимешь.