我目前正在运行缓存 DNS 服务器来改善网络延迟。
问题是:我可以使用 BIND9 或 Linux 上的其他软件覆盖从服务器获取的 TTL 吗?
简短的“dig www.google.com”在这里:
; <<>> DiG 9.6.1-P2 <<>> www.google.com
;; 答案部分:www.google.com。604441 IN CNAME www.l.google.com。www.l.google.com。300 IN A 74.125.45.147
我可以将‘300’改为15分钟吗?
非常感谢您抽出时间!
答案1
能可以这样做吗?当然 - 有些有问题的 DNS 服务器 (例如 AOL 运行的服务器) 会这样做,而且我认识的每个管理员都讨厌它。
应该能做到吗?几乎可以肯定不能。
一般来说,将 TTL 设置为特定值是有原因的(在谷歌的情况下,可能是为了容错:如果该服务器崩溃,您将只能在 5 分钟内无法访问谷歌),您不应该对此进行修改。
由于您的个人工作站不会运行到互联网进行解析,因此通过将 google.com 记录保留在您的缓存中 5 分钟,您已经获得了性能提升 - 不要过度优化并破坏预期行为:)
答案2
能做的最肮脏、最丑陋的事情是......
1-下载源代码 2-找到名为 cache.c 的文件 3-找到函数 is_expired
4- 按照以下方式更改
static int is_expired(time_t now, struct crec *crecp)
{
if (crecp->flags & F_IMMORTAL)
return 0;
if (difftime(now, crecp->ttd) < 0)
return 0;
return 0; // IT WAS IN ONE
}
函数何时会过期?我们总是看不到
这样它就永远不会过期,而你将征服世界。
输出:
; <<>> DiG 9.6.1-P2 <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28477
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 603937 IN CNAME www.l.google.com.
www.l.google.com. 4294966733 IN A 209.85.195.99
www.l.google.com. 4294966733 IN A 209.85.195.104
www.l.google.com. 4294966733 IN A 209.85.195.147
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Feb 17 18:34:47 2010
;; MSG SIZE rcvd: 110
答案3
如果你真的对历史感兴趣,而不是对准确性感兴趣,最快的你能做的最肮脏的黑客行为可能是让你的名称服务器成为域的权威主服务器,并通过脚本根据需要频繁地重新创建区域文件。当然,这只建议用于接管世界,而不是现实生活。
一般来说,如果您确实希望在应用程序中保留非常短的 TTL 记录,那么唯一明智的方法似乎就是将其缓存在应用程序中。
答案4
参见此处类似问题dnsmasq:如何增加 TTL?另一个在这里有没有“dnsmasq”的替代品?