我正在开发一个应用程序,用于验证新域名在设置托管时是否配置正确。其中一部分检查 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
尽管 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 因任何原因而改变,即另一个问题。