ネットワーク接続問題の解決

LinuxBeginner
オンラインで実践に進む

はじめに

ネットワーク接続性は、あらゆる最新のコンピューティング環境において基本的な側面です。多くの問題が発生する可能性がありますが、最も一般的な問題の 1 つがドメインネームシステム(DNS)解決の失敗です。DNS は、人間が理解しやすいドメイン名(例:www.google.com)を、コンピューターが相互に接続するために使用する IP アドレスに変換するサービスです。DNS が機能していない場合、インターネットには接続されていても、どのウェブサイトにも到達できない可能性があります。

この実験(Lab)では、DNS 関連のネットワーク問題を診断し解決するための、構造化された実践的なアプローチを提供します。接続をテストし、DNS の問題を特定し、設定を修正し、接続が完全に復元されたことを確認するための一連のコマンドを学習します。

この実験(Lab)を終了するまでに、Linux システムにおける DNS 接続の課題に対処するための、信頼できる初期トラブルシューティング手順のチェックリストを習得することになります。

ドメイン名への ping による問題の確認

トラブルシューティングを行う際、最初の手順は常に問題を確認することです。インターネット接続をテストする一般的な方法は、ping コマンドを使用することです。ここでは、よく知られたドメインである google.com を ping してみましょう。4 つのパケットのみを送信するために、-c 4 オプションを使用します。

ターミナルで以下のコマンドを実行してください。

ping -c 4 google.com

名前解決の失敗を示すエラーメッセージが表示されるはずです。

ping: google.com: Temporary failure in name resolution

このエラーは、システムがドメイン名 google.com を IP アドレスに変換できなかったことを示しています。これは DNS に問題があることを強く示唆しています。

IP アドレスへの ping による問題の切り分け

DNS の問題が疑われますが、基本的なインターネット接続がまだ機能していることを確認する必要があります。これは、DNS の名前解決プロセスをバイパスして、公開 IP アドレスを直接 ping することで実行できます。ここでは、Google の公開 DNS サーバーIP である 8.8.8.8 を使用します。

以下のコマンドを実行します。

ping -c 4 8.8.8.8

今度は、ping が成功するはずです。サーバーからの応答が表示されます。

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=1.23 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=1.28 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=116 time=1.30 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=116 time=1.25 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.230/1.265/1.301/0.026 ms

IP アドレスは ping できるがドメイン名は ping できないことから、これで問題が DNS 解決にあることが確認できました。

DNS 設定の確認と修正

DNS が問題であると特定できたので、DNS 設定ファイルを見てみましょう。Linux では、これは通常 /etc/resolv.conf です。このファイルは、システムがどの DNS サーバーを使用すべきかを指示します。

その内容を表示してみましょう。

cat /etc/resolv.conf

出力には、セットアップスクリプトによって設定された nameserver が表示されます。

nameserver 192.0.2.1

IP アドレス 192.0.2.1 はドキュメントおよびテスト目的で予約されており、実際の DNS サーバーを指していません。これが問題の原因です。

これを修正するには、誤った nameserver を有効なものに置き換える必要があります。ここでは、Google の公開 DNS サーバーである 8.8.8.8 を使用します。echo コマンドと tee コマンドを使用してファイルを上書きできます。これには sudo 権限が必要です。

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

次に、変更を確認するために再度ファイルを表示します。

cat /etc/resolv.conf

出力には、正しい nameserver が表示されるはずです。

nameserver 8.8.8.8

有効な nameserver が設定されたことで、問題解決に一歩近づきました。

ローカル DNS キャッシュのフラッシュ

お使いのシステムは、最近検索したドメイン名の情報を一時的にキャッシュし、将来の要求を高速化しています。DNS 設定を変更した後、システムが新しい設定を即座に使用し、古く誤っている可能性のあるキャッシュデータに依存しないように、このキャッシュをフラッシュすることが推奨されます。

最新の Linux システムでは、systemd-resolved の一部である resolvectl コマンドを使用して DNS キャッシュを管理できます。キャッシュをフラッシュするには、以下のコマンドを実行します。これには sudo 権限が必要です。

sudo resolvectl flush-caches

このコマンドは成功した場合、出力は生成されません。キャッシュがクリアされたことを確認するには、statistics コマンドを使用してキャッシュ統計を確認できます。

resolvectl statistics

出力内の Current Cache Size の行を探してください。フラッシュ後、この値は 0 になり、キャッシュがクリアされたことが確認できます。Hits や Misses などの他の統計値は、以前の値が保持されることに注意してください。

...
Cache
  Current Cache Size: 0
          Cache Hits: 24
        Cache Misses: 67
...

DNS キャッシュのフラッシュは、システムが古い DNS レコードを使用していないことを確認するための重要な手順です。

DNS 解決と接続性の確認

DNS サーバーの設定を修正し、ローカルキャッシュをフラッシュしたので、修正が正しく行われたかを確認する時が来ました。以前失敗したステップ 1 で実行したのと同じコマンドを繰り返します。

再度 google.com の ping を試してみましょう。

ping -c 4 google.com

今度は、コマンドが成功するはずです。ドメイン名が IP アドレスに解決され、サーバーからの応答が返ってくるのが確認できます。(注:google.com の正確な IP アドレスは異なる場合があります。)

PING google.com (142.250.189.238) 56(84) bytes of data.
64 bytes from nuq04s39-in-f14.1e100.net (142.250.189.238): icmp_seq=1 ttl=119 time=4.43 ms
64 bytes from nuq04s39-in-f14.1e100.net (142.250.189.238): icmp_seq=2 ttl=119 time=4.43 ms
64 bytes from nuq04s39-in-f14.1e100.net (142.250.189.238): icmp_seq=3 ttl=119 time=4.40 ms
64 bytes from nuq04s39-in-f14.1e100.net (142.250.189.238): icmp_seq=4 ttl=119 time=4.43 ms

--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 4.400/4.421/4.434/0.012 ms

成功です!これで、DNS 接続の問題を正常に診断し、解決することができました。

まとめ

この実験(Lab)の完了、おめでとうございます!Linux システムにおける一般的な DNS 関連のネットワーク問題のトラブルシューティングと解決のための標準的な手順を正常に実行できました。

この実験(Lab)では、以下の方法を学びました。

  • ping を使用して接続性をテストし、一般的なネットワーク障害と DNS 固有の問題を区別する方法。
  • /etc/resolv.conf でシステムの DNS サーバー設定を確認する方法。
  • 無効な DNS 設定を修正して名前解決を復元する方法。
  • resolvectl flush-caches を使用してローカル DNS キャッシュをフラッシュし、古いエントリをクリアする方法。
  • ドメイン名への ping が成功することを確認し、修正が機能していることを確認する方法。

これらの基本的なスキルは、多くの一般的なネットワーク問題に対処するための強固な基盤を形成します。今後、DNS の問題が疑われる場合はいつでも、この論理的で段階的なプロセスを適用できます。