
Я работаю над приложением, которое будет использоваться для проверки правильности настройки новых доменов при их настройке для хостинга. Часть этого проверяет действительность записей 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 по любой причине, то естьДругой вопрос.