Docker 容器内将 CNAME 解析为本地 IP 失败

Docker 容器内将 CNAME 解析为本地 IP 失败

因此,我在 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

相关内容