Skip to content

Instantly share code, notes, and snippets.

@swrneko
Last active May 29, 2026 10:16
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: Ссылки на клиенты

@AlgoApi
Copy link
Copy Markdown

AlgoApi commented May 20, 2026

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

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

@agentHits
Copy link
Copy Markdown

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

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

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

@kostasoft
Copy link
Copy Markdown

Спасибо за инструкцию. Я сначала делал отдельно на "классическом" Caddy, устанавливал отдельно Sing-box, и делал перенаправление (тоже по инструкции).
Сейчас снес caddy и sign-box и сделал по Вашей инструкции. Все завелось без проблем.
Но есть нюанс: стоявший параллельно nginx (который слушает только 80 порт) конфликтует с Caddy. Я временно отключил Nginx. Можно ли nginx вообще удалить использовать этот "кастомно" собранный Caddy для элементарного подключения сайтов как file_server?
Если да, то пожалуйста, скажите, что нужно дописать в конфиг Caddyfile из инструкции, чтобы, к примеру, на обращение к нему по адресу domen1.com:80 он отправил на /var/www/domen1, а по адресу domen2.com:443 он отправил на /var/www/domen2
Специально прошу помощи с учетом разных портов, и чтобы для domen1.com, Caddy не пытался получить сертификат (я его заворачиваю через Cloudflare)

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