DNSとは
webサイトはIPアドレスというインターネット上の住所をもっており、私たちがサイトにアクセスする際はこのIPアドレスを指定することでサイトを閲覧することができます。しかし、このIPアドレスは数桁の数字であり、あらゆるサイトのIPアドレスを記憶することは困難です。そこでIPアドレスにドメイン名という文字列を紐づけ、私たちはそのドメイン名さえ特定できていればサイトにアクセスすることができるといった仕組みが生まれ、その仕組みのことをDNS(Domain Name System)といいます。
▼(ちなみに)IPアドレスの調べ方
ターミナル上でnslookupコマンドを叩くと、ドメイン名に対応するIPアドレスを取得できます。
> nslookup google.com
Server: 240d:2:7524:df00:5a52:8aff:fee2:8b38
Address: 240d:2:7524:df00:5a52:8aff:fee2:8b38#53
Non-authoritative answer:
Name: google.com
Address: 142.250.196.110
Webサイトへアクセスできる仕組み
ドメイン名が名前解決(ドメイン名→IPアドレスへの変換)をされて、Webサイトへアクセスできる仕組みは以下のイメージです。
- 1, 見たいサイトのドメイン名(hoge.co.jp)を入力
- 2, DNSサーバーがそのドメイン名に紐づけられたIPアドレス返してくれる
- 3, 渡されたIPアドレスをもとに、webサーバーへアクセス
- 4, webサーバーはサイトを返す
- 5, ブラウザでサイトがみれる🎉
DNSサーバーでドメイン名からIPアドレスを取得するまでの流れはこの後紹介します。
ドメイン名前空間
ドメインの情報は階層構造で管理されおり、各階層にDNSサーバーが存在します。
図の例でいうと、まず一番上にルートが存在しており、その下にjp,comなどのトップレベルドメインと呼ばれるものが存在しており、その下の階層にはco, googleなどのセカンドレベルドメイン、さらにその下のhoge, yahooなどのサードレベルドメインが存在します。各ノードにはDNSサーバーがあり、親は子のドメインを管理しています。この構造を踏まえて、先ほどのhoge.co.jpにアクセスした際のDNSサーバーの流れを見ていきます。
DNSサーバーの仕組み
- 1, サイトのリクエストが送られると、まずDNSキャッシュサーバーにいく
(DNSキャッシュサーバとは、DNSサーバへの問い合わせをユーザーの代理で行い、結果を返答する役割を担うサーバーです。) - 2, DNSキャッシュサーバーからルートのDNSサーバーに問い合わせをする
- 3, ルートのDNSサーバーは.jpのDNSサーバーに問い合わせるよう返答
- 4, .jpのDNSサーバーは.co.jpのDNSサーバーに問い合わせるよう返答
- 5, .co.jpのDNSサーバーはhoge.co.jpのDNSサーバーに問い合わせるよう返答
- 6, hoge.co.jpのDNSサーバーがIPアドレスを返答
レコードとゾーンファイル
DNSサーバーはドメイン名とIPアドレスなどのデータを管理しており、その対応表を「ゾーンファイル」と呼び、その1行1行を「DNSレコード」と呼びます。簡単にですが、DNSレコードの紹介をします。
Aレコード
ドメイン名とIPアドレス(IPv4)を関連づけるレコード。
例) hoge.co.jp 3600 IN A xxx.aaa.bbb.ccc
IPアドレスがIPv6の場合はAAAAレコードとなる。
3600はTTL(Time To Live)といい、3600秒キャッシュを有効にすることができる。
その間はDNSサーバーと通信することなくサイトにアクセスできる。
CNAMEレコード
ホスト名に対する別名を定義するレコード。
特定のホスト名を別のドメイン名に転送する時などに利用する。
例) hoge.example.co.jp. IN CNAME hoge.co.jp.
NSレコード
webサーバーやメールサーバーなどのゾーンを管理するDNSサーバーを定義するレコード。
例) hoge.co.jp. IN NS ns1.hoge.co.jp.
hoge.co.jpはns1.hoge.co.jpというDNSサーバーに問い合わせをしてくださいという意味になる。
ゾーン分割を行なってサブドメインに権限委譲する場合は、そのDNSサーバーを指定するときにも使われる。
MXレコード
対象ドメイン宛のメールの配送先(メールサーバ)のホスト名を定義するレコード。
独自ドメインのメールを使用する際は必要なレコード。
例) foo.jp. IN MX 10 mail.foo.jp.
ドメイン名foo.jpに来たメールは、メールサーバーのmail.foo.jpに届けてくださいという意味になる。
TXTレコード
ドメインに関連したテキスト情報を自由に定義できるレコード。
仕様上は特定の用途や書式は定められておらず、任意の文字列を設定できる。
例) hoge.co.jp. IN TXT "v=spf1 ip4:198.51.100.1 ~all"
送信ドメイン認証情報(SPFレコード)として利用している例で、198.51.100.1から送られたメールは正しいメールであるという意味になる。
おわりに
学習したてで誤りがあるかもしれませんがご了承くださいませ。
随時更新、修正は行なってまいります。