LINUX.ORG.RU
решено ФорумAdmin

Как работает системный DNS-резолвер в linux?

 , ,


1

2

Подскажите, в Linux (Debian 12) есть какой-то слой кеширования DNS-ответов?

У меня регулярно возникают ситуации, когда программы на ноуте после подключения к интернету не могут связаться с хостами по DNS-имени (при том, что резолвер успешно резолвит эти DNS в IP). Такое состояние длится полминуты-минуту. Как сократить этот таймаут до нескольких секунд?

Пример:

В /etc/resolv.conf прописан DNS-сервер (локальный pdns_recursor)

% cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1

Он успешно резолвит ya.ru:

% dig ya.ru @127.0.0.1

; <<>> DiG 9.18.19-1~deb12u1-Debian <<>> ya.ru @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41416
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;ya.ru.                         IN      A

;; ANSWER SECTION:
ya.ru.                  600     IN      A       77.88.55.242
ya.ru.                  600     IN      A       5.255.255.242

;; Query time: 272 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Sep 30 17:26:59 MSK 2023
;; MSG SIZE  rcvd: 66

Но при этом:

% ping ya.ru                   
ping: ya.ru: Name or service not known
★★★★★

Последнее исправление: Harliff (всего исправлений: 2)

Так ты не юзаешь systemd-resolve? Там можно включить кэш. Но без разницы, то что у тебя сейчас слушает на 53 порту наверняка имеет опции кэширования

Надо обязательно поменять днс провайдера на нечто более пригодное типа 1.1.1.1

monkdt
()

В /etc/resolv.conf прописан DNS-сервер (локальный pdns_recursor)

Только это не «системный резолвер» а дополнительная прога. Системный резолвер как раз резолвит напрямую из того процесса, которому это нужно, и ничего не кеширует.

pdns_recursor

Смотрел его конфиг?

Но подозреваю что дело не в кешировании, поскольку ты же сам показал что dig всё успешно получает.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)

По умолчанию в дебиане нет резолвера, и каждый раз когда нужно преобразовать имя в адрес, любой софт стучится напрямую на DNS сервер. Если у тебя прописано 127.0.0.1, это уже не по умолчанию. Что именно там у тебя установлено не ясно, это может быть systemd-resloved, nscd, dnsmasq и прочие.

Khnazile ★★★★★
()

порядок системных dns резолверов (в каком порядке они опрашиваются, и что будет если какой-то из них вернет, или не вернет ответ) определяет строчка hosts из

/etc/nsswitch.conf

man nsswitch.conf

manul91
()
Ответ на: комментарий от Khnazile

Это не так. По умолчанию (если никакие локальные резолверы не инсталированы) софт сперва «стучится» в /etc/hosts, и уже потом на aдрес внешнего резолвера из /etc/resolv.conf

cat /etc/nsswitch.conf | grep hosts

hosts: files dns

manul91
()

вопрос к ляликсоидам заминусовавших совет со сменой днс провайдера на корневой: куда же обращается провайдерский днс сервер? Какой сюрприз как раз к корневому днс серверу! Но можно и своему прову сливать раз такие буратины )

monkdt
()
Ответ на: комментарий от firkax

pdns_recursor

Смотрел его конфиг?

Его конфиг я специально исправил (уменьшил время кеширования негативных ответов до секунды). И как видно, он нормально работает.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от monkdt

1.1.1.1 - это не корневой днс, если ты не знал.

И на корневые тоже менять не надо, они не для конечных клиентов а для провайдерских днсов с кешами - чтобы меньше была нагрузка.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

пусть 1.1.1.1 не корневой, зато самый быстрый резолвер. Я и с моим провайдером, и с телекомом всегда имел тормознее резолв чем с рекомендуемыми. Твой провадер скорее всего их и использует

monkdt
()
Ответ на: комментарий от monkdt

Нормальные провайдеры имеют рекурсивные резолверы через корневые днсы. А насчёт «провайдер использует 1.1.1.1/8.8.8.8/ещё какую чушь» - да, бывает, и как я уже писал - жду когда такое законодательно запретят.

firkax ★★★★★
()
Ответ на: комментарий от firkax

провайдерские днс всегда медленнее в резолве чем публичные. С твоими запросами он может делать все что угодно. Я еще ни разу не видел днс сервер провайдера быстрее чем рекомендуемые публичные, всегда тормознее. Хоть они и впаривают про кэширование и прочую ерунду. Если бы так было сейчас мой провайдер который у меня под носом должнет был бы давать ответ за пару мсек максимум. Почему так не происходит? Вот именно

monkdt
()
Ответ на: комментарий от Anoxemian

йоба, столько говна налили, а всего-лишь браузеры болт клали на resolv.conf

2тс у тебя все норм, просто выруби dot/doh в браузере.

Нет, это не doh. Там даже с /usr/bin/ping проблемы.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от firkax

