n-LIFE

I love nature photo. Subaru Impreza WRX/Embedded SW/Snowboard/Otaku

dnsmasq: Maximum number of concurrent DNS queries reached (max: 150)

DNSで名前解決が出来ない状態になったので

$ systemctl status dnsmasq

でdnsmasqの状態を確認したところ

dnsmasq: Maximum number of concurrent DNS queries reached (max: 150)

というエラーがずらずらと記録されていた。
Wiresharkを起動してLoopbackのパケットを見てみたところ、127.0.0.1から127.0.0.53に向かってものすごい勢いでDNSのクエリが飛んでいた(このマシンはルーターとして使っており、LAN側のマシンからのDNSクエリが見えていた)。
127.0.0.53でググったところ、systemd-resolvedが/etc/resolv.confに自動的に設定するnameserverのようだった。dnsmasqを使っているので、あまり深く考えずにsystemd-resolvedを停止。

$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved

DNSがおかしくなっているので、中で名前解決しているらしいsudoが大変遅い)

ただしここで少し問題が発生し、今度はdnsmasqが起動しなくなった。またまたsystemctl status dnsmasqしたところ、今度は

dnsmasq: directory /etc/resolv.conf for resolv-file is missing, cannot poll

というエラーで起動に失敗していた。調べてみると/etc/resolv.confはシンボリックリンクになっており、その参照先がなくなっていた。どうやらsystemd-resolvedをdisableしたときにおかしくなったらしい。resolv.confは上位DNSサーバーを指定するファイルという認識なので、とりあえず

nameserver 8.8.8.8

にして再起動した。

しかし!今度はNetworkManagerによって上書きされてしまった!

# Generated by NetworkManager
nameserver 127.0.0.53

今度はNetworkManagerによる上書きを停止する。
/etc/NetworkManager/NetworkManager.confの[main]にdns=noneを追加する

[main]
dns=none

そして再度/etc/resol.confを作成。
これでようやくdnsmasqで名前解決できるようになった。
Linuxは過去の遺産を活かせるように、ファイルにリンクを張って別のファイルを参照させたりしてるから流れが凄く追いづらい。
その互換性が良かったりするんだけどね。