首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有办法配置Docker的嵌入式DNS服务器的上游名称服务器端口吗?

问有办法配置Docker的嵌入式DNS服务器的上游名称服务器端口吗?
EN

Stack Overflow用户
提问于 2021-04-22 21:43:22
回答 1查看 594关注 0票数 0

一般语境

Docker守护进程附带嵌入式DNS服务器。它解析本地码头群和网络记录,并将外部记录查询转发给配置为-dns 1的上游命名服务器。

Docs说,您可以使用--dns=[IP_ADDRESS...]为这个上游名称服务器设置IP地址。使用的默认端口是53。

我的问题

我也可以配置使用的端口吗?

我的主人的/etc/docker/daemon.json展示了"dns": ["10.99.0.1"],。我是否有办法指定类似"dns": ["10.99.0.1:53"]的内容,以便dockerd始终知道如何将DNS查询转发到端口53?

我的用例

在我的例子中,10.99.0.1是本地主机桥接口的IP。我在此主机上运行本地DNS缓存服务器。所以DNS查询发送到10.99.0.1:53工作。但是,dockerd将来自连接到用户定义桥网络(用docker network create创建)的容器的查询转发到它选择的非标准端口。见下面的终端输出。

详细的终端输出和调试信息

"toogle“是一个连接到我用docker network create__创建的Docker网络的Docker容器。127.0.0.11是另一个回环地址。从连接到用户定义的Docker网络的Docker容器中发出的DNS查询将以此IP为目的地。

Docker的嵌入式DNS服务器真的在运行吗?

DNS查询以这种方式由toogle的防火墙规则路由。

代码语言:javascript
复制
$ sudo nsenter -n -t $(docker inspect --format {{.State.Pid}} toogle) iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 1 packets, 60 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 1 packets, 60 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DOCKER_OUTPUT  all  --  *      *       0.0.0.0/0            127.0.0.11

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DOCKER_POSTROUTING  all  --  *      *       0.0.0.0/0            127.0.0.11

Chain DOCKER_OUTPUT (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            127.0.0.11           tcp dpt:53 to:127.0.0.11:37619   <-- look at this rule
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            127.0.0.11           udp dpt:53 to:127.0.0.11:58552   <-- look at this rule

Chain DOCKER_POSTROUTING (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 SNAT       tcp  --  *      *       127.0.0.11           0.0.0.0/0            tcp spt:37619 to::53
    0     0 SNAT       udp  --  *      *       127.0.0.11           0.0.0.0/0            udp spt:58552 to::53

在这些端口上监听的东西是接受TCP和UDP连接

代码语言:javascript
复制
$ sudo nsenter -n -t $(docker inspect --format {{.State.Pid}} toogle) nc 127.0.0.11 37619 -vz

127.0.0.11: inverse host lookup failed: Host name lookup failure
(UNKNOWN) [127.0.0.11] 37619 (?) open

$ sudo nsenter -n -t $(docker inspect --format {{.State.Pid}} toogle) nc 127.0.0.11 58552 -vzu

127.0.0.11: inverse host lookup failed: Host name lookup failure
(UNKNOWN) [127.0.0.11] 58552 (?) open

但两者都没有DNS应答

代码语言:javascript
复制
$ sudo nsenter -n -t $(docker inspect --format {{.State.Pid}} toogle) dig @127.0.0.11 -p 58552 accounts.google.com

; <<>> DiG 9.11.3-1ubuntu1.14-Ubuntu <<>> @127.0.0.11 -p 58552 accounts.google.com
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached


$ sudo nsenter -n -t $(docker inspect --format {{.State.Pid}} toogle) dig @127.0.0.11 -p 37619 accounts.google.com +tcp

; <<>> DiG 9.11.3-1ubuntu1.14-Ubuntu <<>> @127.0.0.11 -p 37619 accounts.google.com +tcp
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

dockerd正在从toogle内部侦听IP和端口上的DNS查询。

代码语言:javascript
复制
$ sudo nsenter -n -p -t $(docker inspect --format {{.State.Pid}} toogle) ss -utnlp
Netid        State          Recv-Q         Send-Q                    Local Address:Port                    Peer Address:Port
udp          UNCONN         0              0                            127.0.0.11:58552                        0.0.0.0:*             users:(("dockerd",pid=10984,fd=38))
tcp          LISTEN         0              128                          127.0.0.11:37619                        0.0.0.0:*             users:(("dockerd",pid=10984,fd=40))
tcp          LISTEN         0              128                                   *:80                                 *:*             users:(("toogle",pid=12150,fd=3))

但是dockerd正在尝试将DNS查询转发到10.99.0.1,这是我的docker0桥网络接口。

代码语言:javascript
复制
$ sudo journalctl --follow -u docker
-- Logs begin at Tue 2019-11-05 18:17:27 UTC. --
Apr 22 15:43:12 my-host dockerd[10984]: time="2021-04-22T15:43:12.496979903Z" level=debug msg="[resolver] read from DNS server failed, read udp 172.20.0.127:37928->10.99.0.1:53: i/o timeout"
Apr 22 15:43:13 my-host dockerd[10984]: time="2021-04-22T15:43:13.496539033Z" level=debug msg="Name To resolve: accounts.google.com."
Apr 22 15:43:13 my-host dockerd[10984]: time="2021-04-22T15:43:13.496958664Z" level=debug msg="[resolver] query accounts.google.com. (A) from 172.20.0.127:51642, forwarding to udp:10.99.0.1"

dockerd将请求命名服务器127.0.0.11:58552的DNS查询转发到10.99.0.1,但只更改IP而不更改端口。因此,DNS查询被转发到10.99.0.1:58552,并且在该端口没有监听任何内容。

代码语言:javascript
复制
$ dig @10.99.0.1 -p 58552 accounts.google.com
[NO RESPONSE]

$ nc 10.99.0.1 58552  -vz
10.99.0.1: inverse host lookup failed: Unknown host
(UNKNOWN) [10.99.0.1] 58552 (?) : Connection refused

对10.99.0.1:53的DNS查询按预期工作。

代码语言:javascript
复制
dig @10.99.0.1 -p 53 accounts.google.com

; <<>> DiG 9.11.3-1ubuntu1.14-Ubuntu <<>> @10.99.0.1 -p 53 accounts.google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53674
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;accounts.google.com.       IN  A
;; ANSWER SECTION:
accounts.google.com.    235 IN  A   142.250.1.84
;; Query time: 0 msec
;; SERVER: 10.99.0.1#53(10.99.0.1)
;; WHEN: Thu Apr 22 17:20:09 UTC 2021
;; MSG SIZE  rcvd: 64
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 01:18:19

我不认为有办法这样做。我也误解了输出。Docker守护进程正在转发到端口53。

read udp 172.20.0.127:37928->10.99.0.1:53: i/o timeout

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67221167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档