Как заставить res_query работать с DNS-кэшированием?

Я использую libresolv для выполнения запросов к DNS-серверам.

Также я использую локальный кэш DNS. (Dnsmasq / несвязанного)

Когда я использую dig, например dig google.com, запрос кэшируется, и следующий запрос использует кэшированное значение.

Мы можем видеть это в журналах dnsmasq:

Nov  9 10:46:46 y dnsmasq[24003]: query[A] google.com from 127.0.0.1
Nov  9 10:46:46 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov  9 10:46:46 y dnsmasq[24003]: reply google.com is 173.194.32.165
Nov  9 10:46:46 y dnsmasq[24003]: reply google.com is 173.194.32.160
Nov  9 10:46:49 y dnsmasq[24003]: query[A] google.com from 127.0.0.1
Nov  9 10:46:49 y dnsmasq[24003]: cached google.com is 173.194.32.165
Nov  9 10:46:49 y dnsmasq[24003]: cached google.com is 173.194.32.168

Тогда я использую res_query и я получаю это:

Nov  9 10:50:29 y dnsmasq[24003]: query[MX] google.com from 127.0.0.1
Nov  9 10:50:29 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov  9 10:50:29 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov  9 10:51:13 y dnsmasq[24003]: query[MX] google.com from 127.0.0.1
Nov  9 10:51:13 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov  9 10:51:13 y dnsmasq[24003]: forwarded google.com to **.**.**.**

Таким образом, похоже, что ответ от DNS-сервера не попадает в DNS-кэш и не кэшируется.

Есть ли способ кешировать запрос от res_query ?

Вот как я делаю запрос к распознавателю DNS:

 struct __res_state dnsstate;
int rc = res_ninit(&dnsstate);
if (rc < 0) {
return result;
}
dnsstate.retrans = timeout;

int len = res_nquery(&dnsstate, domain.c_str(), ns_c_in, ns_t_mx, nsbuf, sizeof(nsbuf));

Я полагаю, что res_nquery не проверяет локальный кэш DNS, а dig это делает.

1

Решение

И копать и res_nquery() будет просто отправлять запросы на все, что в вашем /etc/resolv.conf файл, т. е. ваш экземпляр dnsmasq. Оба также по умолчанию установят RD немного запросить рекурсию.

Затем dnsmasq будет либо обслуживать ответы из кэша, либо отправлять их, если истек срок действия TTL. Однако, насколько мне известно, в самом протоколе DNS нет ничего (и, следовательно, ничего в res_nquery настройки), которые клиент может установить, что будет влиять на это поведение

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]