DNS のトラブルシューティングは、どの層をテストしているか特定するところから始まります。システム resolver のツールはローカルファイルとポリシーを含みますが、dig と nslookup は DNS 問い合わせを送り、特定サーバーを直接対象にできます。
DNS · レッスン 6
DNS ツール
getent、resolvectl、dig を使い、システムの名前解決と直接の DNS 問い合わせを比較する方法を学びます。
システム Resolver をテストする
通常のホスト名前サービス経路を使います。
$ getent ahosts www.example.com
systemd-resolved のホストでは、リンクごとのサーバー、search domain、プロトコル状態を調べます。
$ resolvectl status
$ resolvectl query www.example.com
アプリケーションが独自 resolver library や proxy を使う場合もあるため、出力が異なるときはアプリケーション経由でも再現してください。
設定されたシステムの名前サービス経路を動かすコマンドはどれですか?
dig で問い合わせる
名前とレコード型を指定します。
$ dig www.example.com A
$ dig www.example.com AAAA
$ dig example.com MX
出力には応答サーバー、status、flag、question、answer、authority、additional data、query time、transport metadata が示されます。+short はスクリプトに便利ですが、診断に必要な証拠を隠します。
IPv6 address レコードを要求する問い合わせはどれですか?
サーバーを選ぶ
resolver または authoritative server を明示的に指定します。
$ dig @192.0.2.53 www.example.com A
cache と authority を切り分けるときは、設定済み recursive resolver、承認済みの二つ目の resolver、各 authoritative server を比較します。NOERROR status でも要求した answer がない場合があります。NXDOMAIN は問い合わせた名前が存在しないこと、SERVFAIL はサーバーが問い合わせを完了できなかったことを意味します。
NOERROR でも answer section が空になることはありますか?
Recursion と Authority を確認する
問い合わせの rd は recursion を要求し、応答の ra はサーバーが recursion を提供することを示します。aa は answer が authoritative であることを意味します。authoritative server へは +norecurse で問い合わせ、recursive cache と提供中の zone data を混同しないようにします。
dig +trace NAME は root hint から独自に反復探索します。production resolver の cache、forwarding、policy、DNSSEC validation、network location を通らないため、その resolver とは結果が異なる場合があります。
応答の aa flag は何を意味しますか?
Reverse Query と TCP Query をテストする
-x を使って reverse PTR query を組み立てます。
$ dig -x 192.0.2.25
truncation、zone transfer、ファイアウォール差異を調べるときは、TCP 上の DNS をテストします。
$ dig +tcp @192.0.2.53 example.com SOA
現代の DNS は UDP または TCP のポート 53 を使えます。必要な場所では両方を許可すべきです。UDP answer に truncation flag があると、準拠クライアントは適切なトランスポートで再試行します。
dig +tcp は何を変更しますか?
レッスン完了
DNS ツール を完了しました
これで、調査対象の resolver 層に合った DNS ツールを選べます。
設定済みシステム resolver の経路には
getentを使う。明示的なレコード型とサーバーを指定して
digを使う。status、flag、section、応答サーバーをまとめて解釈する。
recursive cache と authoritative data を区別する。
reverse query と、必要な両方の DNS transport をテストする。