Linux で DNS がどのように機能するか、コマンドとデバッグも含めて教えてください

Linux で DNS がどのように機能するか、コマンドとデバッグも含めて教えてください

ブラウザにURLを入力したときにどのようなフローが発生するのか、Linuxコマンドを使用して何かが機能しない場合にデバッグする方法を理解したい

答え1

ブラウザにURLを入力したときにどのようなフローが起こるかを理解したい

例えば

デバッグ方法

最も便利なツールはおそらく

  • tcpdump
  • nslookupまたは、より現代的な同等語hostおよびdig
  • wgetまたはcurl。manページを読んで、次のような便利なオプションを見つけてください。
    • --server-response
    • --debug
    • --verbose
    • --no-dns-cache

ただし、DNSの前に使用されるネームサービス(ローカルホストファイルや、まれにNBNS、YPなどの他のネットワークサービスなど)があるため、まずローカルの名前解決を理解する必要があります。まずは以下を読んでください。man resolv.conf

答え2

sys/sockets.hLinuxシステムには、Cプログラム用の実装を含む多数のシステムライブラリが付属しており、バークレーソケットAPIそしてPOSIX標準。POSIX仕様には、方法と呼ばれるgetaddrinfo()もので、ホストのIPアドレスをそれを必要とするプログラムに返します。各プログラミングランタイム(例:パイソンパールphpなど)は、独自のインターフェースを実装し、それを使ってgetaddrinfo()しかし、それらのほとんどは、実際に DNS 要求を処理するためにカーネルの方法を使用します。

ソケット接続には、socket()、bind()、connect() などのメソッド呼び出しがいくつか含まれます。私の回答を参照してください。こここれらの呼び出しがどのように調整されてネットワーク接続が作成されるかについてです。

クライアント側での DNS 解決のトラブルシューティングは、サーバーとキャッシュに帰着します。サーバーは、宛先として認識しているアドレスで応答しますが、何らかの理由 (地理位置情報、ブラックリストなど) でそれが必要なアドレスでない場合は、必要なアドレスを持つサーバーに変更できます。必要なアドレスを持つサーバーに接続しているのに、依然として悪い結果になる場合は、ホストまたはルーターやキャッシュ プロキシの上流にキャッシュされた応答が原因である可能性があります。

関連情報