NaiveProxy — прокси-протокол, маскирующий трафик под обычный TCP HTTPS. Он работает под Caddy с плагином forwardproxy.
Референсы:
- https://github.com/klzgrad/naiveproxy
- https://gist.github.com/swrneko/09e60de4d3d8f9a551a1a2c1ab9283c5
- https://github.com/XTLS/RealiTLScanner
- VPS/сервер с публичным IP-адресом (любой облачный провайдер)
- Доменное имя, A-запись которого указывает на IP сервера
- Открытый порт 443 на сервере (проверь правила файрволла)
- Root-доступ к серверу по SSH
Включаем BBR — алгоритм контроля перегрузки от Google, повышающий пропускную способность TCP-соединений:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
Go нужен для сборки Caddy с плагином из исходников. Следуем официальной инструкции: https://go.dev/doc/install
Пример установки версии 1.26.2 под Linux amd64:
- Скачать архив с актуальной версией Go под нужную систему и архитектуру
wget https://go.dev/dl/go1.26.2.linux-amd64.tar.gz - Удалить установленный Go и распаковать новый
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.26.2.linux-amd64.tar.gz - Сохранить путь до Go в
PATHecho "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc - Активировать
PATHsource ~/.bashrc - Проверить, что Go доступен
go version
-
Установить Caddy с плагином
forwardproxy. Будет выполняться компиляция из исходников, займёт несколько минут:go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest ~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy=github.com/klzgrad/forwardproxy@naive -
Создать каталог для конфига Caddy:
mkdir -p /etc/caddy -
Сгенерировать логин и пароль для аутентификации прокси:
openssl rand -base64 64 | tr -dc 'A-Za-z0-9' | head -c 16; echo -
Найти сайт-кандидат для маскировки. Прямые заходы на твой домен будут перенаправляться на этот сайт, делая сервер неотличимым от обычного веб-сайта:
- Лучше делать это не с основного прокси-сервера.
- Скачать сканнер: https://github.com/XTLS/RealiTLScanner/releases
- Запустить сканнер, указав IP твоего сервера. Он найдёт ближайшие сайты с аналогичными TLS-характеристиками:
./RealiTLScanner-linux-64 --addr <ip адрес вашего сервера> ... time=2026-03-18T13:06:57.241Z level=INF0 msg="Connected to target" feasible=true ip=<тут будет ip адрес около вашего сервера> origin=<тут будет такой же адрес> tls="TLS 1.3" alpn=h2 cert-domain=someexample.ru cert-issuer="Let's Encrypt" geo=N/A - Из вывода выше запоминаем домен
someexample.ru
-
Создать конфиг Caddy. Заменить:
your-domain.com— твой домен;example@example.com— твоя почта (на неё выпустится TLS-сертификат Let's Encrypt);userиpass— логин и пароль из шага выше;https://someexample.ru— сайт-кандидат из шага выше.
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://someexample.ru { header_up Host {upstream_hostport} header_up X-Forwarded-Host {host} } } EOF -
Переместить собранный бинарник Caddy в системный каталог:
mv caddy /usr/bin/caddy chmod +x /usr/bin/caddy -
Создать systemd-демон для автозапуска:
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 systemctl status caddyЕсли не запустился, можно запустить вручную для отладки:
caddy start --config /etc/caddy/Caddyfile
Составляем config.json, подставив свой домен, логин и пароль:
cat <<EOF > config.json
{
"listen": "socks://127.0.0.1:10808",
"proxy": "https://user:pass@your-domain.com"
}
EOF
Запускаем клиент:
./naive config.json
После запуска SOCKS5-прокси доступен на 127.0.0.1:10808. Его можно указать в браузере или системных настройках сети.
Для дебага проблем можно включить логгирование в stdout следующим образом:
{
"listen": "socks://127.0.0.1:10808",
"proxy": "https://user:pass@your-domain.com",
"log": ""
}
Проверяем работоспособность прокси:
curl --socks5-hostname 127.0.0.1:10808 https://ifconfig.me
В выводе должны увидеть IP адрес прокси