因此,我在 LAN 中设置了一个本地服务器。不允许来自网络外部的连接。不过,该服务器应该可以在我的公共域 ( example.org
) 下访问。
因此,我设置了一条 CNAME 记录,指向只能在我的本地网络中访问的名称 ( myserver.fritz.box
)。
这样,我本地网络中的设备就可以访问公共名称下的服务器。而我网络外的设备则不能。
在我的主机上,一切似乎都运行正常。公共域名解析成功,我可以访问我的服务器了。
host# dig myserver.example.org
; <<>> DiG 9.16.1-Ubuntu <<>> myserver.example.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49974
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;myserver.example.org. IN A
;; ANSWER SECTION:
myserver.example.org. 0 IN CNAME myserver.fritz.box.
myserver.fritz.box. 9 IN A 192.168.178.155
;; Query time: 20 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sa Jul 01 16:54:58 CEST 2023
;; MSG SIZE rcvd: 116
现在我在主机上运行一个 docker 容器。在容器内部,CNAME 解析似乎有问题。我收到了NXDOMAIN
:
container# dig myserver.example.org
; <<>> DiG 9.18.16 <<>> myserver.example.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 177
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;myserver.example.org. IN A
;; ANSWER SECTION:
myserver.example.org. 0 IN CNAME myserver.fritz.box.
;; AUTHORITY SECTION:
box. 1823 IN SOA ns0.centralnic.net. hostmaster.centralnic.net. 1688220651 900 1800 6048000 3600
;; Query time: 4 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Sat Jul 01 14:57:46 UTC 2023
;; MSG SIZE rcvd: 149
这也导致我无法从容器内部 ping 服务器:
container# ping myserver.example.org
ping: bad address 'myserver.example.org'
请注意,手动对本地域名进行另一次查询也可以正常工作。
container# dig myserver.fritz.box
; <<>> DiG 9.18.16 <<>> myserver.fritz.box
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2636
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 3
;; QUESTION SECTION:
;myserver.fritz.box. IN A
;; ANSWER SECTION:
myserver.fritz.box. 9 IN A 192.168.178.155
;; AUTHORITY SECTION:
myserver.fritz.box. 9 IN NS fritz.box.
;; ADDITIONAL SECTION:
fritz.box. 9 IN A 192.168.178.1
fritz.box. 9 IN AAAA fd00::cece:1eff:fef4:c4db
fritz.box. 9 IN AAAA 2a01:c22:d145:6900:cece:1eff:fef4:c4db
;; Query time: 252 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Sat Jul 01 14:58:27 UTC 2023
;; MSG SIZE rcvd: 158
为什么会有这样的差异?
docker 的 DNS 服务器难道不应该127.0.0.11
简单地将请求转发到127.0.0.53
主机上,让一切正常吗?
可能相关
我发现,如果我明确使用路由器的 DNS 服务器,而不是使用 resolvectl,我的主机上也会出现同样的问题127.0.0.53
。我也不明白为什么会发生这种情况。
host# dig @fritz.box myserver.example.org
; <<>> DiG 9.16.1-Ubuntu <<>> @fritz.box myserver.example.org
; (3 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 13570
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;myserver.example.org. IN A
;; ANSWER SECTION:
myserver.example.org. 0 IN CNAME myserver.fritz.box.
;; AUTHORITY SECTION:
box. 1641 IN SOA ns0.centralnic.net. hostmaster.centralnic.net. 1688220651 900 1800 6048000 3600
;; Query time: 8 msec
;; SERVER: 2a01:c22:d145:6900:cece:1eff:fef4:c4db#53(2a01:c22:d145:6900:cece:1eff:fef4:c4db)
;; WHEN: Sa Jul 01 17:00:48 CEST 2023
;; MSG SIZE rcvd: 149