Веб-приложение на Flask для домашней инфраструктуры:
resolving <domain>, прогресс N / M)Gateway (выпадающий список)DistanceComment Prefix (опционально)Домены (многострочное поле)Найти адреса запускает асинхронный резолв и показывает live-прогресс.Добавить в маршруты запускает асинхронное добавление и показывает live-прогресс.Comment Prefix комментарии в таблице найденных IP обновляются сразу (без повторного резолва).Gateway автоматически подставляется Distance по умолчанию для выбранного gateway (если задан в конфиге).POST -> Redirect -> GET, поэтому при F5 / Cmd+R всегда открывается /.<prefix>: <dns-name> если заполнен Comment Prefix<dns-name> если Comment Prefix пустойgateway и distance.Пропущен с деталями покрытия.dst-address=<ip>/32gateway=<выбранный gateway>distance=<выбранный distance>comment=<итоговый комментарий>AUDIT_DB_PATH).active/rolled_back).Откатить выбранные для пакетного отката с live-прогрессомactive по дате (новые сверху), потом rolled_back по дате10/20/50/100/все)Очистить логи с подтверждениемAPP_SECRET_KEY — секрет Flask сессий.GATEWAYS — список доступных gateway/interface для UI.MIKROTIK_HOST — адрес MikroTik.MIKROTIK_PORT — порт API MikroTik.MIKROTIK_SSL — использовать SSL (true/false).MIKROTIK_USERNAME — логин API пользователя MikroTik.MIKROTIK_PASSWORD — пароль API пользователя MikroTik.DEFAULT_DISTANCE (по умолчанию 20)DEFAULT_COMMENT_PREFIX (по умолчанию пусто)APP_PORT (по умолчанию 5000)DNS_PROVIDERS — список DNS провайдеров в UI.DEFAULT_DNS_PROVIDER (по умолчанию google)DNS_REQUEST_TIMEOUT_SECONDS (по умолчанию 3)DNS_COLLECT_ATTEMPTS (по умолчанию 5)DNS_COLLECT_STABLE_ROUNDS (по умолчанию 2)DNS_COLLECT_DELAY_MS (по умолчанию 250)RESOLVE_MAX_DURATION_SECONDS (по умолчанию 55)RESOLVE_CACHE_DIR (по умолчанию /tmp/dns_resolver_resolves)RESOLVE_CACHE_TTL_SECONDS (по умолчанию 1800)INDEX_CONTEXT_CACHE_DIR (по умолчанию /tmp/dns_resolver_index_context)INDEX_CONTEXT_TTL_SECONDS (по умолчанию 900)RESOLVE_JOB_TTL_SECONDS (по умолчанию 3600)AUDIT_DB_PATH (по умолчанию /tmp/dns_resolver_audit.db)AUDIT_LOG_MAX_ENTRIES (по умолчанию 200)GUNICORN_WORKERS (по умолчанию 1)GUNICORN_TIMEOUT (по умолчанию 180).envAPP_PORT=5000
APP_SECRET_KEY=replace_with_long_random_secret
GATEWAYS=192.168.222.201|20|default|Отправить в VPN,Infolink-eth4|2||Убрать из VPN,192.168.61.1|||Прямой шлюз
DEFAULT_DISTANCE=20
DEFAULT_COMMENT_PREFIX=
DNS_PROVIDERS=google|Google DNS|https://dns.google/resolve,cloudflare|Cloudflare DNS|https://cloudflare-dns.com/dns-query,yandex|Yandex DNS|ns://77.88.8.8,system|System DNS|system
DEFAULT_DNS_PROVIDER=google
DNS_REQUEST_TIMEOUT_SECONDS=3
DNS_COLLECT_ATTEMPTS=5
DNS_COLLECT_STABLE_ROUNDS=2
DNS_COLLECT_DELAY_MS=250
RESOLVE_MAX_DURATION_SECONDS=55
MIKROTIK_HOST=gateway.home
MIKROTIK_PORT=18728
MIKROTIK_USERNAME=api_user
MIKROTIK_PASSWORD=strong_password
MIKROTIK_SSL=false
RESOLVE_CACHE_DIR=/tmp/dns_resolver_resolves
RESOLVE_CACHE_TTL_SECONDS=1800
INDEX_CONTEXT_CACHE_DIR=/tmp/dns_resolver_index_context
INDEX_CONTEXT_TTL_SECONDS=900
RESOLVE_JOB_TTL_SECONDS=3600
AUDIT_DB_PATH=/data/audit.db
AUDIT_LOG_MAX_ENTRIES=200
GUNICORN_WORKERS=1
GUNICORN_TIMEOUT=180
GATEWAYSGATEWAYS задается через запятую.
Форматы элемента:
gatewaygateway|default_distance|default|labelПоля после gateway позиционные. Если поле пропускается, оставьте его пустым:
gateway|||labelgateway|2||labelГде:
gateway — реальное значение, которое отправляется в MikroTikdefault_distance — дистанция по умолчанию для этого gateway (опционально)default — признак gateway по умолчанию на форме (default, true, 1, yes, *)label — отображаемое имя в UIЕсли у gateway не указан default_distance, в интерфейсе автоматически подставляется DEFAULT_DISTANCE.
Пример:
GATEWAYS=192.168.222.201|20|default|Отправить в VPN,Infolink-eth4|2||Убрать из VPN,192.168.61.1|||Прямой шлюз
DNS_PROVIDERSDNS_PROVIDERS задается через запятую.
Формат элемента: key|label|endpoint
key — внутренний идентификаторlabel — отображаемое имя в UIendpoint:
https://dns.google/resolve (Google JSON API)https://.../dns-query (DoH endpoint)ns://<ip> или ns://<ip>:<port> (прямой DNS по UDP/TCP)system (системный DNS контейнера)Пример:
DNS_PROVIDERS=google|Google DNS|https://dns.google/resolve,cloudflare|Cloudflare DNS|https://cloudflare-dns.com/dns-query,yandex|Yandex DNS|ns://77.88.8.8,system|System DNS|system
DEFAULT_DNS_PROVIDER=google
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.py
Открыть: http://127.0.0.1:5000
Пример с внешним volume для персистентного SQLite:
services:
dns-resolver:
image: mikhailpyrochkin/dns-resolver:1.0.2
container_name: dns_resolver
env_file:
- .env
environment:
- AUDIT_DB_PATH=/data/audit.db
ports:
- "8811:5000"
volumes:
- dns_resolver_data:/data
restart: unless-stopped
volumes:
dns_resolver_data:
Запуск:
docker compose up -d
Открыть: http://127.0.0.1:8811
Вариант с именованным volume:
docker volume create dns_resolver_data
docker run -d \
--name dns_resolver \
--restart unless-stopped \
--env-file .env \
-e AUDIT_DB_PATH=/data/audit.db \
-p 8811:5000 \
-v dns_resolver_data:/data \
mikhailpyrochkin/dns-resolver:1.0.2
Вариант с bind-mount на хосте:
mkdir -p ./dns_resolver_data
docker run -d \
--name dns_resolver \
--restart unless-stopped \
--env-file .env \
-e AUDIT_DB_PATH=/data/audit.db \
-p 8811:5000 \
-v "$(pwd)/dns_resolver_data:/data" \
mikhailpyrochkin/dns-resolver:1.0.2
Content type
Image
Digest
sha256:410b7bf95…
Size
48.1 MB
Last updated
4 months ago
docker pull mikhailpyrochkin/dns-resolver