Теперь я сделал свободный и бесплатный Naive-iOS/macOS клиент

от автора

И запаковал сервер, теперь он ставится одной командой тоже.

Server

Server
Client

Client

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

Преамбула

Когда я писал про семейную видеосвязь в одном бинарнике, я уже знал одну вещь наверняка: семья должна оставаться на связи не только голосом и картинкой, но и “обычным интернетом” — без вечного поиска “что бы ещё включить” и без объяснений бабушке, почему “РКН” снова отвалился. Меня устраивало, что чатимся мы через телегу (в смысле, Telegram, а не вот это вот поделие), а созваниваемся в семейном звонке — все отлично. Но не сейчас — вечные разговоры о том, а что IMO/qChat/%название_мессенжера% бы еще поставить, чтобы початиться или поговорить — надоели. Ставьте все угодно, кроме телеги которая телега.

Короче, надо было решать проблему глобально.

Кстати, очень жаль, что сленговое название телеграмма — телега — взяли и присвоили упыри из Казани.

В итоге — я много раз протестировал у родственников в России разные схемы: PPTPпростите меня — все. OpenVPN — все. WG — все. Shadowsocks — переменный успех. VLESS — хорошо, но лично мне геморройно настаивать. При этом с другой стороны все должно быть с хорошим бабушкинским GUI для изи-настройки, а такого нет. И тут я открыл Naive. Что ж, он работает отлично, 3 года полет нормальный — ни одного пакета не потеряно, always-on, все хорошо. Есть классный клиент Shadowrocket, но он платный — у меня было все куплено и расшарено, но потом пришлось разорвать семью в Apple… никто не захотел заморачиваться с покупкой через оператора — а теперь и этой возможности нету.

Сделаем сами, да?

Этот текст — про Наивный VPN: открытый клиент NaiveProxy для iOS и macOS (Packet Tunnel на базе sing-box Libbox), плюс философия “одна команда в терминале” для сервера.


Оки, Naïve

NaiveProxy — это не “ещё один VPN-протокол” в привычном смысле. РКН, ЭТО НЕ VPN, это прокси!!!) Идея в том, чтобы туннель выглядел как обычный HTTPS-трафик браузера: используется сетевой стек, близкий к Chromium, плюс типичный для веба фронт (часто Caddy с плагином forwardproxy в режиме naive). Снаружи это похоже на посещение обычного сайта по TLS, а не на “непонятный поток, который легко отфингерить как прокси-клиент”. У нас же фигнерят, а не фингерпринтят?

Подробности и исходники — у klzgrad/naiveproxy; серверная часть в экосистеме — forwardproxy (naive) — огромное спасибо этому человеку.

И спасибо Игорю Сысоеву за “Welcome to nginx!”, который отлично заходит в качестве заглушки.

Я не претендую на академический разбор; мой критерий был простой: чтобы у родственников в России это работало предсказуемо, а у меня на VPS — без цирка с зависимостями и конфигами.


Почему я остановился на Naive, а не на VLESS.

Во-первых, VLESS это модно.

VLESS и все вокруг него инфраструктурно сейчас в тренде: инструкций море, клиентов много, сообщество огромное. Это плюс. Минус — популярность сама по себе делает протокол и типовые реализации заметной мишенью для тех, кто фильтрует трафик: чем больше однотипных рукопожатий и паттернов, тем проще автоматизировать блокировки и деградацию — ну и, в добавок, пока вы будете настраивать все возможные возможности скрытия — потеряете время.

Shadowsocks — отличный рабочий инструмент, но это отдельный класс трафика с своим профилем. В реальной жизни у “простого человека” он иногда упирается в DPI, в неожиданные порезы скорости или в необходимость постоянно подкручивать конфиги чтобы получить реальный shadow.

Naive при этом почему-то заметно менее популярен в обсуждениях, чем VLESS — хотя по идее “прикинуться обычным HTTPS от хрома” звучит здраво. Возможно, людям не хватает одной кнопки “как у всех в YouTube”, возможно, меньше готовых “коробочных” сборок под все платформы — например под iOS вообще не было клиента. Вот тут я пригожусь. Кстати в macOS также все работает, спасибо Apple Silicon…

Честно: я не знаю, что именно завтра придумают на стороне фильтрации. Но логика здесь такая: жёстко и массово “запретить поведение, похожее на Chrome и обычный веб” — задача неприятная и с большим сопуствующим ущербом (сломать можно очень, очень, очень много легитимного трафика, или проще включить белые списки, правда?).


Это не “VPN”, а прокси. Просто я назвал так для хайпа.

Технически это прокси-туннель, а не классический VPN второго уровня. Слово “VPN” в названии — про привычку пользователю (“включил — весь трафик ушёл в туннель”), а не про то, что здесь IPsec или WireGuard.


Серверная часть: одна командная строка

Я обожаю screen, простите.

Скрипт сервера (start_server.sh) у меня заточен под Linux: он проверяет DNS, при первом запуске спрашивает домен, почту для Let’s Encrypt, логин и пароль прокси, подтягивает Caddy с forwardproxy (naive) и в итоге выдаёт share-ссылку и, где возможно, QR-код для импорта в клиент — сканируете телефоном и подключаетесь.

Я тестил это на Ubuntu, Debian и Alpine — то есть на том, что обычно крутится на дешёвых VPS. На клиентской стороне тестировал iOS и macOS на Apple Silicon.

Собственно, попробуйте:

mkdir -p ~/naive-server && cd ~/naive-serverwget -O start_server.sh "https://raw.githubusercontent.com/ZonD80/naivetools/main/server/start\\_server.sh"chmod +x start_server.shscreen -S naive-caddysudo ./start_server.sh

Клиент

Представляет из себя iOS/MacOS приложение, которое может сканировать конфиги через QR или вносить из через копи-паст, совместимо с Shadowrocket и Exclave — вы можете спокойно шарить конфиги между iOS/Android и всеми 3мя приложениями.

Пока что доступен на appdb, Apple’s Test Flight, а в обычном эппловском сторе проходит модерацию — как пройдет — поменяю ссылки.

Естественно — исходный код доступен под MIT — naivetools — you’re welcome.

Android

Используйте Exclave с плагином Naïve — он полностью совместим с сервером и iOS клиентом.

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

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

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

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

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

Если Наивный VPN оказался полезен — можно и чашку кофе: Buy Me a Coffee.

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

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