Ubuntu 16.04 から 18.04 にアップグレードした後、dnsmasq 構成が壊れてしまいました。
- systemd-resolvedが有効になっていて実行中である
- dnsmasq が有効になっていて実行中
外部への DNS クエリは、成功するまでに約 30 秒間ハングします。ローカル ホスト (anything.mylocal) へのクエリはすぐに成功します。
dnsmasq (つまりservice dnsmasq stop
) を停止すると、外部へのすべての DNS クエリがすぐに機能するようになります (ただし、もちろん .mylocal は機能しません)。
/etc/dnsmasq.conf 内
listen-address=127.0.0.1
address=/.mylocal/127.0.0.1
/etc/NetworkManager/NetworkManager.conf 内
[main]
...
# dns=dnsmasq
...
dns= 行のコメントを解除すると、すべての dns クエリが防止されます。
/etc/systemd/resolved.conf 内
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=no
/etc/resolv.conf 内
このファイルは、次の内容を含む ../run/resolvconf/resolv.conf へのリンクです。
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 127.0.0.53
/etc/nsswitch.conf 内
passwd: compat systemd
group: compat systemd
shadow: compat
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
の出力には、次のような顕著な違いがありますsystemd-resolve --status
。
- dnsmasq を実行すると、Global の最初の行は次のようになります。
DNS Servers: 127.0.0.1
- dnsmasq が停止すると、この行は存在せず、グローバル DNS サーバーは存在せず、最初の有用なサーバーはリンク 2 セクションで定義され、デフォルト ゲートウェイ (192.168.1.1) が指定されます。
どのような助けでも大歓迎です :)
答え1
一晩寝て ;-) これが私が思いついたものです。 いくつかのパブリック アップストリーム サーバーを手動で追加しました (1.1.1.1 は CloudFlare のもの、8.8.8.8 は Google のもの)
/etc/dnsmasq.conf 内:
listen-address=127.0.0.1
address=/.mylocal/127.0.0.1
server=1.1.1.1
server=8.8.8.8
残りのファイルはすべて私の質問どおりに残されています。systemd-resolved と dnsmasq は両方とも有効になっていて、実行されています。
これにより、DNS クエリが機能します。
私はネットワークによって提供される DNS を使用することを好むため、これが正しい答えであるとはまだ考えていませんが、少なくとも機能します...