在任何人回答“询问您的 ISP”或“询问您的托管服务提供商”之前,请完整阅读。
设想:
- 我拥有一个域名
mydomain.example
和一个公共路由 IP 块(比如说192.0.2.0/28
) - 此域名的 NS 记录 (GLUE) 在我的注册商处配置 -
ns1.mydomain.example
并ns2.mydomain.example
指向我的服务器(自托管 DNS 服务器) - 我的反向 DNS公共路由 IP 块由相同的服务器提供服务这样我就可以在我闲暇时在我的设备上更新我的 IP 的反向 DNS 条目。
问题:我将我的域名 ( mydomain.example
) 的 DNS 托管从自己的服务器迁移到 cloudflare,认为 DIY 托管不值得。我之前已经用相同的设置做过几次,没有遇到任何不良影响。
然而,当 NS 记录更新为 cloudflare 的记录时,我发现我的反向 DNS 完全停止工作。
问题:什么/谁决定谁在回答我的 IP 块的反向 DNS 查询?据我了解,通常正向 DNS 和反向 DNS 是彼此独立完成的,因此我没想到正向查找名称服务器会从自托管基础设施 -> cloudflare 迁移到 torch 反向 DNS 查找。
据我了解,回答您的正向 DNS(cloudflare)的实体与回答您的反向 DNS 的实体(例如您的托管服务提供商、ISP 等)是独立的。但是,我如何才能确认谁真正对此负责- 就像我对正向 DNS 所做的那样?我可以% dig +short mydomain.example NS
确认哪些服务器负责正向 DNS 查询,那么确定谁负责我所使用的 IP 地址的反向 DNS 的程序是什么?
答案1
如果您的 IP 地址是192.0.2.4
,并且您正在使用 nslookup,那么您将运行以下命令:
设置 q=ns
4.2.0.192.in-addr.arpa
这将向您显示负责您的 IP 地址所在的 IP 地址块的名称服务器。
答案2
您的问题的解决方案:
在这种情况下,我认为问题不在于您的 PTR 记录,而在于 Cloudflare 的反向代理系统的工作方式。如果您的域名正在使用 Cloudflare 的代理,那么它实际上不再指向您的服务器。
解决办法是关闭 Cloudflare 的代理对于邮件服务器所在的域/子域。
回答你的问题:
DNS 和 rDNS 查询确实会分开发生,但 DNS 查询会先发生,以确定要查询哪个 IP 来获取 rDNS/PTR。在这种情况下,Cloudflare 实际上是用自己的 IP 替换 DNS 响应中的您的 IP,这就是导致问题的原因。
例如,如果您有mydomain.example
,并且您的 Cloudflare DNS 设置是指向 的 A 记录192.0.2.1
并启用了代理,那么该域实际上指向 Cloudflare 的服务器,然后将流量转发到您的服务器。但是,这意味着 PTR 查找将查询 Cloudflare 的服务器而不是您的服务器,这将报告不存在记录:
❯ dig proxied.mydomain.example # Remote mail server queries a proxied domain's A record.
;; QUESTION SECTION:
;proxied.mydomain.example. IN A
;; ANSWER SECTION:
proxied.mydomain.example. 300 IN A 104.21.30.252 # Cloudflare Server
proxied.mydomain.example. 300 IN A 172.67.174.61 # Cloudflare Server
❯ dig -x 104.21.30.252 # Remote mail server checks PTR/rDNS of both IPs (This is from a real Cloudflare IP)
;; QUESTION SECTION:
;252.30.21.104.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
21.104.in-addr.arpa. 3600 IN SOA cruz.ns.cloudflare.com. dns.cloudflare.com. 2034580120 10000 2400 604800 3600
# Server returns no PTR record, because it's Cloudflare's server being queried.
如果您禁用 Cloudflare 的邮件服务器 DNS 记录代理,它看起来更像这样:
❯ dig unproxied.mydomain.example # Remote mail server queries a non-proxied domain's A record.
;; QUESTION SECTION:
;unproxied.mydomain.example. IN A
;; ANSWER SECTION:
unproxied.mydomain.example. 300 IN A 192.0.2.1 # DNS server returns your server's IP.
❯ dig -x 192.0.2.1 # Mail server queries YOUR server for PTR.
;; QUESTION SECTION:
;117.8.209.209.in-addr.arpa. IN PTR
;; ANSWER SECTION:
117.8.209.209.in-addr.arpa. 86400 IN PTR unproxied.mydomain.example.
# PTR returns the correct value.
(请注意,我在此回复中跳过了 MX/SPF/DKIM/DMARC 查找,因为据我所知,除非您将记录指向代理的 A/AAAA/CNAME 记录,否则 Cloudflare 不会处理这些查找。)