如何覆盖 Internet 地址的 TTL?

Omn*_*red 6 linux bind dnsmasq

我目前正在运行缓存 DNS 服务器以改善网络中的延迟。

问题是:我可以在 Linux 上使用 BIND9 或其他软件覆盖从服务器获得的 TTL 吗?

在这里简短地“挖掘 www.google.com”:

; <<>> DiG 9.6.1-P2 <<>> www.google.com

;; 回答部分:www.google.com。604441 在 CNAME www.l.google.com。www.l.google.com。300 中 74.125.45.147

我可以将“300”更改为 15 分钟吗?

非常感谢您的时间!

vor*_*aq7 7

CAN这样做吗?当然 - 有损坏的 DNS 服务器(例如 AOL 运行的服务器)会这样做,我认识的每个管理员都讨厌它。

应该这样做吗?几乎可以肯定没有。

一般来说,TTL 被设置为一个特定的值是有原因的(在谷歌的情况下,可能是容错:如果该服务器崩溃,您将只能在 5 分钟内无法访问谷歌),并且您不应该考虑它.

通过将 google.com 记录保留在缓存中 5 分钟,您已经获得了性能提升,因为您的个人工作站不会用完互联网进行解析 - 不要过度优化并打破预期的行为:)

  • 好吧,我的总体意图是说服你*不要*这样做。如果您坚持我所知道的唯一方法是实际修补 BIND 以添加一个 `min-cache-ttl` 配置指令(在功能上类似于现有的 `max-cache-ttl`)。AFAIK 在野外没有缓存 DNS 服务器允许你这样做,虽然我没有看过微软的...... (3认同)

Omn*_*red 7

可以做的最肮脏最丑陋的事情是......

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
}
Run Code Online (Sandbox Code Playgroud)

什么时候函数 ask 过期了?我们总是看到没有

这样它永远不会过期,你将征服世界。

输出:

; <<>> 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
Run Code Online (Sandbox Code Playgroud)

  • +1 表示持续渴望接管世界(并在此过程中学习)。 (4认同)