Назад | Перейти на главную страницу

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

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

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

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

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

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

  • Установите 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 составляют 3600.

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

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

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

rndc flushname <domain>

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

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

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

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

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