はじめに
この記事では、IT初心者の筆者がコンピュータネットワークを理解するために調べた名前解決の基本をまとめています。名前解決を理解する際に役立つ、Windows環境での基本操作も紹介しています。実際に操作してみることで、DNSやhostsファイルについての理解を深めていただければ嬉しいです。
1.名前解決
名前解決とは、ドメイン名をIPアドレスに変換するプロセスのことです。コンピュータネットワークでは、IPアドレスを使用して通信する相手を識別します。しかし、IPアドレスは数字の羅列のため、人間にとっては覚えにくく、直接使用することは困難です。そのため、人間が識別しやすい文字列のドメイン名を使用し、それをIPアドレスに変換するプロセスが必要になります。この変換するプロセスが名前解決であり、通信をするうえで重要な役割を担っています。
名前解決が行われている身近な例としてインターネットサイトへのアクセスがあります。インターネットサイト(例:google)にアクセスする際、ドメイン名(例:google.com)を入力すると、IPアドレス(例:172.217.161.46)に変換され、インターネットサイトへアクセスできるようになります。
このようにドメイン名をIPアドレスに変換するプロセスのことを名前解決と呼びます。名前解決を実現する仕組みとしては、DNSやhostsファイルがあります。
2.DNS
DNS(Domain Name System)は名前解決を行うシステムです。WebブラウザでURLを入力するとDNSサーバーがドメイン名をIPアドレスに変換します。その後、そのIPアドレスをもとに、ウェブサーバーへアクセスするための処理が行われます。
ドメイン名はインターネット上で任意のネットワークを特定するための文字列です。ドメイン名は階層構造になっており、ドットで区切られたそれぞれの部分をラベルと呼びます。右からトップレベルドメイン(例:jpやcomなど)、セカンドレベルドメイン(例:coやorなど)といいます。
DNSも階層構造になっており、複数のDNSサーバーをたどることで名前解決が行われます。最上位にはルートDNSサーバーがあり、トップレベルドメインの情報を持つトップレベルドメインサーバーへ接続します。トップレベルドメインサーバーは、セカンドレベルドメインの情報を持つさらに下位のサーバーへ接続します。このようにDNSでは複数のサーバーで、名前解決を行う仕組みになっています。
3.nslookupコマンド
nslookupコマンドはDNSサーバーに問い合わせ、名前解決した結果を表示するコマンドです。
コマンドプロンプトを開きます。今回はgoogle.comのIPアドレスを表示させます。
C:\Users>nslookup google.com
サーバー: \*******\
Address: \*******\
権限のない回答
名前: google.com
Addresses: 2404:6800:4004:80a::200e
172.217.161.46
google.comのIPアドレスが返ってきました。
nslookupコマンドでは、ドメイン名をIPアドレスに変換する正引きに対して、IPアドレスをドメイン名に変換する逆引きも行えます。先ほどのgoogle.comのIPアドレスで試してみます。
C:\Users>nslookup 172.217.161.46
サーバー: \*******\
Address: \*******\
名前: nrt12s23-in-f14.1e100.net
Address: 172.217.161.46
google.comが返ってくることを想定していましたが、nrt12s23-in-f14.1e100.netが返ってきました。調べてみると、逆引きをしても同じドメイン名が返ってくるとは限らないことが分かりました。これは、正引きの際にはAレコードを使用しドメイン名をIPアドレスに変換しているのに対し、逆引きではPTRレコードという別のレコードでIPアドレスをドメイン名に変換しているためでした。今回の例では、PTRレコードでより詳細なホスト名が設定されていることが分かりました。
また、名前解決をするDNSサーバーを指定することもできます。今回はgoogleのパブリックDNSサーバー(8.8.8.8)を指定してみます。
C:\Users>nslookup google.com 8.8.8.8
サーバー: dns.google
Address: 8.8.8.8
権限のない回答:
名前: google.com
Addresses: 2404:6800:4004:80a::200e
172.217.161.46
4.hostsファイル
hostsファイルはDNSより前から使用されていた名前解決の方法です。hostsファイルにはIPアドレスとドメイン名が記載されており、このファイルを参照することにより名前解決が行われます。
hostsファイルはネットワークに接続するコンピューターの台数が少ない時に利用されていましたが、コンピューターの台数が増えるにつれ、hostsファイルだけでの管理は困難になり、分散的に管理するDNSが登場しました。しかし、現在でもhostsファイルは特定のパソコンで動作確認をする時などに使用されており、用途によって使い分けることができます。
Windowsではhostsファイルは以下のパスにあります。
C:\Windows\System32\drivers\etc\hosts
なお、hostsファイルを編集する際には管理者権限が必要です。
5.DNSとhostsファイルの優先順位
名前解決では、一般的にはhostsファイルが優先されます。実際にhostsファイルに情報を加えて優先順位を確認してみます。
hostsファイルに変更を加える前後での動作の違いを確認するため、pingコマンドで、yahoo.co.jpの疎通を確認します。
C:\Users>ping yahoo.co.jp
yahoo.co.jp [182.22.24.124]に ping を送信しています 32 バイトのデータ:
182.22.24.124 からの応答: バイト数 =32 時間 =10ms TTL=49
182.22.24.124 からの応答: バイト数 =32 時間 =11ms TTL=49
182.22.24.124 からの応答: バイト数 =32 時間 =11ms TTL=49
182.22.24.124 からの応答: バイト数 =32 時間 =10ms TTL=49
182.22.24.124 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 10ms、最大 = 11ms、平均 = 10ms
現在は182.22.24.124のIPアドレスにアクセスしていることが分かります。
続いてhostsファイルを編集します。コマンドプロンプトを管理者権限で実行し、以下のコマンドを入力します。
C:\Windows\System32>notepad C:\Windows\System32\drivers\etc\hosts
hostsファイルをメモ帳で開くことができました。
はじめに取得したgoogle.comのIPアドレスとyahoo.co.jpのドメイン名と紐づけます。IPアドレスとドメイン名の間には半角スペースを入れます。
新たに加えた変更を保存し、コマンドプロンプトに移動します。再度pingコマンドを実行し、疎通を確認します。
C:\Users>ping yahoo.co.jp
yahoo.co.jp [172.217.161.46]に ping を送信しています 32 バイトのデータ:
172.217.161.46 からの応答: バイト数 =32 時間 =13ms TTL=110
172.217.161.46 からの応答: バイト数 =32 時間 =10ms TTL=110
172.217.161.46 からの応答: バイト数 =32 時間 =10ms TTL=110
172.217.161.46 からの応答: バイト数 =32 時間 =15ms TTL=110
172.217.161.46 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 10ms、最大 = 15ms、平均 = 12ms
結果を見てみるとyahoo.co.jpは以前のIPアドレス(182.22.24.124)ではなくgoogle.comのIPアドレス(172.217.161.46)にアクセスしていることが分かります。
以上の例により、DNSよりhostsファイルが優先されていることが分かります。
6.Resolve-DnsNameコマンド
hostsに情報を加えたうえで、改めてnslookupコマンドを実行したところ、pingコマンドの挙動とは異なり、以前と同じIPアドレスが返ってきました。
C:\Users>nslookup yahoo.co.jp
サーバー: \*******\
Address: \*******\
権限のない回答:
名前: yahoo.co.jp
Addresses: 183.79.249.124
183.79.249.252
183.79.250.251
124.83.184.124
124.83.184.252
124.83.185.124
124.83.185.252
182.22.16.123
182.22.16.251
182.22.24.124
182.22.24.252
182.22.25.124
182.22.25.252
182.22.28.252
182.22.31.124
182.22.31.252
183.79.219.124
183.79.219.252
これはnslookupコマンドがDNSの情報のみを参照し、hostsファイルに加えた情報は反映されないためでした。
hostsファイルの情報も反映させ、実際の挙動に近い結果を表示させるコマンドを調べると、powershellで使えるResolve-DnsNameというコマンドがありました。Powershellを開き、コマンドを実行してみると、以下のような結果になりました。
PS C:\Users> Resolve-DnsName yahoo.co.jp
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
yahoo.co.jp A 53330 Answer 172.217.161.46
4
このようにResolve-DnsNameコマンドはhostsファイルも参照するため、実際の名前解決とほぼ同じ挙動をしていることが分かります。
この操作を終えた後はhostsファイルの中身を元の状態に戻してください。
まとめ
名前解決とはDNSやhostsファイルを使用し、ドメイン名をIPアドレスに変換するプロセスだと理解していただけたかと思います。今回はインターネットサイトへのアクセスを例に挙げましたが、名前解決はメールの送受信やクラウドサービスへのアクセスなどで幅広く使用されています。今後、ネットワークのトラブルシューティングやドメイン情報の確認の際には、この記事で紹介した基本的な知識や操作をぜひ活用してみてください。
参考