DNSのトラブルシューティング

目次
インターネットを使う上で欠かせないDNS(Domain Name System)は、ドメイン名をIPアドレスに変換する重要な役割を担っています。
しかし、DNSに関する問題は日常的によく発生し、ネットワークの接続性に影響を与えることがあります。

この記事では、インフラエンジニアを目指す初学者の方に向けて、DNSトラブルシューティングの基本的な方法を解説します。
各種コマンドの使い方から、よくある設定ミス、キャッシュの確認方法まで、実践的な知識を身につけましょう。

nslookupとdigの使い方

DNSの問題を調査する際、nslookupdigは最も基本的で強力なツールです。
これらのコマンドを使いこなせるようになると、多くのDNS問題を効率的に特定できるようになります。

nslookupコマンド

nslookupはWindows、Linux、macOSなど、ほとんどのプラットフォームで利用可能な汎用的なDNS検索ツールです。
基本的な使い方は非常にシンプルで、調べたいドメイン名を引数として与えるだけです。

例えば、example.comのIPアドレスを調べたい場合:

nslookup example.com

このコマンドを実行すると、以下のような情報が表示されます:

Server:  dns.server.local
Address:  192.168.1.1

Non-authoritative answer:
Name:    example.com
Address:  93.184.216.34

特定のDNSサーバーを指定して問い合わせたい場合は、以下のように実行します:

nslookup example.com 8.8.8.8

このコマンドでは、Google Public DNSサーバー(8.8.8.8)に対して問い合わせを行います。
これは、ローカルDNSサーバーに問題がある場合の切り分けに非常に役立ちます。

digコマンド

digは主にLinuxやmacOSで利用可能な、より詳細なDNS情報を取得できるコマンドラインツールです。
WindowsではWSLやCygwinなどを通じて利用できます。

基本的な使い方は次のとおりです:

dig example.com

digの出力は詳細で、クエリの実行時間やDNSサーバーからの応答コードなども含まれます:

; <<>> DiG 9.16.1-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.com.			IN	A

;; ANSWER SECTION:
example.com.		86400	IN	A	93.184.216.34

;; Query time: 45 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Wed Mar 13 09:00:00 JST 2025
;; MSG SIZE  rcvd: 56

特定のレコードタイプを指定して問い合わせる場合:

dig example.com MX

これにより、example.comのメールエクスチェンジャー(MX)レコードが表示されます。

トレース機能を使ってDNS解決の全過程を表示する場合:

dig +trace example.com

このコマンドは、ルートDNSサーバーから始まり、最終的な権威DNSサーバーに至るまでの解決過程を表示します。
DNSの動作を理解するのに非常に役立つ機能です。

よくあるDNS設定ミス

DNSの設定に関連する問題は、インフラエンジニアが日常的に直面するトラブルの一つです。
ここでは、よくある設定ミスとその対処法を解説します。

TTL(Time To Live)の設定ミス

TTLはDNSレコードがキャッシュに保存される時間を指定します。
この値を適切に設定しないと、DNSの変更が反映されるまでに予想以上の時間がかかることがあります。

例えば、Webサイトの移行を予定している場合、事前にTTL値を低く設定しておくことで、DNSの変更が迅速に反映されるようになります。
逆に、安定した環境では長めのTTL値を設定することでDNSサーバーの負荷を軽減できます。

TTL値の確認には以下のコマンドが役立ちます:

dig +nocmd example.com +noall +answer

レコードの入力ミス

単純なタイプミスや数値の誤りが大きな問題を引き起こすことがあります。
IPアドレスの入力ミス、ドメイン名の誤記、レコードタイプの誤選択などが典型的な例です。

問題を特定するためには、既存のレコードを詳細に確認し、期待通りの値が設定されているか検証することが重要です:

dig +nocmd example.com ANY +noall +answer

このコマンドで、対象ドメインの全レコードタイプを一覧表示できます。

権威DNSサーバーの設定ミス

NSレコードの設定ミスや、ゾーン転送の設定不備などが、DNSの権威に関する問題を引き起こすことがあります。

