我正在运行 Ubuntu 20.04。我在 docker 容器内进行了设置bind9
,我想将其用作 dns 服务器。容器运行良好,如果使用 进行查询,它将正确解析dig
。
dig
在主机上运行(而不是在容器内部运行):
dig @localhost google.com +short
142.250.185.78
bind9 也能正确解析我自己的区域(示例):
dig @localhost myexample.com +short
213.133.98.98
我面临的问题是systemd-resolve
无法使用bind9
其 DNS:
ping google.com
ping: google.com: Temporary failure in name resolution
我配置/etc/systemd/resolved.conf
为使用 localhost 作为 DNS,我必须禁用 DNSStubListener,因为它会堵塞端口 53:
[Resolve]
DNS=127.0.0.1
DNSStubListener=no
我还设置/etc/netplan/00-config.yaml
使用 localhost 作为名称服务器:
network:
nameservers:
addresses:
- 127.0.0.1
运行systemd-resolve --status
后输出如下,表明 localhost 正在用作 DNS:
Global
LLMNR setting: no
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 127.0.0.1
Link 2 (enp1s0)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 127.0.0.1
那么为什么我无法解析主机名,例如使用ping
?bind9 dns 工作正常,如果直接通过 寻址,它将正确解析dig @localhost
。还systemd-resolve
配置为通过 localhost 解析但失败了。
答案1
我通过删除以下内容解决了这个问题systemd-resolved
:
systemctl disable systemd-resolved.service
systemctl stop systemd-resolved