【ネットワーク】DNSについて!

はじめに

こんにちは、最近GitHubActionsで、自動化の技術に感銘を受けたのですが、自分もガンガン自動化できるノウハウを手に入れたい・・・! と思い、AWSの資格取得をしてみようと考えました。

AWS Developer Assosiateあたり目標にします! 目指せDevOpsエンジニア!です!

ということで、前身となるAWS Cloud Practitionerの資格から勉強を始めてみました。 AWSのコアサービスの一つであるRoute53を勉強する際に、DNSってよく理解していないと思ったのでこちらを理解した内容を記事にまとめることにしました。

と、自動化の勉強をすると言っていて、「DNS」とのことで全然関係ない記事を書くわけですが、寄り道しながらもスキルアップを図っていこうと思います!

ドメインについて

概要

ドメイン(Domain)とは、インターネット上での住所を示すものです。 例えば、ブラウザを立ち上げて

https://www.google.com

と入力すると、googleの検索フォームが表示され、検索機能を使用することができます。

この"google.com"にあたる部分をドメインと呼び、この住所に該当する情報を受け取ることができます。

IPアドレスとの関連

本来、インターネット上の住所というと、このIPアドレスが該当します。 このIPアドレスは以下のように、1-255までの数字を4つ組み合わせた数字を用いて使用します。

172.217.175.110

先ほどブラウザではIPアドレスを入力することでも同様に情報を取得できます。 しかし、上記のように数字で表現すことでアドレスを理解しづらいという問題があり、ドメインという概念が登場しました。

本ブログでもドメイン名がありますが、ここがIPアドレスで表示されていたら、正しくそのサイトにアクセスできているのか?怪しいサイトにアクセスしているんじゃないのか?不安になりますよね。

※もちろんドメインが表示されていても、それが必ずしも安全なサイトであるかは限らないわけですが!

DNSサーバーについて

概要

DNS(Domain Name System)サーバーとは、ドメイン名とIPアドレスを対応ずける仕組みを提供するサーバーです。

DNSサーバーの種類

名称 役割 補足
DNSルートサーバー DNSキャッシュサーバーが最初に問い合わせするサーバー。最上位となるドメインIPアドレスを返却する。 全世界に13しか存在しない!
DNS権威サーバー DNSキャッシュサーバーから、リクエストとして受け取ったドメインに紐づくIPアドレスを返却する。
DNSキャッシュサーバー クライアントPCからの問い合わせに対して、権威DNSサーバーにリクエスト(ドメイン)を送る。
DNS権威サーバーから応答として受けたIPアドレスをクライアントPCに返却する

仕組み

以下の図では、"drum.co.jp"にアクセスする様子を示しています。

まずクライアントのPCは、キャッシュサーバーに対して"drum.co.jp"のIPアドレスを教えてもらうよう問い合わせをします(1.)。

通知を受けたキャッシュサーバーは、ルートサーバに対して問い合わを行います(2.)。

ルートサーバーでは"jp"の権威DNSサーバーのIPアドレスのみを知っているため、キャッシュサーバーはこのIPアドレスを受け取ります。

この時点で"drum.co.jp"のIPアドレスはわからなく、"jp"サーバー、"co.jp"サーバーのように権威DNSサーバーは階層構造となっているので、キャッシュサーバーは最下位のドメインを取得するまで権威DNSサーバーに問い合わせを続けます

最終的に"drum.co.jp"のIPアドレスを取得することができたら、もともと問い合わせを受けていたクライアントのPCにIPアドレスを返却します(8.)。

このIPアドレスを用いて、クライアントでは"drum.co.jp"のドメインのサーバーにアクセスすることができます(9.)。

f:id:avicenxz:20210606161655p:plain

補足

このように複数のDNS権威サーバーを使用してIPアドレスを管理している理由の一つに「負荷分散」があります。 この記事では特に触れませんが、元々は一つのサーバが"HOSTS"というファイルを用いてドメイン名とIPアドレスの対応付けを行っていました。

インターネットに接続したい人はこのHOSTSファイルを自身のPCにダウンロードすることで、ドメイン名を使用したインターネット接続を行っていました

しかし、一つのサーバで管理するのが大変になったため、このように複数のDNSサーバを用いて管理するようになったそうです。

ちなみにですが、このHOSTSファイルはLinuxMacなどだと/etc/hostsに、windowsだとC:\Windows\System32\drivers\etcに格納されています。

自分のPCには数行しか記載されてないですが、DNSの概念がないとこのHOSTSファイルにびっしりと通信先のサーバーのIPアドレスが記載されていたのかな?と思います。 管理が非常に大変そうですね・・・(小並感)。

最後に

今回は、DNSの最低限の仕組みを記述しました。

せっかくですので、今度はRoute53で実際に構築したDNSのルーティングをコマンドなど含めて紹介してみようと思います!