Domain-Name-System

使用 bind9 時 systemd-resolve 無法解析主機名

  • July 30, 2021

我正在執行 Ubuntu 20.04。我bind9在我想用作 dns-server 的 docker-container 中進行設置。容器執行良好,如果使用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 解析但失敗。

我通過擺脫systemd-resolved

systemctl disable systemd-resolved.service
systemctl stop systemd-resolved

引用自:https://serverfault.com/questions/1060041