Files
adguard-doh-installer/README.md
T

5.0 KiB

AdGuard DoH Installer

Безопасный повторяемый установщик AdGuard Home + Caddy для VPS.

Он разворачивает:

  • публичный DNS-over-HTTPS на https://dns.example.com/dns-query;
  • отдельную HTTPS-панель на нейтральном домене вроде https://node.example.com;
  • нейтральную статическую заглушку на корне DoH-домена;
  • автоматические сертификаты Let's Encrypt;
  • Cloudflare и Google DoH как основные upstream, несколько обычных DNS только как bootstrap/fallback;
  • Docker Compose-стек с лимитами памяти и автоматическим перезапуском.

Прямой порт AdGuard 3000 публикуется только на 127.0.0.1. Установщик не меняет VPN, маршруты, UFW/iptables и SSH.

Быстрая установка

Сначала создайте две A-записи, указывающие на IP нового VPS:

dns.example.com   -> VPS_IP
node.example.com  -> VPS_IP

Затем выполните одну команду:

curl -fsSL https://git.chardb.ru/VPS/adguard-doh-installer/raw/branch/main/install.sh | sudo bash

Скрипт спросит оба домена и пароль администратора. Пароль не попадает в историю shell. Если оставить его пустым, будет создан случайный пароль и показан один раз.

Неинтерактивный запуск:

curl -fsSL https://git.chardb.ru/VPS/adguard-doh-installer/raw/branch/main/install.sh | \
  sudo bash -s -- --doh-domain dns.example.com --admin-domain node.example.com --email admin@example.com

Безопасное поведение

Перед изменениями скрипт:

  1. проверяет синтаксис доменов;
  2. проверяет их A-записи и публичный IP VPS;
  3. обнаруживает уже работающий AdGuard Home;
  4. проверяет занятость TCP-портов 80 и 443;
  5. отказывается захватывать чужой Nginx/Caddy/Apache;
  6. не принимает непустую чужую директорию без явного --adopt-existing;
  7. сохраняет резервные копии управляемых файлов при повторном запуске;
  8. сохраняет существующий AdGuardHome.yaml, пользователей, клиентов и правила при обновлении;
  9. проверяет Compose до запуска и HTTPS после запуска.

Проверить новый VPS без внесения изменений:

curl -fsSL https://git.chardb.ru/VPS/adguard-doh-installer/raw/branch/main/install.sh | \
  sudo bash -s -- --check --doh-domain dns.example.com --admin-domain node.example.com

Если DNS-записи ещё распространяются, можно установить с --allow-dns-mismatch. Caddy будет повторять выпуск сертификата автоматически.

Повторный запуск и обновление

Повторите ту же команду. Для стека, созданного этим установщиком, данные AdGuard и пароль сохраняются. Перед обновлением создаётся каталог:

/opt/stacks/adguard-doh/backups/<UTC_TIMESTAMP>/

Чужой стек автоматически не усыновляется. Для совместимой установки можно явно указать:

sudo bash install.sh --adopt-existing --stack-dir /opt/stacks/adguard-doh \
  --doh-domain dns.example.com --admin-domain node.example.com

Проверка

sudo bash verify.sh

Ожидается:

  • админка: HTTP 302 или 200;
  • /dns-query без DNS-пакета: HTTP 400;
  • заглушка: HTTP 200;
  • порт 3000: только 127.0.0.1:3000.

Требования и ограничения

  • Debian/Ubuntu для автоматической установки Docker;
  • root/sudo;
  • свободные TCP 80 и 443;
  • домены с A-записями на VPS;
  • существующий reverse proxy намеренно не перенастраивается автоматически.

Если на VPS уже занят 80/443, установщик завершится до изменений. Это безопаснее автоматического удаления или перенастройки чужого сервиса.

Заглушка

Исходник находится в templates/cover/index.html. Установщик кладёт автономную копию в site/index.html. На /dns-query заглушка не влияет.

Лицензия

MIT.