私のLAN用にdnsmasqを実行しているローカルLinuxサーバーがあります。ここ数年間、何の問題もなくうまく機能してきました。私はオペレーティングシステムとソフトウェアパッケージを定期的に更新します。昨日の定期更新後にLAN上のコンピュータがほとんどのローカルホスト名を解決しようとすると、エラーメッセージが表示されます。自分の作業構成に何らかの方法で欠陥がある可能性があり、更新によって私の欠陥が公開されていると思われます。更新後にこの問題について報告がないため、どこかで間違いを犯したようです。
これはほとんどのクライアントで発生するエラーです。
# ping myfileserver
ping: myfileserver: Name or service not known
しかし、myfileserverのアドレスをpingすると成功します。
# ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.325 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.239 ms
クライアントの resolv.conf。
# cat /etc/resolv.conf
# Generated by NetworkManager
search mylan
nameserver 192.168.1.1
192.168.1.1は私のdnsmasqサーバーのアドレスです。
明らかな事実を見落としている可能性がありますが、ドリルダウンを使用すると、クライアントが正しいホスト名とローカルIPアドレスを含むdnsmasqサーバーから応答を受信していることがわかります。
# drill myfileserver
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 40614
;; flags: qr aa rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;; myfileserver. IN A
;; ANSWER SECTION:
myfileserver. 0 IN A 192.168.1.2
;; AUTHORITY SECTION:
;; ADDITIONAL SECTION:
;; Query time: 0 msec
;; SERVER: 192.168.1.1
;; WHEN: Wed Oct 24 00:12:18 2018
;; MSG SIZE rcvd: 41
サーバーでは、systemd は dnsmasq プロセスが正常に実行されていることを示します。
systemctl status dnsmasq.service
dnsmasq.service - A lightweight DHCP and caching DNS server
Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2018-10-24 00:08:13 EDT
Docs: man:dnsmasq(8)
Process: 28230 ExecStartPre=/usr/bin/dnsmasq --test (code=exited, status=0/SUCCESS)
Main PID: 28231 (dnsmasq)
Tasks: 1 (limit: 4915)
Memory: 1.4M
CGroup: /system.slice/dnsmasq.service
└─28231 /usr/bin/dnsmasq -k --enable-dbus --user=dnsmasq --pid-file
サーバーで開始されたdnsmasqのログ出力。エラーはありません。
Oct 23 01:50:48 mydnsmasqd systemd[1]: Starting A lightweight DHCP and caching DNS server...
Oct 23 01:50:48 mydnsmasqd dnsmasq[768]: dnsmasq: syntax check OK.
Oct 23 01:50:48 mydnsmasqd systemd[1]: Started A lightweight DHCP and caching DNS server.
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: started, version 2.80 cachesize 5000
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: compile time options: IPv6 GNU-getopt DBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify du>
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: DBus support enabled: connected to system bus
Oct 23 01:50:48 mydnsmasqd dnsmasq-dhcp[772]: DHCP, IP range 192.168.10.100 -- 192.168.10.200, lease time 1d
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: using local addresses only for domain mylan
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: reading /etc/resolv-custom.conf
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: using local addresses only for domain mylan
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: using nameserver 8.8.8.8#53
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: using nameserver 8.8.4.4#53
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: read /etc/hosts - 72 addresses
トラブルシューティング中にdnsmasq設定を変更してから再起動しました。もう一度ログには起動時にエラーは表示されず、さまざまな構成変更が問題に影響を与えませんでした。この問題が発生した場合、dnsmasq 構成は変更されませんでした。これは比較的単純な一般的な構成ですが、トラブルシューティング中にほとんど何もしないように削減しました。私が今持っているのは次のとおりです(明らかに関連のないインタフェースバインディング部分を省略)。
# grep -v '^#' /etc/dnsmasq.conf
resolv-file=/etc/resolv-custom.conf
dhcp-range=set:eth0,192.168.10.100, 192.168.10.200, 24h
cache-size=5000
no-negcache
conf-dir=/etc/dnsmasq.d,.bak
# cat /etc/resolv-custom.conf
search mylan
domain mylan
nameserver 8.8.8.8
nameserver 8.8.4.4
すべてのマシンはArch Linux、4.18.10-arch1-1-ARCH Dnsmasqバージョン2.80を実行しています。
答え1
ndots
この質問をしたときにデフォルト値が変更されました。
新しい値1
はです。つまり、クエリ名に1つ以上のポイントが含まれていないsearch
場合は、一致するものが見つかるまでリストの各値が順にサフィックスとして追加されます。
私は以前のアプローチが「現状のまま」名前検索を実行し、失敗した場合にのみリストにリストされているsearch
サフィックスを1つずつ試してみると思います。
古い状況
myfileserver
-dnsmasq
一致する項目がある場所に渡されます。noname
- に渡されたがdnsmasq
一致しないため、照会のためにnoname.mylan
に渡され、dnsmasq
一致しない可能性があるためNXDOMAIN
返されます。
新しい傾向
myfileserver
- 1ポイント未満なので自動的にに渡され、mylan
これは一致しません(のみ要求されると予想されるため)。myfileserver.mylan
dnsmasq
myfileserver
次のいずれかの解決策が機能します。
ndots=0
前の動作に戻すように設定/etc/resolv.conf
(推奨されていません)/etc/hosts
サフィックスを変更してくださいmylan
192.168.1.2 myfileserver.mylan myfileserver
答え2
ホストファイルは72のホストでいっぱいです。これはホストファイルのフォーマットの問題かもしれません。 DNSMasqはこれをスキップします。下記の回答をご覧ください。スタックオーバーフロー
123.123.123.12 Container.test を新しいファイル (例: /etc/dnsmasq.hosts) に入れます。
addn-hosts=/etc/dnsmasq.hosts を /etc/dnsmasq.conf に追加して、dnsmasq が新しいファイルを指すようにします。