Ну и есть вероятность что это в вышеупомянутом nsswitch.conf проблема.

Так точно! Вот что оказалось:

% fgrep hosts /etc/nsswitch.conf
hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname
Harliff ★★★★★
() автор топика

Недавно я узнал, что при установке systemd-resolved в некоторых дистрах ставится ещё один пакет, который помогает резолвить имена несколько неявно :)

Dimez ★★★★★
()
Ответ на: комментарий от monkdt

провайдерские днс всегда медленнее в резолве чем публичные.

Не всегда, особенно у крупных провайдеров с миллионами клиентов.

#   Name                 Address              State   Ord         Wt    Queries   Drops Drate   Lat

3   rr0.sib.mts.ru       213.87.210.20:53        up     1          1      16593      85   0.0  52.3
4   rr1.sib.mts.ru       213.87.211.20:53        up     1          1      17698      56   0.0  46.4
5   ns32.myttk.ru        81.1.192.20:53          up     1          1      73576     763   0.0  26.9
6   one.one.one.one      1.1.1.1:53              up     1          1       2585      10   0.0  96.0
7   dns.google           8.8.8.8:53              up     1          1      51807      24   0.0  57.9
8   dns.yandex.ru        77.88.8.8:1253          up     1          1       7928      36   0.0  77.9
yandrey
()
Ответ на: комментарий от Harliff

А, вроде это запись от пакета со словом avahi в названии. Я эту муть давно у себя снёс - совершенно непонятное предназначение (походу автоузнавание имён других хостов в локалке, зачем?), лезет в системные конфиги и висит ненужным демоном. К сожалению только несколько пакетов с названиями libavahi-* снести не получается т.к. они зависимости у чего-то нужного.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

И на корневые тоже менять не надо, они не для конечных клиентов а для провайдерских днсов с кешами - чтобы меньше была нагрузка.

Нет. Корневые для того что бы рассказать у кого спрашивать.

anc ★★★★★
()
Ответ на: комментарий от anc

Рассказать провайдерским, которые спросят всех по цепочке и закешируют ответ по TTL для всех своих клиентов. А не так, что каждый из условно миллиона клиентов сам будет делать то же самое и грузить глобальную систему днсов.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Че там грузить?
1. Спросили хто отвечает за aaaa.ru
2. Получили ответ, пошли спрашивать
Другой вопрос, что миллиону мух клиентов не в юх не вбилось поднимать у себя какой-нидь кэширующий бинд.

anc ★★★★★
()
Ответ на: комментарий от firkax

Есть разница, будет ли это один запрос от провайдерского днс, или миллион одинаковых запросов от всех его клиентов.

Если запрашивают то скорее всего не просто так, а ради какого-то сервиса, который будет «чуток» «больше» создавать нагрузку.

anc ★★★★★
()
Ответ на: комментарий от anc

Короче, я вам все придумал. Чем юзать дидовский негодный dns с наслоениями говн, надо переписать rfc на блокчейн. Размазать его по публичным серверам и забыть всю это дрисню, попутно поводив по губам всяким регистраторам и ркнам. Даешь смузи во благо человечества!

Anoxemian ★★★★★
()
Ответ на: комментарий от firkax

Я эту муть давно у себя снёс - совершенно непонятное предназначение (походу автоузнавание имён других хостов в локалке, зачем?),

Анонсирование хостов в сети, замена Netbios, только гораздо быстрее. CUPS, например, через неё находит сетевые принтеры, а pipwire или Kodi — сетевые телевизоры и колонки. Если тебе всё это не нужно — сноси, конечно.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Если тебе всё это не нужно — сноси, конечно.

Именно так. Аналогия с таким же ненужным нетбиосом и правда напрашивалась. Впрочем, из этого списка сетевые принтеры в каком-нить не сильно организованном офисе, наверно, и правда полезная вещь.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Нормальные провайдеры имеют рекурсивные резолверы через корневые днсы. А насчёт «провайдер использует 1.1.1.1/8.8.8.8/ещё какую чушь» - да, бывает, и как я уже писал - жду когда такое законодательно запретят.

У меня named вообще работает с 1.1.1.1, 8.8.4.4 через stunnel на 853-ем порту.
Если посмотреть со стороны провайдера то я dns вообще почти не использую. ;)
Только ответы запросы-ответы моего домена.

hbars ★★★★★
()
Ответ на: комментарий от monkdt

Крупные сервисы имеют распределенные по геолокации системы. Обращаясь к «далекому» ДНСу, получишь «далекие» сервисы

Пример:

$ host -t a ibm.com
ibm.com has address 23.53.48.72

$ host -t a ibm.com 1.1.1.1
ibm.com has address 104.81.232.193

Ping на 104.81.232.193 больше чем на 23.53.48.72

futurama ★★★★★
()