Ubuntu 20.04でdnsmasqとの競合を避けるために、ポート53でsystemd-resolvedを正しく無効にする方法は?

Ubuntu 20.04でdnsmasqとの競合を避けるために、ポート53でsystemd-resolvedを正しく無効にする方法は?

Ubuntu 20.04でdnsmasqを試しましたが、ポート53でsystemd-resolvedとポートの競合が発生しました。だから私は解決策についていくつかの提案を見つけましたが、古いか私の場合には適用されないようです。

systemd-resolvedを無効にすると、タイムアウトを待つように見えるため、すべてが遅くなります。

sudo: unable to resolve host ubuntu: Temporary failure in name resolution

したがって、デフォルトでは、私が入力するすべてのコマンドは約20秒かかります。

dns=default次のような /etc/NetworkManager/NetworkManager.confものを入れるには提案のようなものが必要だと思います。https://askubuntu.com/a/907249。ただし、そのファイルは存在せず、もはやパッケージの一部ではありません。

$ dpkg -S /etc/NetworkManager/NetworkManager.conf
dpkg-query: no path found matching pattern /etc/NetworkManager/NetworkManager.conf

だからここに20以上のコメントを追加するのではなく、20.04タイトルの質問で投稿しています...

systemd-resolveを無効にすると、Iできるdnsmasqを起動しましたが、「名前解決が一時的に失敗しました」エラーのため、すべてがまだ遅くなります。 dnsmasqの状態を見ると問題があるようです。

ubuntu@ubuntu:~$ sudo systemctl status dnsmasq.service
sudo: unable to resolve host ubuntu: Temporary failure in name resolution
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-10-22 11:20:35 UTC; 1min 8s ago
    Process: 36231 ExecStartPre=/usr/sbin/dnsmasq --test (code=exited, status=0/SUCCESS)
    Process: 36232 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=0/SUCCESS)
    Process: 36241 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/S>
   Main PID: 36240 (dnsmasq)
      Tasks: 1 (limit: 9024)
     CGroup: /system.slice/dnsmasq.service
             └─36240 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg->

Oct 22 11:20:35 ubuntu dnsmasq[36240]: using nameserver 127.0.0.53#53
Oct 22 11:20:35 ubuntu dnsmasq[36240]: read /etc/hosts - 7 addresses
Oct 22 11:20:35 ubuntu systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
Oct 22 11:20:37 ubuntu dnsmasq[36240]: Maximum number of concurrent DNS queries reached (max: 150)
Oct 22 11:20:48 ubuntu dnsmasq[36240]: Maximum number of concurrent DNS queries reached (max: 150)
Oct 22 11:20:57 ubuntu dnsmasq[36240]: Maximum number of concurrent DNS queries reached (max: 150)
Oct 22 11:21:07 ubuntu dnsmasq[36240]: Maximum number of concurrent DNS queries reached (max: 150)
Oct 22 11:21:17 ubuntu dnsmasq[36240]: Maximum number of concurrent DNS queries reached (max: 150)
Oct 22 11:21:27 ubuntu dnsmasq[36240]: Maximum number of concurrent DNS queries reached (max: 150)
Oct 22 11:21:37 ubuntu dnsmasq[36240]: Maximum number of concurrent DNS queries reached (max: 150)

上記のログによると、dnsmasqは現在実行されていません127.0.0.53:53?

systemd-resolvedで実行すると、次のようになります。

$ sudo ss -lp "sport = :domain"
Netid     State      Recv-Q      Send-Q           Local Address:Port             Peer Address:Port     Process
udp       UNCONN     0           0                127.0.0.53%lo:domain                0.0.0.0:*         users:(("systemd-resolve",pid=36111,fd=12))
tcp       LISTEN     0           4096             127.0.0.53%lo:domain                0.0.0.0:*         users:(("systemd-resolve",pid=36111,fd=13))

systemd-resolvedを無効にしてdnsmasqを実行した後、次のようになりました。

sudo ss -lp "sport = :domain"
sudo: unable to resolve host ubuntu: Temporary failure in name resolution
Netid State  Recv-Q Send-Q Local Address:Port    Peer Address:Port Process
udp   UNCONN 18432  0            0.0.0.0:domain       0.0.0.0:*     users:(("dnsmasq",pid=36240,fd=4))
udp   UNCONN 0      0               [::]:domain          [::]:*     users:(("dnsmasq",pid=36240,fd=6))
tcp   LISTEN 0      32           0.0.0.0:domain       0.0.0.0:*     users:(("dnsmasq",pid=36240,fd=5))
tcp   LISTEN 0      32              [::]:domain          [::]:*     users:(("dnsmasq",pid=36240,fd=7))

私は持っています:

$ cat /etc/resolv.conf | grep nameserver
nameserver 127.0.0.53

ベストアンサー1

デフォルトでは、systemd-resolved「DNS / DNSSECスタブリゾルバー認証」は「IPアドレス127.0.0.53」、ポート53で提供されます。以下で確認できます。

$ sudo netstat -tulpn | grep LISTEN

tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      787/systemd-resolve 
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      787/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      923/sshd: /usr/sbin 
tcp6       0      0 :::5355                 :::*                    LISTEN      787/systemd-resolve 
tcp6       0      0 :::22                   :::*                    LISTEN      923/sshd: /usr/sbin 

ポート53は指摘したようにDNSトラフィックのデフォルトポートであるため、ここで競合が発生します。

systemd-resolvedさまざまな方法で動作するように設定したり、スタブパーサを完全に無効にしたりすることもできます。

/etc/systemd/resolved.conf.d構成を複数のファイルに分割できる便利なディレクトリの1つです。一部のディストリビューションでは、このディレクトリがまだ存在しない場合があります。

[ -d /etc/systemd/resolved.conf.d ] || mkdir -p /etc/systemd/resolved.conf.d

/etc/systemd/resolved.conf.d/10-make-dns-work.conf次に、デフォルト設定を上書きするファイルを作成します/etc/systemd/resolved.conf

printf "%s\n%s\n" '[Resolve]' 'DNSStubListener=no' | sudo tee /etc/systemd/resolved.conf.d/10-make-dns-work.conf

今私達は:

$ cat /etc/systemd/resolved.conf.d/10-make-dns-work.conf

[Resolve]
DNSStubListener=no

設定を変更したら、再起動する必要がありますsystemd-resolved

$ sudo systemctl restart systemd-resolved

今どこでsystemd-resolved聞くか見てください。

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2494/sshd           
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      8033/systemd-resolv 
tcp6       0      0 :::22                   :::*                    LISTEN      2494/sshd           
tcp6       0      0 :::5355                 :::*                    LISTEN      8033/systemd-resolv 

dnsmasqこれでポート53でリッスンできます。

これらの変更を元に戻すには、追加したプロファイルを削除します。

sudo rm /etc/systemd/resolved.conf.d/10-make-dns-work.conf
sudo systemctl restart systemd-resolved

おすすめ記事