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

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

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

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

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

4 ответа

Решение

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

  • Установите 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 faultserver.ru

; <<>> DiG 9.5.1-P2 <<>> faultserver.ru
;; 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:
;faultserver.ru.               IN      A

;; ANSWER SECTION:
faultserver.ru.        300     IN      A       69.59.196.212

;; AUTHORITY SECTION:
faultserver.ru.        300     IN      NS      ns21.domaincontrol.com.
faultserver.ru.        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, хотя опубликованные TTLs на faultserver.ru равны 3600.

Просто звоните, чтобы «копать», часто используйте +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

Вы можете, как вы говорите, ограничить самый длинный 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 минут, а Боб твой дядя...

Другие вопросы по тегам