フルスタックエンジニアのノウハウ
2020.10.31    2022.06.12

DNSの基礎

この記事の動画版はこちら(画像クリックでYoutubeに飛びます)

チャンネル登録お願いします!


DNSとは何か?


DNSは「Domain Name System」の略で、インターネット上のドメインを管理するためのシステムです。





ドメインというのは、URLのこの部分のことですね。




URLの詳しい「読み方」については、別の動画で説明していますので、もし興味があればこちらもぜひ学習してみてください。


関連記事

URLの基礎


世界中にはたくさんのコンピューターがあり、それぞれがネットワークにつながっています。




僕らが普段使用しているパソコンも、YouTubeやAmazonなどが稼働しているサーバーコンピューターもインターネットにつながっているため、ブラウザやアプリから遠隔でアクセスすることが出来るわけですね。


各コンピューターには「IPアドレス」という固有の番号が振られており、目的のコンピューターにアクセスするためには、このIPアドレスを指定してアクセスします。




しかし、こんな複雑な番号だと毎回毎回入力する際にも間違えそうだし、覚えておくことも難しいですよね?


たとえ世界中のユーザーがAmazonのアドレスは52.119....だと覚えられたとしても、Amazon側がネットワーク構成を変更したり、サーバーコンピューターを新しいものに入れ替えたりしてIPアドレスが変わってしまうと、もう古いIPアドレスではアクセス出来なくなってしまいます。




これはなかなか不便です。


そのため、もっと簡単にアクセス出来る方法はないか?


ということで考えられた仕組みが「DNS」です。


DNSは、以下のように「人が覚えやすい名前」「IPアドレス」を関連付けることで、もっと簡単にアクセス出来るようにしようという仕組みです。





この「人が覚えやすい名前」が「ドメイン名」ということですね。


ちなみに、厳密にはこの名称は「ホスト名」+「ドメイン名」で「FQDN」という呼び方となりますが、この動画では分かりやすく単に「ドメイン名」と呼びます。



例えば「amazon.co.jp」というドメイン名を「52.119...」というIPアドレスに関連付けることが出来れば、難しいIPアドレスを打ち込まなくても、ブラウザに「amazon.co.jp」と入力するだけでアクセスできるようになります。


また、ネットワーク構成等が変わってサーバーのIPアドレスが変更になったとしても、amazon.co.jpに関連付けられているIPアドレスを新しいアドレスに付け替えるだけで済みます。



DNSの仕組み


これを実現する方法として、最初は「hosts」という仕組みが考えられました。




hostsというテキストファイルに、「ドメイン名」と「IPアドレス」の対応表を記載して、このファイルを各コンピューターに保存しておくことで、アクセスする際にそのファイルを参照してIPアドレスを特定するという方法です。


実は、今でもhosts機能は存在しています。


【Windows】C:\Windows\system32\drivers/etc/hosts
【Mac/Linux】/etc/hosts


ここに「hosts」というファイルが保存されており、これを使うことも可能です。


しかし、この方法だとアクセス先が増えるほどファイルの内容がどんどん肥大化してしまいますし、hostsファイルを世界中の各コンピューターに保存しているのでは、情報が変更された場合に更新がとても大変です。


そもそも世界中のサーバー情報を1つのファイルにまとめるなんて不可能ですね。


そこで、各ドメイン配下の情報は、それぞれのドメインで責任を持って管理してもらい、ユーザーがアクセスする際は、ドメイン名をその管轄ドメインに問い合わせることで、IPアドレスを教えてもらうという方法を考えました。


これを行うのが「DNSサーバー」です。




DNSサーバーは各ドメインに存在し、自分のドメイン配下のサーバーのIPアドレスを管理します。


これを「ゾーン情報」といいます。




そして、DNSの問い合わせを受けると、そのIPアドレスを教えます。


この方法により、ユーザーは全サーバーの情報を持っておかなくて済むようになりました。


ただ、それでも各ドメインの問い合わせ先DNSサーバーの所在は知っている必要があります。


サーバーコンピューターの数ほどじゃないにせよ、ドメイン自体も世界中に数えきれないほどありますので、これも膨大な情報です。



これを解決するため、DNSは階層構造になっており、一番上に「ルート」と呼ばれるサーバーがあり、その下にはドメインを逆にした順番で管理DNSが存在しており、それぞれの配下のサーバー情報を管理しています。




つまり、該当のドメインのDNSサーバーの在処が分からなくても、ルートから順番で問い合わせていくと、辿り着けるという訳ですね。


これで、ユーザーはルートサーバーの情報だけ知っていれば、世界中のどんなドメイン配下のサーバーでも、IPアドレスが分かるようになりました。


僕たちが普段、スマホやパソコンのブラウザで何気なく見ている色々なWebサイトも、裏側ではこんな仕組みでアクセスが行われているんです。


この仕組みを作った人たちに感謝ですね!



開発時はあえてhostsを使うことも


最後に予備知識として、先ほど、hostsはまだ存在しているといいましたが、hostsファイルにドメインとIPアドレスの対応を記述すると、本来のDNSサーバーよりも優先して適用されます。


例えば、本番公開前のWebサービスなどを、自分の開発パソコンからのみアクセスできるようにするといったように、開発時には結構使ったりするので、テクニックとして覚えておきましょう!


おすすめ記事