И запаковал сервер, теперь он ставится одной командой тоже.
[Любые совпадения случайны, присутствует сарказм и мета-ирония — прим. автора]
Преамбула
Когда я писал про семейную видеосвязь в одном бинарнике, я уже знал одну вещь наверняка: семья должна оставаться на связи не только голосом и картинкой, но и “обычным интернетом” — без вечного поиска “что бы ещё включить” и без объяснений бабушке, почему “РКН” снова отвалился. Меня устраивало, что чатимся мы через телегу (в смысле, 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/