Как сконфигурировать логирования ответ от upstream серверов в dnsdist (что бы был ip)?

Ссылка скопирована
dns
1 ответ

Сейчас ситуация такая:, Планирую на базе dnsdist поднять dns сервер который будет логировать ответы по нужным мне доменам.
Сейчас ситуация такая: сохранял список ip - domain если определённый domain. Ни как не получается(Сервер работает, логирование подключил, но в логах нет ip.

2025-09-11 09:40:34,819 {"dns_message": "CLIENT_RESPONSE", "socket_family": "IPv4", "socket protocol": "UDP", "from_address": "127.0.0.1", "to_address": "127.0.0.1", "query_time": "2025-09-11T09:40:34.355877+00:00", "response_time": "2025-09-11T09:40:34.360278+00:00", "latency": 0.004401, "query_type": "A", "query_name": "ya.ru.", "return_code": "NOERROR", "bytes": 82}

Прошу вашей помощи

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

В dnsdist можно логировать ответы от upstream-серверов, но нужно понимать, что базовый query logging чаще показывает запросы, а не всегда удобную картину «какой upstream ответил и каким IP». Для такой задачи обычно используют Lua hooks, dnstap, protobuf logging или внешнюю систему логирования, в зависимости от объема трафика.

Если нужно видеть, какой backend обработал запрос и какой ответ вернулся, начните с настройки carbon/webserver/console для статистики, а для подробных событий используйте Lua. Но будьте осторожны: полное логирование DNS-ответов на нагруженном резолвере быстро создаст большой объем логов и задержки.

Упрощенная логика через Lua может выглядеть так:

function logResponse(dq)
  local remote = dq.remoteaddr:toString()
  local qname = dq.qname:toString()
  local qtype = dq.qtype
  infolog('client=' .. remote .. ' qname=' .. qname .. ' qtype=' .. qtype)
  return DNSAction.None
end

function logResponse(dq) local remote = dq.remoteaddr:toString() local qname = dq.qname:toString() local qtype = dq.qtype infolog('client=' .. remote .. ' qname=' .. qname .. ' qtype=' .. qtype) return DNSAction.None end

Дальше нужно привязать действие к подходящему hook/action, исходя из версии dnsdist. В разных версиях доступны разные функции для response rules и Lua actions, поэтому обязательно сверяйте синтаксис с установленной версией.

  • для аудита включайте подробные логи временно;
  • для постоянного мониторинга лучше использовать метрики и выборочное логирование;
  • если нужен полный поток DNS-событий, смотрите dnstap/protobuf;
  • логируйте backend/server ID, qname, qtype, rcode и client IP;
  • не пишите персональные DNS-запросы в открытые логи без политики хранения.

Если задача именно «получить IP из ответа», проверьте, что вы логируете секцию ответа, а не только запрос. Для больших нагрузок лучше отправлять события в syslog/Graylog/ClickHouse, а не писать в один локальный файл. И обязательно включайте sampling или фильтр по доменам/клиентам, иначе логирование само станет причиной проблем с DNS.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно