Свободный и бесплатный ɹǝddoH — multi-hop SSH L3 VPN для iOS/Android

от автора

Я сделаль. И запаковал сервер так, что его можно поднять с телефона: вбил IP и root-пароль — и нода в библиотеке. Цепочка из нескольких VPS — entry → relay → exit. Теперь даже на сервер заходить не надо.

[Любые совпадения случайны, присутствует сарказм и мета-ирония — прим. автора]

Преамбула

Раньше я делал Naive-клиент, и он нормально работал. Но потом клоуны решили включить поведенческий анализ. И вот — все. Ничего не работает. Дальше опять начинается гуглинг и, в итоге, опять я прихожу к VLESS с кучей надстроек, эмуляций различных браузеров, игр и так далее. Ах да, еще надо это все настраивать, делать цепочки из нескольких серверов, чтобы выход и вход не совпадал, заниматься скриптингом и снова молиться, что все заработает и будет работать дальше. А тем временем ssh -D отлично работал все это время, и я такой, а почему бы не выдать root всем завернуть это все внутрь ssh, да еще и по цепочке, да еще и чтобы настраивалось одной кнопкой. И не прокси, а полноценный VPN.

Ведь протокол уже есть — SSH. Его не надо изобретать. Им пользуются все, как и https. Если клоуны заблокируют SSH, то это будет конечно весело, тут уже, боюсь, я ничем помочь не смогу. Осталось лишь написать клиент под это дело, опубликовать его в сторах, доказать опять Apple что это приложение уникальное (как они достали с этим), рассказать ревьюверам в Гугле что такое SSH и как оно работает… тяжела жизнь Open Source программиста. Но я справился.

Представляю ɹǝddoH — (его тяжело будет найти в списке приложений на устройстве, ибо попробуйте это напечатать). Идея простая как тапок: телефон поднимает обычный Packet Tunnel / VpnService, а дальше весь IPv4 уходит сырыми IP-пакетами поверх SSH на entry-ноду. Там крутится hopperd, который гоняет трафик дальше по цепочке (снова по SSH) до exit, где TUN + NAT в интернет. Комбинируйте цепочки и сервера как хочется. Как насчет того, чтобы сделать нейронную сеть?

Снаружи с телефона до первого хопа — это SSH. Между хопами — тоже SSH. Чистейший. Никакого «ещё одного модного handshake’а, который завтра отфигнерят (именно отфингерят, а не отфингерпнинтят)». Вроде никто еще не запретил загружать файлы на сервера, а серверам — обмениваться информацией по зашифрованному каналу.

Подробности и исходники — ZonD80/hopper. Клиент сам провиженит цепочку: по SSH ходит exit к entry, поднимает hopperd, потом VPN-расширение коннектится только к первому хопу и уже через него едет весь трафик.

Почему hop’ы по SSH, а не ещё один VLESS

Во-первых, VLESS это модно. Я уже писал про это.

Плюс тренда — море инструкций. Минус — однотипные паттерны и постоянная гонка «какой transport сегодня не режут». Но когда нужно несколько своих машин подряд и NAT на выходе — прокси-клиенты начинают превращаться в оркестр костылей, которым надо как-то управлять. Тут же — настроил и забыл. Не работает — пересоздал ноду за секунды. Я на этот раз не стал даже показывать QR коды на сервере — все деплоится прямо из приложения!

SSH multi-hop в админском мире существует сто лет (ProxyJumpssh -J). Не хватало одного: чтобы это было VPN в прямом смысле слова, а не прокси. Нужен был еще и серверный компонент, ибо SSHd не умеет то, что нужно, из коробки. А еще я люблю все запаковывать в один бинарник, чтобы если что — удалил и все.

ɹǝddoHd — как раз про это. Один бинарник hopperd на Linux, один протокол data plane (iptunnel поверх byte stream), клиенты на iOS (Network Extension) и Android (VpnService). Несколько цепочек на одних и тех же VPS. Несколько устройств на одной цепочке — каждому свой адрес из 10.64.{octet}.0/24.

Технически это то, что вы подумали — L3: телефон получает адрес из пула цепочки, default route уходит в туннель, exit делает NAT — до 250 подключений на сервер (или до лимита tun интерфейсов) — хостинги, welcome.

А как этим пользоваться?

Купите дешевую ubuntu vps (и попрощайтесь с ней), дальше все настроится само (почти).

Откройте ɹǝddoH → Configure chains → Server library → Deploy → host/IP, root, порт 22, пароль root → дождитесь деплоя. Сервер сам попадёт в библиотеку. Повторите для каждого хопа. Соберите цепочку entry → … → exit → Connect.

И все! Никаких сканирований QR кодов (хотя это тоже есть, ибо sharing is caring), вам даже не нужен компьютер, в отличие от ситуации с моим Naive-клиентом.

Клиенты

iOS/Android приложение: библиотека серверов, цепочки, Deploy / QR / Import JSON, Connect. Профили совместимы между платформами — можно шарить JSON/QR (они содержат ключи, это секреты, но вы и так уже попрощались с VPSкой, не так ли)?

Доступно:

Again, исходники открыты — hopper — you’re welcome.

PS: Одной ноды мало?

Одна VPS = однохоповая цепочка (entry = exit). Две и больше — настоящий multi-hop. Один и тот же сервер может быть entry в одной цепочке и exit в другой.

Великий комбинатор

Великий комбинатор

Что я прошу у сообщества

Проект живой и боевой. Поэтому искренне приветствую:

  • больше тестов на разных сетях, операторах и странах;

  • pull request’ы — от мелких правок до аккуратных улучшений UX;

  • отзывы — что болит, чего не хватает, где я накосячил;

  • one-click-QR-коды для импорта готовых серверов, хостинги — предлагаю продавать лопаты во время золотой лихорадки — давайте запилим партнерку!

Legal notice: следуйте законам вашей страны и пробрасывайте туннели только туда, куда можно; любите ближнего (в рамках скреп).

Купите мне кофе, если хотите.

ссылка на оригинал статьи https://habr.com/ru/articles/1060876/