超入門 DNSサーバーの役割・インターネットが繋がる仕組み

NSレコードって何でしょう?
ドメインとIPアドレスの関係って?

解ってるようで本当のところはどうなのかな?

などなどと疑問があると
サーバー構築がぼや~っとしちゃいます

ここでは、インターネットが繋がる仕組みを理解しながら
DNSサーバーの役割について、おさらいしていきたいと思います

そもそも、インターネットが繋がる仕組みとは

本来、コンピューター同士の通信はIPアドレスで行います
IPv4(xxx.xxx.xxx.xxx)では32桁の2進数

2進数の8桁の集まりを”.”で区切り
それを4組でIPv4としています

2進数の8桁 は”00000000″ ~ ”11111111″
コンピューターの言葉である2進数(on/off)は人間にとって
非常に理解しにくいので、これを10進数に変換し ”0″ ~ ”255″ としてます

そのため 192.168.1.1 などと言う表記になります・

2進数の 8桁 × 4 → 2 ^ 32 → 約43億

つまり、IPアドレスで通信を行おうとするコンピューターは
約43億通りあることが解ります

これをいちいち数字の羅列で特定のコンピューターへ通信するのは大変だ
と言うことで、これを人間が理解しやすい文字列に変換するようになりました

例えば、googleのwebページを開くとき
http://google.co.jp と入力しますが
本来のやり方 =ipアドレスで開いてみましょう

Linuxコンソールから

# dig google.co.jp

;;ANSWER SECTION … 216.58.221.3

DNSサーバーに問い合わせをして
google.co.jpのアドレスが返ってきました

これをブラウザでhttp://216.58.221.3/とするより
http://www.google.co.jp/とした方が便利です

このようにホスト名(ドメイン)をIPアドレスに変換(名前解決)する役目が
DNSサーバーとなります

DNSサーバーはクライアントから名前解決の問い合わせを受けると
それに対応するIPアドレスを返答します

インターネットがあまりに巨大なネットワークとなった現在
1台のDNSサーバーでは全ての名前解決するレコードを持つのは不可能となりました

そのため、複数のDNSサーバーを使って名前解決を行っています

各々のDNSサーバーには受け持つ範囲が決められていて
この範囲を「ゾーン」と言います

DNSサーバーは階層構造で連携しています

クライアントPCから ”www.google.co.jp” でDNSサーバーへ問い合わせします

例えば、あるDNSサーバーは「jp」のドメインを受け持っています
これを 仮に DNS1としましょう

また別のDNSサーバーは「co.jp」のドメインを受け持つとします
これを 仮に DNS2とします

さらに 「google.co.jp」のドメインを受け持つDNSサーバーを
仮に DNS3とします

さて、ここでクライアントPCが例えば DNS4と言うDNSサーバーへ
 「www.google.co.jp」の問い合わせをします

しかし、DNS4は「www.google.co.jp」のIPアドレスを持っていません
そこでDNS4はgoogle.co.jpのDNSサーバーであるDNS3へ問い合わせしたいのですが
あいにくDNS3のIPアドレスも持っていません

そのため、DNS4は自分がIPアドレスを持っていないドメインの問い合わせを受けると
「ルートサーバー」と言うDNSサーバーに
「jp」を管理するDNSサーバーのIPアドレスを問い合わせます

するとルートサーバーから「jp」を管理するDNSサーバー = DNS1のIPアドレスが返ってきます

DNS4はDNS1に対し「co.jp」を受け持つDNS2のIPアドレスを問い合わせます

するとDNS2のIPアドレスが判明するので、
DNS4はDNS2に、DNS3のIPアドレスを問い合わせます

判明したDNS3のIPアドレスを使って、
DNS3に「google.co.jp」のIPアドレスを問い合わせます

DNS4はこうして判明したIPアドレスをクライアントに返します

このような仕組みで各DNSサーバーは名前解決を行っています

DNSサーバーは名前解決専用のデーターベースとも言えます

個々ホストのIPアドレスや下部ドメインのDNSサーバーIPアドレスなど
様々な情報を管理しています

これら情報はレコードと呼ばれており、
DNSサーバーにも様々なレコードが存在します。

この様々なレコードの事を リソースレコードタイプ(RRタイプ)と呼んでます

RRタイプ
NSレコード ドメインを管理するサーバーを指定する
(Name Server)

MXレコード ドメイン内のメールサーバーを指定するレコード
(Mail eXcanger)

Aレコード ドメイン内ホストのIPアドレスを記述するレコード
(Address) 正引きにはAレコードが参照される

CNAMEレコード あるホストの持つ正規名(Canonical Name)を表す
(Canonical Name) CNAMEレコードを用いて、1つのホストに複数のFQDNを割り当てる事が出来る

PTRレコード ドメイン内ホストのFQDNを記述するレコード
(PoinTeR) 逆引きにはPTRレコードが参照される

と ここまで、名前からIPアドレスの引き方を説明してきました
これを通常 正引きと言います

逆に IPアドレスから FQDNを引くのを逆引きと呼んでます

実際にドメインを取得しても、
DNSサーバーに対してIPアドレス情報を入力しないと
そのドメインからはアクセスできません

このドメインはこのIPアドレスですよ と言う事を
適切なRRタイプと共にDNSサーバーに登録しなければなりません

また、アドレスを入力しても、
反映するのに少し時間がかかります

DNSサーバーは一度アクセスが成功するとその情報をキャッシュし
次にアクセスが来た時に、キャッシュレコードを使って返答するようになります

最初、時間がかかっていたアクセスが
次第にすぐにアクセス出来るようになるのはこの仕組みのおかげです

ここまで理解できるとDNSサーバーの設定も
そんなに難しくはないのでしょうか

DNSサーバーが理解できれば
サーバー構築もイメージ強く出来るもんですよね