読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】ping は名前で通るのに dig では引けない。/etc/resolv.conf・/etc/nsswitch.conf と host・dig・getent、systemd-resolved【LPICレベル1】

22レスカテゴリ:Linux
1: 名無しさん

ping web01 は通るのに、dig web01 では答えが返ってこない
DNS が壊れてるん?

2: 名無しさん

前提のおさらい。つながらないときは下の層から順に、アドレス、ルート、相手の IP、名前解決、ポートの順で確かめる。ここは名前解決のところ

3: 名無しさん

>>1
たぶん web01 は /etc/hosts に書いてある。ping などの普通のプログラムは、/etc/nsswitch.conf の順番で名前を探す。dig と host は DNS サーバーにしか聞かない

4: 名無しさん

>>3
nsswitch.conf ってどう書いてあるん

5: 名無しさん

>>4
試したマシンでは hosts: files dns。files(/etc/hosts)を先に見て、なければ dns(DNS サーバー)に聞く
同じファイルに passwd: files や group: files もあって、ユーザーやグループの情報をどこから探すかも決めてる。LDAP を使うなら ldap などが並ぶ

6: 名無しさん

>>5
nsswitch.conf のとおりに調べるコマンドは?

7: 名無しさん

>>6
getent。getent hosts web01 なら /etc/hosts も DNS も順に見る。試したら getent hosts localhost は /etc/hosts の ::1 localhost ip6-localhost ip6-loopback を返した
dig で引けないのに getent で引けるなら、DNS の外(/etc/hosts など)にあるってこと

8: 名無しさん

>>3
どの DNS サーバーに聞くかはどこで決まるん

9: 名無しさん

>>8
/etc/resolv.conf(resolv.conf の man)
nameserver 192.0.2.53:問い合わせ先。3つまで、上から順
search example.com:短い名前に足して探すドメイン。web01 なら web01.example.com も試す
domain example.com:自分のドメイン(search と似てて、後に書いたほうが効く)
options timeout:2 attempts:3 など

10: 名無しさん

>>9
resolv.conf を手で直したのに、しばらくしたら元に戻った

11: 名無しさん

>>10
NetworkManager や DHCP クライアント、systemd-resolved が書き換えてることが多い。直すのはそっちの設定(nmcli の ipv4.dns など)
systemd-resolved を使ってると、/etc/resolv.conf は /run/systemd/resolve/stub-resolv.conf へのリンクで、nameserver 127.0.0.53 だけが書いてある(自分の中のスタブに聞く)。本当の問い合わせ先は resolvectl status

12: 名無しさん

>>11
名前を引くのは resolvectl query www.example.com

13: 名無しさん

dig の使い方を教えて

14: 名無しさん

>>13
dig www.example.com で A レコード(IPv4)。種類を付けて dig example.com MX、dig www.example.com AAAA
問い合わせ先を指定するなら dig @192.0.2.53 www.example.com
逆引き(アドレスから名前)は dig -x 192.0.2.10
+short で答えだけ、+trace でルートから順にたどる

15: 名無しさん

>>14
出力の見方は?

16: 名無しさん

>>15
status: NOERROR なら正常、NXDOMAIN ならその名前はない。ANSWER SECTION に答え、AUTHORITY SECTION にそのドメインを受け持つサーバー
答えの行の数字は TTL(キャッシュしてよい秒数)。3600 なら

17: 名無しさん

>>14
host は?

18: 名無しさん

>>17
dig より出力が短い。host www.example.com、host -t MX example.com、host 192.0.2.10(逆引き)。古い nslookup も同じことができる

19: 名無しさん

>>14
レコードの種類を整理して

20: 名無しさん

>>19
A:IPv4 アドレス、AAAA:IPv6 アドレス、CNAME:別名、MX:メールの配送先、NS:そのドメインの DNS サーバー、PTR:逆引き、TXT:文字列、SOA:ゾーンの管理情報

21: 名無しさん

>>16
試したマシンでは、dig と host はパッケージを取ってきて /workspace に展開しただけで、ライブラリが足りずに動かなかった。オプションは man で確かめた。外の DNS には問い合わせてない

22: 名無しさん

>>3
ping は nsswitch.conf の順で /etc/hosts も見る、dig と host は DNS だけ、両方を確かめるのは getent。問い合わせ先は resolv.conf、resolved なら 127.0.0.53 と resolvectl。web01 は /etc/hosts にあったわ

管理人のひとこと