Настройте локальный DNS-резолвер, который кэширует только в течение короткого периода времени

Настройте локальный DNS-резолвер, который кэширует только в течение короткого периода времени

Я работаю над приложением, которое будет использоваться для проверки правильности настройки новых доменов при их настройке для хостинга. Часть этого проверяет действительность записей SPF, DomainKey, DKIM и т. д.

В настоящее время я использую TTL по умолчанию в один час для большинства этих записей. Иногда в одной из записей обнаруживается ошибка, поэтому ее необходимо обновить. В настоящее время, если я только что протестировал домен, мне приходится ждать истечения срока действия кэшированной записи системного распознавателя, прежде чем я смогу проверить ее правильность с помощью моего приложения. (Да, я могу проверить вручную, но я написал приложение, поэтому мне не нужно этого делать).

Я хотел бы настроить DNS-сервер в системе, чтобы он действовал как обычный кэширующий преобразователь, за исключением того, что он будет удалять записи максимум через установленное время, например, пять минут, или вообще не будет кэшировать. Не все домены имеют DNS, размещенные на моих обычных серверах имен, поэтому эта система должна будет запрашивать авторитетные серверы имен для домена, а не использовать вышестоящие преобразователи (которые просто использовали бы свои кэшированные записи).

На этом компьютере в настоящее время не запущен никакой DNS, поэтому я могу установить BIND или djbdns (или что-то еще, если есть хорошее предложение).

решение1

Спасибо всем за ваш вклад и предложения. Они направили меня к следующему решению:

  • Установите bind9.
  • Отредактируйте /etc/bind/named.conf.optionsтак, чтобы серверы пересылки были пустыми (чтобы сервер не использовал кэшированные записи другого кэширующего сервера).
  • Установите параметры max-cache-ttlи max-ncache-ttlна 300 секунд. (ссылка)
  • Измените listen-on-v6 { any; };на listen-on-v6 { localhost; };, чтобы сервер не использовался другими системами. (ссылка)
  • Отредактируйте систему так /etc/resolv.conf, чтобы nameserver 127.0.0.1приложения на сервере использовали только новый локальный сервер.

Я перезапустил bind9 и проверил, что он работает:

dev:~# dig serverfault.com

; <<>> DiG 9.5.1-P2 <<>> serverfault.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63591
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;serverfault.com.               IN      A

;; ANSWER SECTION:
serverfault.com.        300     IN      A       69.59.196.212

;; AUTHORITY SECTION:
serverfault.com.        300     IN      NS      ns21.domaincontrol.com.
serverfault.com.        300     IN      NS      ns22.domaincontrol.com.

;; Query time: 190 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jul 18 03:06:24 2009
;; MSG SIZE  rcvd: 101

TTL отображается как 300, хотя опубликованные записи serverfault.com TTL составляют 3600.

решение2

Просто сделайте вызов "dig", используя +trace много раз...

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

Если это программа для Windows, вы можете скачать Bind здесь.https://www.isc.org/download/и он содержит dig.exe, в Linux обычно есть инструменты BIND или, может быть, пакет именованных инструментов, который будет содержать dig.

Установка целого DNS-сервера только для того, чтобы выполнять поиск... безумие!

$ dig www.google.com +trace +nodnssec -4

; <<>> DiG 9.11.9 <<>> www.google.com +trace +nodnssec -4
;; global options: +cmd
...

...

google.com.             172800  IN      NS      ns4.google.com.
;; Received 291 bytes from 192.48.79.30#53(j.gtld-servers.net) in 22 ms

www.google.com.         300     IN      A       172.217.10.228
;; Received 59 bytes from 216.239.32.10#53(ns1.google.com) in 30 ms

решение3

Почему бы просто не использовать dnscache (из пакета djbdns) и не останавливать его каждые 5 минут?

Для тех из вас, кто не использовал djbdns и, в частности, dnscache — это рекурсивный резолвер, который вообще ничего не хранит на диске. Также djb создал набор инструментов, которые автоматически отслеживают программу, и если она умирает, программа мониторинга автоматически (и мгновенно) перезапустит ее.

Убивайте его каждые 5 минут, и Боб станет вашим дядей...

решение4

Вы можете, как вы говорите, ограничить максимальное значение TTL с помощью max-cache-ttlи max-ncache-ttl, либо в пункте параметров BIND, либо в представлении, которое применяется только к вашему серверу разработки.

Однако это влияет на TTL всех поисков, поэтому увеличит нагрузку на сеть/рабочий сервер и снизит устойчивость DNS.

Для BIND 9.3 и выше, если вы просто хотите очистить кэш для одного домена, вы можете сделать следующее:

rndc flushname <domain>

Это очищает все записи для точного домена, а не для поддоменов. Смотрите вывод rndc.

Конечно, если вы хотитеудлинятьTTL по любой причине, то естьДругой вопрос.

Связанный контент