配置仅在短时间内缓存的本地 DNS 解析器

配置仅在短时间内缓存的本地 DNS 解析器

我正在开发一个应用程序,用于验证新域名在设置托管时是否配置正确。其中一部分检查 SPF、DomainKey、DKIM 记录等的有效性。

我目前对大多数记录使用默认 TTL 为一小时。偶尔会在某条记录中发现错误,因此需要更新。目前,如果我刚刚测试了域名,我必须等待系统解析器的缓存记录过期,然后才能使用我的应用程序验证它是否正确。(是的,我可以手动检查,但我编写了应用程序,所以不必这样做)。

我想在系统上设置一个 DNS 服务器,充当普通的缓存解析器,但它会在最多设定的时间内(例如五分钟)使记录过期,或者根本不缓存。并非所有域名的 DNS 都托管在我的普通名称服务器上,因此该系统必须向权威名称服务器查询域名,而不是使用上游解析器(后者只会使用其缓存的记录)。

这台机器目前没有运行任何类型的 DNS,因此我可以安装 BIND 或 djbdns(或其他东西,如果有好的建议的话)。

答案1

感谢大家的意见和建议。他们向我提供了以下解决方案:

  • 安装 bind9。
  • 编辑/etc/bind/named.conf.options以使转发器为空白(这样服务器就不会使用另一个缓存服务器的缓存记录)。
  • max-cache-ttlmax-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

尽管 serverfault.com 记录发布的 TTL 是 3600,但 TTL 显示为 300。

答案2

只需拨打“dig”即可使用 +trace ...

Dig 将像 DNS 服务器一样运行,进行完全递归,无需兑现,无需提前了解 NS 服务器,并且如果存在委派问题,您也会发现这一点。

如果它是 Windows 程序,你可以从这里下载 Bindhttps://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

max-cache-ttl正如您所说的,您可以在 BIND 选项子句中使用和来限制最长的 TTL max-ncache-ttl,或者在仅适用于您的开发服务器的视图中。

但是,这会影响所有查找的 TTL,因此会增加生产服务器的网络/负载并降低 DNS 弹性。

对于 BIND 9.3 及以上版本,如果你只想清除一个域的缓存,你可以这样做

rndc flushname <domain>

这将刷新该域(而非子域)的所有记录。请参阅 的输出rndc

当然,如果你想加长TTL 因任何原因而改变,即另一个问题

相关内容