我已经使用邮件服务器配置了本地 DNS,同时使用 dig 检查 DNS,默认 ttl 始终为 0。
我该如何设置 TTL 60 ?您能给我一些建议吗?
root@mx:/etc/bind# uname -a
Linux mx.mailserver.local 4.15.0-147-generic #151-Ubuntu SMP Fri Jun 18 19:21:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
root@mx:/etc/bind# dig localhost
; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 886
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;localhost. IN A
;; ANSWER SECTION:
localhost. **0** IN A 127.0.0.1
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Tue Aug 10 15:06:14 IST 2021
;; MSG SIZE rcvd: 54
root@mx:/etc/bind# dig mx.mailserver.local
; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> mx.mailserver.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55910
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;mx.mailserver.local. IN A
;; ANSWER SECTION:
mx.mailserver.local. **0** IN A 192.168.1.55
mx.mailserver.local. **0** IN A 192.168.1.66
mx.mailserver.local. **0** IN A 192.168.1.77
mx.mailserver.local. **0** IN A 192.168.1.88
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Tue Aug 10 15:06:34 IST 2021
;; MSG SIZE rcvd: 110
这是我的区域文件。
root@mx:/etc/bind# cat mailserver.local.db
;
; BIND data file for local loopback interface
;
$TTL 14400
@ IN SOA ns1.mailserver.local. root.mailserver.local. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.mailserver.local.
ns1.mailserver.local. IN A 192.168.1.55
localhost 60 IN A 127.0.0.1
;
@ 60 IN A 192.168.1.55
@ 60 IN CNAME mx.mailserver.local.
;
@ 300 IN MX 5 mx.mailserver.local.
;
mx 60 IN A 192.168.1.55
mx 60 IN A 192.168.1.66
mx 60 IN A 192.168.1.77
mx 60 IN A 192.168.1.88
root@mx:/etc/bind# cat db.local
;
; BIND data file for local loopback interface
;
$TTL 2419200
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ 60 IN NS localhost.
@ 60 IN A 127.0.0.1
@ 60 IN AAAA ::1
这是我的主要问题,没有改变 IP 地址并继续 192.168.1.55 仅 ping。
root@mx:/etc/bind# for i in {1..6};do ping -c 1 mx.mailserver.local|grep ^PING;sleep 1;done
PING mx.mailserver.local (192.168.1.55) 56(84) bytes of data.
PING mx.mailserver.local (192.168.1.55) 56(84) bytes of data.
PING mx.mailserver.local (192.168.1.55) 56(84) bytes of data.
PING mx.mailserver.local (192.168.1.55) 56(84) bytes of data.
PING mx.mailserver.local (192.168.1.55) 56(84) bytes of data.
PING mx.mailserver.local (192.168.1.55) 56(84) bytes of data.
答案1
如果您希望 Ip 轮换,我认为您需要定义具有相同名称和不同 Ip 地址的不同 A 寄存器,然后您应该定义具有相同优先级(通常为 10)和不同 Ip 的 MX 寄存器。因此,为了清楚起见,您需要有两个寄存器:一个是 A 类型,另一个是 MX 类型。
也许您可以启动多个 Docker 实例并从内部 ping 来捕获它们解析的内容?
答案2
TTL 值在这里实际上对您没有帮助。
你在单台机器上看到的是标准行为对于 DNSping
等。如果主机名返回多个地址,服务将默认使用 DNS 响应中提供的第一个地址。
让我举例解释一下。
假设我的主机名有三个 A 记录。这些 A 记录分别指向同一域的 192.168.10.1、192.168.10.2 和 192.168.10.3。
DNS 响应将包含这些地址中的任意一个。即实际的 DNS“答案”可以按以下顺序给出它们:
192.168.10.2
192.168.10.1
192.168.10.3
单独的 DNS 查询中的相同三条记录也可能按以下顺序返回:
192.168.10.1
192.168.10.3
192.168.10.2
因此,当您为了等目的对单个主机名执行 DNS 解析时ping
,它具有零优先级功能,并且它收到的“最后响应”将被“缓存”,并且该“第一个”地址用于ping
Web 请求、初始化与主机名的连接等目的。
等中没有ping
“使用不同的请求测试所有 IP”的概念 - 为此,您必须手动覆盖该/etc/hosts
级别的地址或直接 ping IP。一般来说,如果您有单个域记录的三个地址,您应该独立 ping IP 地址,并且不要相信“主机名”解析是正确的。
此外,除非您已从等式中删除systemd-resolved
,否则这就是您这边的缓存解析器,它将“缓存”邮件服务器的初始 IP 响应(在我的示例中,.2 是响应中的第一个地址,因此它会缓存该地址。如果我在系统上重新启动该进程并刷新其缓存,并且它查询的 DNS 服务器首先返回 .1,则 .1 将被缓存为第一个 DNS 主机名以及其他三个条目的“结果”。)