1. 概要

ウォールストリートのノアやペンシルベニアアベニューのエルザと同じように、マシンにもネットワーク用の名前とアドレスがあります。 これらのアドレスは常に数値であり、人間が解読するには謎めいたものになります。 これにより、DNSマッピングの概念への道が開かれました。

このチュートリアルでは、DNSのルックアップ、構成、および優先順位付けについて詳しく説明します。

それでは、その核心に迫りましょう。

2. DNSルックアップ

DNSは、インターネットアドレスの電話帳であるドメインネームシステムの略です。 名前が示すように、電話番号のマッピングと同様に、DNSサーバーの名前はIPアドレスにマップされています。 DNSプロセスは、マシンがユーザーフレンドリーなホスト名(www.baeldung.com)をコンピューターフレンドリーなIPアドレス(104.26.12.74)に変換するのに役立ちます。

ping コマンドを使用して、上記の説明を検証できます。

server# ping -c 1 www.baeldung.com
PING www.baeldung.com (104.26.12.74) 56(84) bytes of data.
64 bytes from 104.26.12.74 (104.26.12.74): icmp_seq=1 ttl=58 time=47.3 ms  

--- www.baeldung.com ping statistics ---

1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 47.318/47.318/47.318/0.000 ms

通常、www.baeldung.comと入力すると、コンピューターはそれを有効なIPアドレスに変換してさらに通信し、ローカルマシンに構成されているパブリックまたはプライベートDNSサーバーと通信します。

この例では、デモンストレーションのために、GooglePublicDNSサーバーを構成します。 8.8.8.8(dns.google.domain)。 次に、tcpdumpコマンドを使用してバイトレベルの分析を行います。

server# sudo tcpdump -i enp0s8
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
19:26:43.509890 IP REMOTE-SERVER.57760
  > dns.google.domain: 63513+ [1au] A? www.baeldung.com. (45)
19:26:43.511320 IP REMOTE-SERVER.47910
  > dns.google.domain: 13515+ [1au] PTR? 8.8.8.8.in-addr.arpa. (49)
19:26:43.511368 IP REMOTE-SERVER.57760
  > dns.google.domain: 33324+ [1au] AAAA? www.baeldung.com. (45)
19:26:43.525408 IP dns.google.domain
  > REMOTE-SERVER.47910: 13515 1/0/1 PTR dns.google. (73)
19:26:43.555246 IP dns.google.domain
  > REMOTE-SERVER.57760: 63513 3/0/1 A 104.26.13.74, A 172.67.72.45, A 104.26.12.74 (93)
19:26:43.559284 IP dns.google.domain
  > REMOTE-SERVER.57760: 33324 3/0/1 AAAA 2606:4700:20::ac43:482d, AAAA 2606:4700:20::681a:c4a, AAAA 2606:4700:20::681a:d4a (129)
19:26:43.560398 IP REMOTE-SERVER
  > 104.26.13.74: ICMP echo request, id 1910, seq 1, length 64
19:26:43.594618 IP 104.26.13.74
  > REMOTE-SERVER: ICMP echo reply, id 1910, seq 1, length 64

まず、システムはデフォルトポート53を介して構成済みのDNSサーバーと通信し、AおよびAAAAレコードを取得します。 これらは、www.baeldung.comでマッピングされたIPv4およびIPv6アドレスを返すアドレスマッピングレコードです。

デュアルスタック構成の場合、パフォーマンスが向上するため、IPv4よりもIPv6インターフェイスが優先されます。

この図では、1行目と3行目はAレコードとAAAAレコードのDNS要求であり、5行目と6行目はIPV4アドレスとIPv6アドレスを使用したDNSホスト応答です。 ここで、PTRレコードは逆解決であり、IPアドレスはドメイン名に解決されます。

最後に、最後の2行に示すように、システムはDNSで解決されたIPアドレスへのICMPエコー要求を開始し、リモートマシンから後続の応答を取得します。

さらに、digコマンドを使用してIPv4/IPv6マッピングレコードを取得することもできます。 前のセクションで説明したように、レコードはIPv4アドレスを提供しますが、AAAAレコードはIPv6アドレスに解決されます。 + short オプションは、詳細な掘り出し出力の回答セクションのみを紹介するのに役立ちます。

server# dig A +short www.baeldung.com
104.26.13.74
...

server# dig AAAA +short www.baeldung.com
2606:4700:20::681a:c4a
...

一方、 host コマンドは、ドメインからIPアドレスへのマッピング情報も提供します。

server# host www.baeldung.com
www.baeldung.com has address 104.26.12.74
...

www.baeldung.com has IPv6 address 2606:4700:20::681a:d4a
...

3. DNS構成

通常、DNSサーバー情報はLinuxシステムの/etc/resolv.confで定義されます。 これには、nameserverタグを使用したDNSサーバーのIPアドレスが含まれています。この場合、新しい行ごとに複数のDNSサーバーを配置できます。

ファイル内のネームサーバーの順序によって優先順位が定義されます。 構文は、IPv4とIPv6の両方のネームサーバーで同じです。

server# grep "nameserver" /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

または、Linuxシステムに / etc / hosts ファイルがあり、システム内でローカルにホスト名からIPアドレスへのマッピングを行います。 これ以上面倒なことはせずに、 / etc /hostsファイルを見てみましょう。

server# more /etc/hosts
127.0.0.1       localhost
127.0.1.1       REMOTE-SERVER
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
...

次に、www.baeldung.comをループバックIPアドレスにマップする行を追加して、ping応答で何が起こるかを確認します。

server# grep "baeldung" /etc/hosts
192.168.56.103  www.baeldung.com

server# ping -c 1 www.baeldung.com
PING www.baeldung.com (192.168.56.103) 56(84) bytes of data.
64 bytes from www.baeldung.com (192.168.56.103): icmp_seq=1 ttl=64 time=0.163 ms

--- www.baeldung.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.163/0.163/0.163/0.000 ms

興味深いことに、 ping コマンドは、実際のパブリックIPアドレスではなくループバックに解決されます。 それはすべて、リゾルバーを参照する際のシステムの優先順位に要約されます。 /etc/resolv.confファイルと比較すると、/ etc/hostsファイルの実行優先度が高くなっています。

以下に示すように、/etc/nsswitch.confでこれらを定義および確認できます。

server# cat /etc/nsswitch.conf | grep "hosts"
hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

4. 結論

この記事では、ホスト名を解決するためのDNSルックアップの詳細なバイトレベルのワークフローを引用しました。 DNSアドレスマッピングレコードは、hostまたはdigコマンドを使用してすばやく抽出できます。 さらに、 hosts ファイルと、nsswitchを使用してルックアップに優先順位を付ける方法についても説明しました。