Skip to content

Simple dns proxy with fallback servers. Maybe useful with (Keenetic + opkg dns-override + dns-proxy) + (NAS + Adguard Home). If NAS shuts down dns resolving won't be ruined

License

Notifications You must be signed in to change notification settings

kryoz/dns-proxy

Repository files navigation

DNS Proxy с Primary/Fallback логикой и eBPF-like скорингом

🇬🇧 English version

Высокопроизводительный DNS-прокси, написанный на Go, предназначенный для работы на роутерах (в т.ч. aarch64) и обычных серверах.
Поддерживает основной DNS-сервер, fallback-серверы, эвристику доступности, а также eBPF-подобный scoring алгоритм, аналогичный AdGuard Home (формула №1: RTT + penalty + decay).


✨ Возможности

  • Приём DNS-запросов по UDP на порту 53
  • Прокси-передача запросов на основной DNS-сервер
  • Автоматический переход в fallback-режим при недоступности основного DNS
  • TTL для состояния primary down (по умолчанию 5 минут)
  • Несколько fallback-серверов
  • Балансировка нагрузок на fallback-серверы:
    • На основе их задержек (RTT)
    • С использованием eBPF-подобного scoring:
      score = RTT * decay + penalty_on_fail
  • Автоматическая адаптация весов при получении ответов
  • Поддержка atomic-операций для минимизации блокировок
  • Поддержка PID-файла
  • Логирование в файл
  • Кросс-компиляция для Linux/aarch64

🔧 Как работает eBPF-подобный scoring

Каждому fallback-серверу присваивается внутренний score. После каждого DNS-запроса score обновляется по формуле:

score = score * decay + rtt + penalty(on_failure)
  • decay — коэффициент сглаживания
  • rtt — реальное время ответа сервера
  • penalty — штраф при ошибках

Выбирается сервер с минимальным score.


📦 Установка

Сборка

go build ./cmd/dns-proxy

Кросс-компиляция

GOOS=linux GOARCH=arm64 go build -o dns-proxy ./cmd/dns-proxy

⚙️ Конфигурация

▶️ Запуск

./dns-proxy --config config.yaml --pid /var/run/dns-proxy.pid --log /var/log/dns-proxy.log

About

Simple dns proxy with fallback servers. Maybe useful with (Keenetic + opkg dns-override + dns-proxy) + (NAS + Adguard Home). If NAS shuts down dns resolving won't be ruined

Topics

Resources

License

Stars

Watchers

Forks