Думаю про 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!

Жалко, что в пресете c PyTorch не выдаётся GPU...
Жалко, что в пресете c PyTorch не выдаётся GPU...

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

IDE
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 скорость достаточная. Важно, что она стабильная.

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

Выводы

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

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

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

Для теста пробросил 2 http порта
Для теста пробросил 2 http порта

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

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

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

Комментарии (75)


  1. fk0
    13.01.2023 14:49
    +3

    А чё у них адрес амазоновский? Амазон-то за свои впс деньги берёт! Напоминает бесплатный сыр...


    1. an0nim0u5
      13.01.2023 16:03
      +5

      Эти инстансы еще более урезанные, чем бесплатные (trial free) у амазона. Этот сервис можно юзать только под что-то простенькое. Типа тестануть скрипт или потренироваться слепой печати в терминале) Что-то серьезное на нем не поднимешь.


  1. F0iL
    13.01.2023 16:01
    +19

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

    Китайцы вполне себе научились. Если использовать SSH в режиме терминала или изредка лить файлы, то всё нормально, если сидеть через него как через прокси, то через небольшое время скорость режется до черепашьей и серфинг становится невозможным. Уже давно есть техники выявления TLS-внутри-whatever и эвристики по размерам пакетов и паттернам передаваемого трафика (в том числе с помощью машинного обучения), так что не надо обольщаться.


    1. Rinsewind
      13.01.2023 18:56
      +2

      Уже замечал такие приколы и у нас


    1. GbrtR
      13.01.2023 19:35
      -17

      Почему «катастрофические последствия» — админ удалённо поуправлять чем-то не сможет? в чём катастрофа то?

      Внутри страны же его не блокируют, а если вы зависите от чужой инфраструктуры, то в зависимости от важности системы либо вы обязаны мигрировать внутрь или у вас есть выбор это сделать, ну или на альтернативные методы управления перейти.


      1. Areso
        14.01.2023 03:36
        +11

        ... либо эмигрировать наружу.

        А вы случайно не депутат?)


        1. GbrtR
          14.01.2023 03:46
          +4

          Где вы увидели что я одобряю данные действия? Я написал как оно выглядит с точки зрения рационального объяснения.

          Просто когда пишут что закрытие ssh приведёт к «катастрострофическим последствиям» хотелось бы понять в каком месте. Иначе для тех кто понимает что такое ssh, это такие же голословные утверждения как и с другой стороны.

          И подрывают доверие к остальным утверждениям.


          1. Areso
            14.01.2023 03:49
            +1

            Ну, довольно много оборудования управлялось и обновлялось именно по SSH. В т.ч. иностранного.

            Ну и конкретно у меня катастрофы не случится, просто отвалится к фигам всё зарубежное - сервисы, игры, и т.п., в сумме несколько десятков сервисов станут неуправлямыми.

            Причем, что самое смешное, с учётом, что я уже снаружи - примерно столько же отломается у меня и внутри.


            1. GbrtR
              14.01.2023 03:56
              +6

              Ну для какого-нибудь конкретного человека или бизнеса может и будет катастрофой, но мне кажется прикроют ssh и не чихнут. Нету в нём никаких волшебных свойств которые делают его неприкасаемым.

              Скажут надо ssh, в первый отдел с паспортом зайдите. И военный билет не забудьте.


  1. an0nim0u5
    13.01.2023 16:05
    +1

    Отдельная благодарность за то, что напомнил про этот сервис. Зашел, а у меня там оказывается уже год контейнер висит.


    1. Wesha
      14.01.2023 11:43
      +2

      Зашел, а у меня там оказывается уже год контейнер висит.

      Вот она, современная версия поговорки "в холодильнике мышь повесилась"!


  1. izogfif
    13.01.2023 16:10
    +3

    В таблице упомянут "Proxy server". Не думаю, что OpenVPN с целью посерфить отличается от "Proxy server".


    1. ret77876 Автор
      15.01.2023 13:16

      Согласен, OpenVPN тоже по сути запрещён, но использование ssh, как прокси они отследить не смогут.


      1. F0iL
        15.01.2023 23:34

        но использование ssh, как прокси они отследить не смогут.

        Если захотят, то смогут. Паттерны траффика у ssh-as-console, ssh-as-ftp и ssh-as-proxy очень разные и элементарно выявляются простым ML.


        1. Wesha
          16.01.2023 02:27

          Ну так надо ж мусором паддить, чтобы поток постоянный шёл, без чётко выраженных горбов и провалов.


  1. shadrap
    13.01.2023 17:27

    спасибо. хороший вариант в копилку. а как юзера дополнительно в контейнере заводить?


    1. Dmitry27
      14.01.2023 07:39

      стандартно для убунты useradd и usermod -aG


      1. shadrap
        14.01.2023 09:32

        спасибо, я понял , что bash терминал , просто он у меня сначала все по корейски писал и ничего не ясно было) теперь ок.


      1. NeoCode
        14.01.2023 23:56

        А для чего необходимо создание дополнительного юзера?


        1. ret77876 Автор
          15.01.2023 13:17

          Для удобства. Этот пользователь сохраняется при перезапуске контейнера, а следовательно при подключении у вас будет всегда пароль от этого пользователя, который не будет меняться.


          1. NeoCode
            16.01.2023 08:29

            У меня при перезапуске айпишник и порт ssh поменялся, так что все равно лезть в настройки ssh придется каждый раз (правда я не ставил sshuttle, а просто использовал kitty как ssh proxy, но думаю это несвязанные вещи)


            1. shumaher86
              16.01.2023 13:46

              можно с этого места поподробней? а то в статье ничего не написано про винду :)


  1. rstepanov
    13.01.2023 17:28
    +5

    Есть хостеры в РФ, которые все еще предлагают VPS не в РФ. Оплачивать можно с карты российского банка, траффик от виртуалки в остальной мир не фильтруется.

    ЗЫ: забавно когда из другой страны доступно все, что режется в РФ, но зато закрыто что-то другое...


    1. Resursator
      15.01.2023 13:23

      Из-за этого приходится вносить кучу подсетей в исключения в wireguard. Правда что-то при этом всё равно может не работать, но какого-то лёгкого способа отследить нужные пакеты не нашёл в винде, Wireshark не может фильтровать трафик по приложению, только весь интерфейс целиком.


    1. 0xED
      15.01.2023 13:23

      Можете посоветовать таких хостеров? Хочу найти замену hetzner.


      1. rstepanov
        15.01.2023 22:25

        Написал в личку, у меня работало пока было актуально.


    1. sden77
      15.01.2023 18:54

      Можно использовать тот же ssh socks прокси и дополнение для браузера, которое будет пускать траффик через прокси по спискам доменов


  1. 413x
    13.01.2023 17:32
    +1

    ShadowSocks надо проверить


  1. shilovav
    13.01.2023 17:33

    Вовремя, как раз fozzy забанил все зарубежные vps для русских


  1. pantsarny
    13.01.2023 17:48
    +2

    А не проще взять за несколько баксов в год vps и поставить там полноценный впн сервер? Lowendbox


    1. Nikopol25
      13.01.2023 22:43
      +1

      Можно в личку или здесь пример за несколько баксов, а то vps арендую за 5 евро, а на нём уже routeros развернул.


      1. pantsarny
        13.01.2023 22:45
        +3

        1. auresio
          15.01.2023 13:23

          А как у них дела по приему карт? Можно напрямую или надо искать какие то пути?


          1. pantsarny
            15.01.2023 15:28
            +1

            Это только каталоги провайдеров, оплата зависит от конкретных сервисов, по второй ссылке можно выбирать тип оплаты


      1. Areso
        14.01.2023 03:38
        +1

        будьте осторожны, хостеры с LEB имеют свойство "помирать" без предупреждений.

        Сколько не покупал там - все закрылись. Кому-то везло больше, но не мне.


        1. Nikopol25
          14.01.2023 10:27

          У меня был раньше на Оракл бесплатный. Друзьям так же сделал там сервера и поднял vpn. Но когда Оракл перестал работать с Россией у них почти сразу перестал работать, а у меня до января держался сервер. Вот недавно за 4.77 евро арендовал vps с безлимитным трафиком 100мбит. Если на несколько людей то не дорого получается, чашка "лавандового рафа"


          1. Siberianice
            14.01.2023 13:54

            Тоже недавно бесплатный Oracle отключился. Почти год продержался. Но скорость там не фонтан была. Сейчас арендовал за 6.6 руб. в день на vdsina. Скорость больше 100 получается с VPN.


            1. Aelliari
              15.01.2023 11:19

              На х86 действительно не супер широкий канал, но для личного vpn мне хватало. А вот для ARMов заявлен гигабит (на самом деле сеть там больше, но шейпится), в итоге я разок на тестах видел даже 1,5Гб/с, но пару раз попал и на просадки до скоростей ниже гигабита. Плюс можно аж 4 сетевых адаптера накидать и разделить нагрузки на 4 "гигабитных" псевдо-сетевушки


        1. aik
          15.01.2023 19:36

          Выбирать надо с историей какой-никакой.
          Да, они подороже, но и живут не полгода.

          Я там купил greenkvm за 25$ в год (5core/5GB RAM/55GB SSD/5TB трафика) — второй год с ними. И до этого народ не сильно жаловался. Для vpn и персональных сервисов мне вполне хватает.


      1. dartraiden
        14.01.2023 19:32
        +1

        Aeza — есть тариф за 99 рублей в месяц (1 core, 8 GB RAM, 20 GB NVMe, 100 Mbit/s, только Нидерланды). Но надо караулить, серверы быстро кончаются.

        Если есть знакомые за пределами России и Белоруссии, готовые зарегистрировать аккаунт для вас, то Oracle — бесплатные серверы с 4 ядрами и 24 гигами памяти, но ограниченным трафиком — 10 терабайт исходящего в месяц.


  1. Siberianice
    13.01.2023 17:57

    Открытая вкладка не радует) А как же телефоны и прочие устройства? Например, Oculus.


    1. ShadF0x
      14.01.2023 13:31

      В Quest можно держать "перед собой" до трёх приложений одновременно. Wireguard вообще каким-то образом в фоне живёт, я так обновления прошивки через шлем тяну.


      1. Siberianice
        14.01.2023 13:40

        Oculus является пиром? А через что это настраивается с Wireguard?


        1. ShadF0x
          14.01.2023 13:52
          +1

          Не совсем понял вопрос.

          Установить и настроить Wireguard на шлеме можно через adb с соответствующими драйверами, так как шлем работает на Android.

          Можно использовать SideQuest, он просто все команды adb оборачивает в GUI.

          Импортировать файл конфигурации шлем не даст, поэтому придётся его "вводить ручками" через adb shell input (в SideQuest это "Tools -> Paste Text to your device").


          1. Siberianice
            14.01.2023 13:58

            Да, спасибо. Не подумал о такой возможности. Вне дома без роутера Oculus был без интернета.


    1. ret77876 Автор
      15.01.2023 13:20
      +1

      OpenWRT. Ставите на свой роутер и все устройства в сети работают через VPN.


  1. RAX7
    13.01.2023 18:35
    +2

    Контейнер может работать 24/7, если у вас открыта вкладка в браузере с его ide

    А если ркн забанит айпишник этой вкладки, то вам понадобится еще один vpn чтобы включить vpn. We need to go deeper ????


    1. s-a-u-r-o-n
      13.01.2023 18:56

      Не выйдет, так как Goorm не разрешает работать со своей IDE из-под VPN.


      1. dimka11
        14.01.2023 04:48
        +1

        Как определяет?


        1. s-a-u-r-o-n
          14.01.2023 07:50

          Примерно так же, как это делает MaxMind.


  1. xsergex
    13.01.2023 20:14
    +1

    Но как и всегда - "есть один нюанс..."


    1. F0iL
      13.01.2023 20:16
      +6

      А что не так? 7 мегабит для серфинга и даже для просмотра 720p-видео в наше время вполне достаточно. Вы же не фильмы в 4K через проксю качать собираетесь?


      1. xsergex
        13.01.2023 20:21
        +2

        Ну всё же слишком много махинаций для 7 мегабит, да и бонусом где-то держать вечно-открытую вкладку.
        Тот же cf-warp (не сочтите за рекламу) требует меньше телодвижений и даёт бОльшие бенефиты.


        1. Fodin
          13.01.2023 20:32
          +1

          А если еще и достать их креденшелсы для WireGuard, то вообще волшебненько все получается. Скорости у них просто дикие, доступность обалденная. Пользуюсь и радуюсь.


          1. xenon
            13.01.2023 21:52

            В смысле, можно обычным wireguard'ом пользоваться, не их кастомным клиентом? А есть гайд, как извлечь эти ключи и прочее?
            Но когда я проверял - cloudflare warp в хидерах светил адрес клиента. То есть, для обхода блокировок подходит, а вот для анонимности - нет.


            1. xsergex
              13.01.2023 22:08
              +1

              Загуглите cf-warp. В первой тройке ссылок будет гитхаб с нужным проектом.


              1. xenon
                14.01.2023 02:05

                Что-то у меня его конфиги не работают, но ладно, потом с этим разберусь. Спасибо!


                1. xsergex
                  14.01.2023 15:01
                  +2

                  Скорее всего из-за того, что часть серверов заблокировано роскомпозором.
                  Попробуйте поменять эндпоинт на один из этих:
                  https://pastebin.com/cFPdi6yN


                  1. xenon
                    14.01.2023 22:17

                    Первый же случайный адрес оттуда сработал, спасибо!


                1. dartraiden
                  14.01.2023 19:42
                  +1

                  Нужно менять домен на IP.


                  1. xenon
                    14.01.2023 22:17

                    Работает, спасибо!


            1. dartraiden
              14.01.2023 19:43

              То есть, для обхода блокировок подходит

              Причём, только российских. Проблема «ах, ты из России — вон с нашего сайта» никуда не девается.


  1. IRS
    13.01.2023 21:45
    -5

    автор, ну зачем ты РКН даешь идею чтоб блочить? завтра ssh будет по талонам


  1. nitro80
    14.01.2023 01:59
    +1

    Из "школьного" интернета Ростелеком уже недоступен ssh, да и в целом VPN даже внутри страны ????????


  1. rsh
    14.01.2023 03:30
    +5

    Скорость через sshuttle можно увеличить с опцией --no-latency-control


  1. penetration
    14.01.2023 08:36

    Попытался запустить обычный iodine на сервере, ругается на tun адаптер и запрет операции


  1. 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-адрес от интернет-провайдера.


  1. dukzcry
    14.01.2023 11:46
    +2

    Подкроватный сервер + tor вместо мутной корейской «халявы»


    1. dartraiden
      14.01.2023 19:29

      Плюс гемор с периодическим поиском мостов, т.к. множество адресов узлов Tor заблокировано.


    1. eps
      15.01.2023 01:59

      Плюс ужасно низкая скорость, большие задержки, и выходные узлы в чёрных списках многих сайтов


    1. litalen
      15.01.2023 13:23
      +1

      С некоторых пор в Tor с территории РФ так просто не попасть: https://habr.com/ru/news/t/596507/, https://habr.com/ru/post/595853/


  1. 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 есть еще вот такой вариант.


  1. igorhak
    14.01.2023 19:17

    Что мешает поставить бесплатный pfSense в какой нибудь не дорогой, платный VDS, есть достаточно много, которые можно оплатить русской картой. Писать названия тут не буду, да бы не блочили их. Цены 200-300 р в мес 100мб, Германия, Финляндия. Юзайте openvpn или wireguard прямо из коробки. У самого стоит несколько серверов, использую openvpn на всем Linux, Mac, windows, android, iOS, , работают года полтара без каких-либо проблем. На всем устанавливается openvpn connect и работает тоже из коробки. Есть нюанс с Honor и Huawei , в их магазине нет приложения, но можете настроить как L2TP.


  1. dartraiden
    14.01.2023 19:27

    Открываем страницу about:config и в поиске вводим: network.dns.disableIPv6
    и переключаем его на «true».
    Это может сломать работу некоторых сайтов.


  1. Tresimeno
    14.01.2023 21:39

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

    Любую - это, например, Windows 10. В то время как текст репы говорит Works with Linux and MacOS. Стоит уточнить что приложения под win нет (ну или я не там искал и с ходу не нашел).