ping web01 は通るのに、dig web01 では答えが返ってこない
DNS が壊れてるん?
【疑問】ping は名前で通るのに dig では引けない。/etc/resolv.conf・/etc/nsswitch.conf と host・dig・getent、systemd-resolved【LPICレベル1】
前提のおさらい。つながらないときは下の層から順に、アドレス、ルート、相手の IP、名前解決、ポートの順で確かめる。ここは名前解決のところ
>>1
たぶん web01 は /etc/hosts に書いてある。ping などの普通のプログラムは、/etc/nsswitch.conf の順番で名前を探す。dig と host は DNS サーバーにしか聞かない
>>3
nsswitch.conf ってどう書いてあるん
>>4
試したマシンでは hosts: files dns。files(/etc/hosts)を先に見て、なければ dns(DNS サーバー)に聞く
同じファイルに passwd: files や group: files もあって、ユーザーやグループの情報をどこから探すかも決めてる。LDAP を使うなら ldap などが並ぶ
>>5
nsswitch.conf のとおりに調べるコマンドは?
>>6
getent。getent hosts web01 なら /etc/hosts も DNS も順に見る。試したら getent hosts localhost は /etc/hosts の ::1 localhost ip6-localhost ip6-loopback を返した
dig で引けないのに getent で引けるなら、DNS の外(/etc/hosts など)にあるってこと
>>3
どの DNS サーバーに聞くかはどこで決まるん
>>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 など
>>9
resolv.conf を手で直したのに、しばらくしたら元に戻った
>>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
>>11
名前を引くのは resolvectl query www.example.com
dig の使い方を教えて
>>13dig 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 でルートから順にたどる
>>14
出力の見方は?
>>15
status: NOERROR なら正常、NXDOMAIN ならその名前はない。ANSWER SECTION に答え、AUTHORITY SECTION にそのドメインを受け持つサーバー
答えの行の数字は TTL(キャッシュしてよい秒数)。3600 なら
>>14
host は?
>>17
dig より出力が短い。host www.example.com、host -t MX example.com、host 192.0.2.10(逆引き)。古い nslookup も同じことができる
>>14
レコードの種類を整理して
>>19
A:IPv4 アドレス、AAAA:IPv6 アドレス、CNAME:別名、MX:メールの配送先、NS:そのドメインの DNS サーバー、PTR:逆引き、TXT:文字列、SOA:ゾーンの管理情報
>>16
試したマシンでは、dig と host はパッケージを取ってきて /workspace に展開しただけで、ライブラリが足りずに動かなかった。オプションは man で確かめた。外の DNS には問い合わせてない
>>3
ping は nsswitch.conf の順で /etc/hosts も見る、dig と host は DNS だけ、両方を確かめるのは getent。問い合わせ先は resolv.conf、resolved なら 127.0.0.53 と resolvectl。web01 は /etc/hosts にあったわ
管理人のひとこと
- /etc/nsswitch.conf の
hosts: files dnsで、/etc/hosts を先に、次に DNS を引く。passwd・group なども同じファイルで探す場所を決める。getent hosts 名前は nsswitch.conf のとおりに調べる。 - /etc/resolv.conf:nameserver(3つまで、上から)、search(短い名前に足すドメイン)、domain、options。NetworkManager・DHCP・systemd-resolved が書き換えることがある。
- systemd-resolved では /etc/resolv.conf が stub-resolv.conf へのリンクで nameserver 127.0.0.53。確認は
resolvectl status、問い合わせはresolvectl query。 - dig(@サーバー、種類 MX・AAAA など、-x 逆引き、+short、+trace。status NOERROR・NXDOMAIN、ANSWER・AUTHORITY、TTL)、host(-t 種類)、nslookup は DNS だけに聞く。主なレコード:A、AAAA、CNAME、MX、NS、PTR、TXT、SOA。