Skip to content

Instantly share code, notes, and snippets.

@Ieveltyanna
Created April 25, 2026 19:30
Show Gist options
  • Select an option

  • Save Ieveltyanna/1a7737c9222d1d4e5567b43de4b6e641 to your computer and use it in GitHub Desktop.

Select an option

Save Ieveltyanna/1a7737c9222d1d4e5567b43de4b6e641 to your computer and use it in GitHub Desktop.
Установка NaiveProxy + Caddy

NaiveProxy + Caddy

NaiveProxy — прокси-протокол, маскирующий трафик под обычный TCP HTTPS. Он работает под Caddy с плагином forwardproxy.

Референсы:

Предварительные требования

  • 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

Go нужен для сборки Caddy с плагином из исходников. Следуем официальной инструкции: https://go.dev/doc/install

Пример установки версии 1.26.2 под Linux amd64:

  1. Скачать архив с актуальной версией Go под нужную систему и архитектуру
    wget https://go.dev/dl/go1.26.2.linux-amd64.tar.gz
    
  2. Удалить установленный Go и распаковать новый
    rm -rf /usr/local/go && tar -C /usr/local -xzf go1.26.2.linux-amd64.tar.gz
    
  3. Сохранить путь до Go в PATH
    echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc
    
  4. Активировать PATH
    source ~/.bashrc
    
  5. Проверить, что Go доступен
    go version
    

Установка NaiveProxy + Caddy

  1. Установить 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
    
  2. Создать каталог для конфига Caddy:

    mkdir -p /etc/caddy
    
  3. Сгенерировать логин и пароль для аутентификации прокси:

    openssl rand -base64 64 | tr -dc 'A-Za-z0-9' | head -c 16; echo 
    
  4. Найти сайт-кандидат для маскировки. Прямые заходы на твой домен будут перенаправляться на этот сайт, делая сервер неотличимым от обычного веб-сайта:

    1. Лучше делать это не с основного прокси-сервера.
    2. Скачать сканнер: https://github.com/XTLS/RealiTLScanner/releases
    3. Запустить сканнер, указав 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
      
    4. Из вывода выше запоминаем домен someexample.ru
  5. Создать конфиг 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
    
  6. Переместить собранный бинарник Caddy в системный каталог:

    mv caddy /usr/bin/caddy
    chmod +x /usr/bin/caddy
    
  7. Создать 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
    
  8. Запустить и проверить статус:

    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 адрес прокси

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