権威DNSサーバーを確認するには:

dig NS example.com

また、権威DNSサーバー間での情報の一貫性を確認することも重要です。
複数のNSサーバーから同じ情報が返ってくるか確認してください。

リバースDNSの設定ミス

正引き(ドメイン名→IPアドレス)だけでなく、逆引き(IPアドレス→ドメイン名)の設定も重要です。
特にメールサーバーでは、多くのメールサーバーがリバースDNSをスパム対策として確認しています。

リバースDNSの確認:

dig -x 93.184.216.34

IPアドレスとホスト名が一致することを確認し、必要に応じてPTRレコードを適切に設定してください。

DNSキャッシュの確認と更新

DNSの変更を行った後、その変更がすぐに反映されないことがあります。
これは主にDNSキャッシュが原因です。
様々なレベルでキャッシュが存在し、それぞれ異なる方法で確認・クリアする必要があります。

ブラウザのDNSキャッシュ

ウェブブラウザは独自にDNS情報をキャッシュしていることがあります。
これをクリアする最も簡単な方法は、ブラウザを再起動するか、キャッシュをクリアすることです。

Google Chromeの場合:
設定 → プライバシーとセキュリティ → 閲覧データの削除 → キャッシュされた画像とファイル

OSレベルのDNSキャッシュ

オペレーティングシステムもDNS情報をキャッシュします。
OSごとに異なるコマンドでキャッシュをクリアできます。

Windows:

ipconfig /flushdns

macOS:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Linux(systemd使用の場合):

sudo systemd-resolve --flush-caches

ローカルネットワークのDNSキャッシュ

ルーターやローカルDNSサーバーもキャッシュを持っています。
これらのデバイスの管理インターフェースにアクセスして再起動するか、キャッシュクリア機能を使用します。

ISPのDNSキャッシュ

インターネットサービスプロバイダー(ISP)も大規模なDNSキャッシュを運用しています。
これは通常、ユーザーがクリアすることはできません。

ISPのキャッシュの影響を受けないようにするには、一時的に別のDNSサーバーを使用する方法があります:

# Google Public DNS
nslookup example.com 8.8.8.8

# Cloudflare DNS
nslookup example.com 1.1.1.1

キャッシュの動作確認

DNSキャッシュがクリアされたことを確認するには、以下のコマンドが役立ちます:

dig example.com +nocache

このコマンドは、キャッシュを使用せずに直接DNSサーバーに問い合わせを行います。

また、TTLの値を確認することで、いつキャッシュが自動的にクリアされるかを予測できます:

dig +nocmd example.com +noall +answer

出力の中にある数字(秒単位)がTTL値です。この時間が経過すると、キャッシュは自動的に更新されます。

まとめ

DNSは現代のインターネットインフラにおいて非常に重要な役割を果たしており、その問題解決スキルはインフラエンジニアにとって必須です。

この記事で紹介した内容をまとめると:

nslookupとdigは基本的なDNS調査ツールであり、これらを使いこなすことで多くの問題を特定できます。
DNS設定に関するよくある間違いには、TTLの不適切な設定、レコードの入力ミス、権威DNSサーバーの設定ミスなどがあります。
DNSキャッシュは様々なレベル(ブラウザ、OS、ルーター、ISP)で存在し、それぞれ異なる方法でクリアする必要があります。
複雑な問題に対しては、DNSSECの検証、パケットキャプチャ、ログ分析など高度な技術が必要になることがあります。

DNSトラブルシューティングは、「仮説を立てて検証する」という科学的アプローチが効果的です。
問題の症状を観察し、可能性のある原因を列挙し、一つずつ検証していくことで、効率的に問題を解決できます。

最後に、DNSの問題は予防が重要です。
定期的な監視、適切なドキュメンテーション、変更管理の徹底により、多くのDNS問題を未然に防ぐことができます。

DNSトラブルシューティングの技術を磨き、安定したネットワークインフラの構築・運用に役立ててください。