Skip to content

Instantly share code, notes, and snippets.

@swrneko
Last active June 14, 2026 06:14
Show Gist options
  • Select an option

  • Save swrneko/09e60de4d3d8f9a551a1a2c1ab9283c5 to your computer and use it in GitHub Desktop.

Select an option

Save swrneko/09e60de4d3d8f9a551a1a2c1ab9283c5 to your computer and use it in GitHub Desktop.
Naive Proxy Guide

NaiveProxy: Ультимативный гайд по настройке (2026)

📺 Видео-версия гайда


Инструкции по установке

1. Подключаемся к серверу:

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

ssh-copy-id root@<SERVER-IP-ADDRESS>
ssh root@<SERVER-IP-ADDRESS>

2. Далее автоматически обновляем систему:

apt update -y && apt upgrade -y

3. Включаем Google BBR для повышения эффективности обмена трафиком (без этого работать будет медленно):

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

4. Ставим Go последней версии не из репозиториев Debian, так как там версия Go устаревшая:

wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
source ~/.profile

5. Качаем исходники модифицированного Caddy с плагином forwardproxy:

go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

6. Перед сборкой нужно сделать важный шаг, так как на арендованных VPS часто каталог /tmp бывает слишком мал, а все временные файлы качаются туда — мы подменим его на свой:

mkdir /root/tmp
export TMPDIR=/root/tmp
echo $TMPDIR # Должно вывести /root/tmp

7. Далее собираем Caddy:

~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive

8. Создаём каталог для файла конфига Caddy:

mkdir /etc/caddy
touch /etc/caddy/Caddyfile

9. Этот шаг можно пропустить, но я рекомендую генерировать логин и пароль через openssl. Данные команды выведут 2 строки, сгенерированные в base64, их нужно будет скопировать и использовать на следующем шаге как логин и пароль:

apt install openssl -y # ставим openssl если он не стоит
openssl rand -base64 64 | tr -dc 'A-Za-z0-9' | head -c 16; echo # логин
openssl rand -base64 64 | tr -dc 'A-Za-z0-9' | head -c 16; echo # пароль

10. После вставляем конфиг в Caddyfile, но перед этим нужно поменять:

  • your-domain.com на купленный домен;
  • example@example.com на свою почту (на неё зарегистрируется сертификат);
  • user и pass на свои логин и пароль из предыдущего шага;
  • https://demo.cloudreve.org меняем на любой сайт, под который хотим маскироваться. Также он будет доступен при прямом переходе по твоему домену.
cat <<EOF > /etc/caddy/Caddyfile
:443, your-domain.com
tls example@example.com

route {
 forward_proxy {
   basic_auth user pass
   hide_ip
   hide_via
   probe_resistance
 }

 reverse_proxy https://demo.cloudreve.org {
   header_up Host {upstream_hostport}
   header_up X-Forwarded-Host {host}
 }
}
EOF

11. Перемещаем собранный бинарник Caddy в пользовательский каталог:

mv caddy /usr/bin/caddy
chmod +x /usr/bin/caddy

12. Создаём systemd юнит для автоматического перезапуска:

touch /etc/systemd/system/caddy.service 
cat <<EOF > /etc/systemd/system/caddy.service
[Unit]
Description=Caddy with NaiveProxy
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=root
Group=root
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now caddy

13. После запускаем Caddy в фоне. Он автоматически получит TLS-сертификат на указанную почту:

caddy start --config /etc/caddy/Caddyfile 

14. Далее на ПК клиента нужно будет создать файл config.json с таким конфигом и заменить:

  • user на логин, указанный в Caddyfile;
  • pass на пароль, указанный в Caddyfile;
  • demo10.cscot.buzz на домен вашего сервера (НЕ САЙТА МАСКИРОВКИ);
touch config.json
cat <<EOF > config.json
{
  "listen": "socks://127.0.0.1:20808",
  "proxy": "https://user:pass@demo10.cscot.buzz"
}
EOF

🌐 ЧАСТЬ 2: Интеграция с Cloudflare WARP (Опционально)

Нужно, если хотите скрыть IP сервера или разблокировать региональный контент.

1. Установить зависимости:

apt install -y curl gnupg lsb-release

2. Установка WARP клиента:

curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/cloudflare-client.list
apt update && apt install cloudflare-warp -y

3. Настройка режима прокси:

warp-cli registration new
warp-cli mode proxy
warp-cli connect

4. Проброс трафика в Caddy: Добавьте строку upstream socks5://127.0.0.1:40000 в ваш Caddyfile внутрь блока forward_proxy и выполните systemctl restart caddy.


💻 ЧАСТЬ 3: Ссылки на клиенты

@44snarky

Copy link
Copy Markdown

Сейчас пробую и постоянно утыкаюсь в SSL_ERROR_SYSCALL — что-то обрывается внутри самого NaiveProxy или на этапе его общения с Caddy, хотя http.handlers.forward_proxy в порядке вроде. Ubuntu24.

@44snarky

44snarky commented Apr 12, 2026

Copy link
Copy Markdown

Сейчас пробую и постоянно утыкаюсь в SSL_ERROR_SYSCALL

Разобрался. Caddy упирается в то, что хочет заграбастать весь 443, хоть тресни, никаких компромиссов и гибкости. Сертификаты можно и свои, но 443 отдай, теперь чешу репу как с прокси протоколом пробрасывать остальное хозяйство. Попутно потестил ещё пару клиентов на Андроиде — Exclave и Husi, вполне пригодные и миленькие.

@Demmarch

Copy link
Copy Markdown

Возможные проблемы

[0412/185836.440887:ERROR:net/socket/ssl_client_socket_impl.cc:924] handshake failed; returned -1, SSL error code 1, net_error -100
[0412/185836.441302:ERROR:net/socket/ssl_client_socket_impl.cc:924] handshake failed; returned -1, SSL error code 1, net_error -100
[0412/185836.442044:ERROR:net/socket/ssl_client_socket_impl.cc:924] handshake failed; returned -1, SSL error code 1, net_error -100
[0412/185836.442877:ERROR:net/socket/ssl_client_socket_impl.cc:924] handshake failed; returned -1, SSL error code 1, net_error -100
Эти логи отдаёт naiveproxy на клиенте (твоем ПК)

Решение

Первое - проверить конфиги и факт того, что вы добавили айпи сервера в конфигурации домена (A-запись)
После проверки, надо понять, что вы может быть дурачком как я, который 2 раза запустил caddy start --config /etc/caddy/Caddyfile (caddy тут кста молодец, вообще не сообщает о том, что ты его второй раз запустил при уже запущенном процессе)
Мне помогло следующее:
На сервере:

systemctl stop caddy
ps aux | grep caddy
kill <все процессы caddy которые вы нашли>
systemctl start caddy

@demin-alexey

Copy link
Copy Markdown

Спасибо за гайд, полет нормальный. Но на ios не смог завести. Fugu2, v2ray, sing-box, hiddify -хотя и заявлена поддержка naive, не работает. Кто знает как завести на ios?

@maksmqks

Copy link
Copy Markdown

Спасибо за гайд, полет нормальный. Но на ios не смог завести. Fugu2, v2ray, sing-box, hiddify -хотя и заявлена поддержка naive, не работает. Кто знает как завести на ios?

Karing на ios работает с NaiveProxy

@swrneko

swrneko commented Apr 13, 2026 via email

Copy link
Copy Markdown
Author

@MaxxMartinn

Copy link
Copy Markdown

Для тех кто ищет на IOS и MacOS - karing (https://github.com/KaringX/karing). Создаете файл на маке naive-karing.json. Его же можно использовать и для ios karing.
 02 43 44

@44snarky

Copy link
Copy Markdown

чешу репу как с прокси протоколом пробрасывать остальное хозяйство

Даже не пытался развязывать войну за сокет с Layer4, пробросил обычные сайты Nginx через tls_insecure_skip_verify просто изменив порт в конфигах, а вот от Reality на 3x-ui пришлось отказаться в той моей конструкции, когда фронтом стоял Nginx со stream-развязкой по SNI — в нынешней конфигурации такой фокус не проходит. Но Caddy хоть и строптивая, но сообразительная — сама отказалась от zerossl, которая не даёт русским, сертификаты все автоматом от Let's Encrypt. С нестандартными случаями пришлось повозиться, но тоже решаемо.

@shvepsss-user

Copy link
Copy Markdown

Не понимаю в чем проблема. Поднял 3 VPS. На первых двух использую upstream

Caddyfile выглядит так.
{
order forward_proxy before file_server
}
:443, Мой домен {
tls моя почта
forward_proxy {
basic_auth логин пасс
hide_ip
hide_via
probe_resistance
upstream https://логин:пасс@доменкудаапстримим:443
}
file_server {
root /var/www/html
}
}

Что я делаю не так?
Узел 1 → Узел 2 (HTTPS) – ✅ работает

Узел 1 как прокси с upstream на Узел 2 – ❌ 502

@Hollydayland

Copy link
Copy Markdown

https://habr.com/ru/articles/1020080/
есть мысли на счет актуального клиента для android?
Попытался настроить karing, но через мобильную сеть на нем больше 0,5 МБ/с выжать не удалось, хотя через ту же сеть на том же конфиге nekobox выдает полную скорость

@44snarky

Copy link
Copy Markdown

есть мысли на счет актуального клиента для android?
https://github.com/xchacha20-poly1305/husi
https://github.com/dyhkwong/Exclave

@44snarky

Copy link
Copy Markdown

upstream https://логин:пасс@доменкудаапстримим:443
Узел 1 как прокси с upstream на Узел 2 – ❌ 502
А если так:
upstream naive+https://логин:пасс@доменкудаапстримим:443

@44snarky

Copy link
Copy Markdown

upstream https://логин:пасс@доменкудаапстримим:443
Узел 1 как прокси с upstream на Узел 2 – ❌ 502
А если так:
upstream naive+https://логин:пасс@доменкудаапстримим:443

Нет, он сам не понимает. Так что нужно на локалке поднимать клиента с Socks5 и коннектиться уже к нему. Такой бутерброд проксей.

@demin-alexey

Copy link
Copy Markdown

Это нормально, что голосовая связь в телеграмме не работает с Naive? При том, что все остальное работает, соединение во время звонка не устанавливается пишет: exchanging encryption keys. Спросил у ai - говорит мол так и должно быть, UDP-трафик не проходит через NaiveProxy, типо из-за этого

@44snarky

Copy link
Copy Markdown

Это нормально, что голосовая связь в телеграмме не работает с Naive? При том, что все остальное работает, соединение во время звонка не устанавливается пишет: exchanging encryption keys. Спросил у ai - говорит мол так и должно быть, UDP-трафик не проходит через NaiveProxy, типо из-за этого

Ну правильно говорит. Это прокси, а UDP — поток. Чтобы передавать, нужна отдельная инкапсуляция в TCP. Я пока не пробовал, но в теории может быть.

@44snarky

Copy link
Copy Markdown

upstream https://логин:пасс@доменкудаапстримим:443
Узел 1 как прокси с upstream на Узел 2 – ❌ 502
А если так:
upstream naive+https://логин:пасс@доменкудаапстримим:443

Нет, он сам не понимает. Так что нужно на локалке поднимать клиента с Socks5 и коннектиться уже к нему. Такой бутерброд проксей.

И опять я наврал. Стандартный модуль reverse_proxy в Caddy умеет работать с http, https, h2c, fastcgi и даже unix сокетами, но он не понимает протокол SOCKS5 как тип апстрима. Сейчас проверил, работает upstream https://user:pass@domain.tld:443

@Arrissi

Arrissi commented Apr 21, 2026

Copy link
Copy Markdown

go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
-bash: go: command not found что делать с этим

@mark20123644-rgb

Copy link
Copy Markdown

а бесплатно както можно

@DevAnlim

DevAnlim commented Apr 24, 2026

Copy link
Copy Markdown

Вот авто установщик https://github.com/DevAnlim/vpn-installer

@Ieveltyanna

Copy link
Copy Markdown

Настройка клиента NaiveProxy на Routerich (Podkop). Возможно также сработает и на другом OpenWRT роутере:
https://gist.github.com/Ieveltyanna/575ee02a5a23f11ebf9a32018d27a4cc

@Ieveltyanna

Copy link
Copy Markdown

Однострочник для установки naive proxy на VPS:
https://github.com/Ieveltyanna/naive-caddy-installer

wget -qO- https://raw.githubusercontent.com/Ieveltyanna/naive-caddy-installer/main/setup.sh | sudo bash

Требует только наличие домена. После запуска скрипта будет напечатаны QR-код и URL для подключения.

Поддерживается установка рядом с 3x-ui (если cтавили скриптом 3x-ui-pro):

wget -qO- https://raw.githubusercontent.com/Ieveltyanna/naive-caddy-installer/main/3x-ui/setup.sh | sudo bash

@M4CK4L3N

Copy link
Copy Markdown

Это нормально, что голосовая связь в телеграмме не работает с Naive? При том, что все остальное работает, соединение во время звонка не устанавливается пишет: exchanging encryption keys. Спросил у ai - говорит мол так и должно быть, UDP-трафик не проходит через NaiveProxy, типо из-за этого

В naiveproxy пока нет поддержки UDP-трафика, но я нашёл issue в репозитории автора, и там говорится, что разработка UDP уже ведётся.

Пока что максимум можно воспользоваться форком forwardproxy от @aUsernameWoW с экспериментальной реализацией UDP over TCP: ссылка на ветку.

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

@M4CK4L3N

Copy link
Copy Markdown

Это нормально, что голосовая связь в телеграмме не работает с Naive? При том, что все остальное работает, соединение во время звонка не устанавливается пишет: exchanging encryption keys. Спросил у ai - говорит мол так и должно быть, UDP-трафик не проходит через NaiveProxy, типо из-за этого

В naiveproxy пока нет поддержки UDP-трафика, но я нашёл issue в репозитории автора, и там говорится, что разработка UDP уже ведётся.

Пока что максимум можно воспользоваться форком forwardproxy от @aUsernameWoW с экспериментальной реализацией UDP over TCP: ссылка на ветку.

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

Сейчас попробовал, там нужно на сервере собрать caddy через команду:

~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/aUsernameWoW/forwardproxy@naive

И на клиенте в конфиге в пункте outbound указать:

    "udp_over_tcp": {
        "enabled": true,
        "version": 2
    }

Вроде все работает стабильно, но будет ли он так хорошо обходить dpi как оригинал пока не знаю.

@magabtw

magabtw commented May 8, 2026

Copy link
Copy Markdown

Для обхода белых списков Naive не требует [второй] Российский VPS? Или я что-то не так понял...

@Siberik-a

Copy link
Copy Markdown

Работал работал. И хорошо работал. Тут перед 9 мая бац и все. Толи спалился где-то, толи целыми подсетями глушат. Вот эти все покупки доменов, регистрации, может уже и через это все сливают?

@M4CK4L3N

M4CK4L3N commented May 9, 2026

Copy link
Copy Markdown

Для обхода белых списков Naive не требует [второй] Российский VPS? Или я что-то не так понял...

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

@M4CK4L3N

M4CK4L3N commented May 9, 2026

Copy link
Copy Markdown

Работал работал. И хорошо работал. Тут перед 9 мая бац и все. Толи спалился где-то, толи целыми подсетями глушат. Вот эти все покупки доменов, регистрации, может уже и через это все сливают?

Возможно это связано с блокировками мобильной сети в Москве в честь 9 мая.

@seriousStranger

Copy link
Copy Markdown

в 2 бинаря звпустить через это можно https://github.com/seriousStranger/rachav
просто скачать актуальную версию naive и положить рядом с бинарником rachav, он уже сам его запустит + панель + авто сертификаты

@AlgoApi

AlgoApi commented May 20, 2026

Copy link
Copy Markdown

Сделай пожалуйста поднятие этого скрипта через Dokploy - гораздо упростит запуск через докер контейнер и не понадобится вручную что-то делать на сервере. У Dokploy есть Traeffik под капотом - будет просто подключить если что домен и сразу автоматом будет стоять продление сертификата.

@agentHits получилось?

@agentHits

Copy link
Copy Markdown

Сделай пожалуйста поднятие этого скрипта через Dokploy - гораздо упростит запуск через докер контейнер и не понадобится вручную что-то делать на сервере. У Dokploy есть Traeffik под капотом - будет просто подключить если что домен и сразу автоматом будет стоять продление сертификата.

@agentHits получилось?

вот что я сделал DevAnlim/vpn-installer#1 автор не закинул PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment