DNSとドメインとネットワークの仕組みを簡単に説明してみる
DNSの仕組みは簡単そうで非常に難しい概念です。
でもサイトを立ち上げてドメイン設定してサイトを見られるようにしようとすると絶対に避けては通れない仕組みですので簡単な仕組みは理解しておいた方が何かと良いです。
目次
DNSの基本的な役割
コンピュータはIPアドレスで通信しています。
IPアドレスっていうのは123.45.67.89みたいな数字の羅列です。
各コンピュータやルータ、プリンタ、スマートフォンなど、基本的に全てのデバイスにはIPアドレスが割り当てられていて、お互いに通信する際はこのIPアドレスに向けてリクエストを送ったり通信を確立したりするわけです。
インターネット上の通信も同じで、ウェブサイトを見るとかチャットするとかメール受信するとかも全て端末とサーバのIPアドレスの通信によって行われています。
例えばYahoo!のサイトを閲覧しようとした時はYahoo!のIPアドレスに対してリクエストを送っています。
でも、このIPアドレスって不規則な数字の羅列だったりするので、人間にとっては非常に覚えにくいのです。
そこで登場するのがドメインです。
○○.comとか○○.jpとか。
Yahoo!ならwww.yahoo.co.jpですね。
DNSはこの「ドメイン」と「IPアドレス」紐付けるのが主な仕事です。
先ほど説明した通り、ネットでサイトを見るという行動もIPアドレスで通信をしてるので、IPアドレスをブラウザに打ち込んでサイトを表示することも可能です。
例えば、Yahoo!の場合IPアドレスが182.22.24.252ですので、ブラウザで http://182.22.24.252/ と打ち込んでもらえればYahoo!の画面が出ると思います。(通常のアクセスではないのでエラー画面が出ますが)
実際の運用では目的に応じてサーバを分けることもあるので、DNSがそれぞれのサーバを教えてくれたりします。
例えば、メールサーバとウェブサーバなんかがそれです。
entershare.jpというドメインを使用していて、ウェブサイトはレンタルサーバーを使いたいけど、メールはGmailを使いたいみたいケースですね。
また、同じウェブサーバでもサブドメインは別のサーバを利用する場合などもDNSの設定で行います。
例えば、
www.entershare.jp → 11.11.11.11のサーバを使う
shop.entershare.jp → 11.11.11.22のサーバを使う
DNSがドメインからIPアドレスを教えてくれることを名前解決と言います。
ちなみに、ドメインからIPアドレスを名前解決することを正引と言います。
www.entershare.jp → 11.11.11.11 これは正引
一方、IPからドメインの名前解決をすることを逆引きと言います。
11.11.11.11 → www.entershare.jp これは逆引き
昔のインターネットはDNSが必要ないくらい小さかった
コンピュータ同士の通信はIPアドレスによって行われるというのは先程説明したとおりですが、昔はネット上のホスト(サーバ)のリストを自分のPCに保存してそのリストを元に通信してわけです。
今でこそ何十億のサイトがインターネット上に存在しますが、最初は数えるほどのIPアドレスしかなかったので、ネット上のホストは全て1つのファイルで管理されていました。
それがhosts.txtです。
インターネット上に新しいホストが出てきたら、hosts.txtを管理している団体(SRI-NIC)がファイルをアップデートして公開、ユーザーはこのファイルをダウンロードして使っていたわけです。
インターネット上のサイトが数える程度しかなかった時代って今では想像もつきませんよねー(´・ω・`)
(この辺の話は僕が産まれるより前の話なので詳しくはwikipedia的なところで調べて下さいね)
今でもみんなが使ってるPCにこのファイルの名残のようなファイルが存在して、
Macユーザの方は
/etc/hosts に
Windows10の場合
C:\Windows\System32\drivers\etc\hosts に
ファイルがあります。
このファイルにIPアドレスとドメインを記入してやればDNSで名前解決せず強制的にドメインとIPアドレスを紐付けることができます。
例えばwww.yahoo.co.jpドメインとGoogleのIPアドレス(172.217.25.99)を紐付ける場合
172.217.25.99 www.yahoo.co.jp
のように記入します。
この状態でwww.yahoo.co.jpにアクセスしてみると、なぜかGoogleの画面が表示されます。
開発者は公開前のサイトのテストや、サイトのリニューアルの際に擬似的にドメインを割り当てて、開発用のサーバにIPアドレスをセットすることがよくあります。
是非覚えておきましょう。
DNSが解決した問題
IPアドレスとドメインを自分のパソコンのhosts.txtファイルに書き込んでたインターネット黎明期ですが、当然インターネットが普及してくるに従って、hosts.txtファイルが膨大になってきたり、最新のhosts.txtをダウンロードするユーザーも増えてきたりで、限界がきます。
そこで登場するのがDNSです。
DNSは、DNSサーバに問い合わせすると、IPアドレスを返してくれる簡単な仕組みですが、ドメイン数が多くなると一つのサーバに問い合わせが来すぎてまた限界がきます。
そんなわけで、DNSはピラミッドのような階層構造をして、自分が名前解決する範囲を限定して分散していたりします。
例えば、www.entershare.jpというドメインの場合
- ルートにjpを管理しているDNSを問い合わせます。
- jpを管理しているDNSにjp以下のDNSを問い合わせます。
- jpはentershareを知っているので次に、entershareがentershare以下の名前解決をします。
- entershareはwwwを知っているのでこれで初めて、www.entershare.jpのIPアドレスを知ることができます。
jpの手前に実はドットがあり、これがルートで、厳密には www.entershare.jp. となります。
ついでに、jpとかcomなどはトップレベルドメイン (TLD) と呼ばれます。
余談ですが、トップレベルドメインは特定の国とか組織が管理しているので、その国の情勢が怪しいとDNSに影響が出る可能性もあります。
最近だと、ioドメインを使用している、mackerel.ioはドメイン不調のせいでサービス運用支障が出ました。
ちゃんとサービス運用しようとしたら.so(ソマリア)などのドメインは国際情勢上結構リスキーだったりします。
DNSとセキュリティ上の話
一部のウイルスやその他のマルウェアプログラムは、既定のDNSサーバーを悪意のある組織やクラッカーが実行するDNSサーバに変更する可能性があります。
インターネットサービスプロバイダの正当なDNSサーバーを使用してyahoo.co.jpに接続すると、DNSサーバはYahooのサーバーの実際のIPアドレスで応答しますが、もし、コンピュータまたはネットワークがクラッカーによって設定された悪意のあるDNSサーバを指している場合、悪意のあるDNSサーバは完全に異なるIPアドレスで応答する可能性があります。
ブラウザのアドレスバーに「yahoo.co.jp」が表示されている可能性がありますが、実際のyahoo.co.jpではない可能性があります。
まさにこんな感じですね。
この問題を回避するには、ウイルス対策ソフトウェアとマルウェア対策ソフトウェアを実行していることが大事です。Windowsユーザーなら特に。。
また、暗号化された(HTTPS)Webサイトの証明書エラーメッセージが出れば注意する必要があります。
たとえば、銀行のウェブサイトに接続して「無効な証明書」メッセージが表示される場合は、偽のウェブサイトを指し示す悪意のあるDNSサーバーを使用しているという兆候である可能性があります。
マルウェアは、コンピュータのホストファイルを使用してDNSサーバーを上書きし、特定のドメイン名(Webサイト)を他のIPアドレスで指定することもできます。
このため、 Windows 8とWindows 10では、デフォルトでhostsファイルが監視されfacebook.comやその他の一般的なドメイン名を異なるIPアドレスに設定することはできません。
このあたりの話はまた別の機会に(*_*)
サードパーティのDNSサーバーを使用する理由
普通にWiFiなどのネットワークにつないで、インターネットに接続するとインターネットサービスプロバイダーのDNSサーバを使うことが多いかもしれませんが、セキュリティの理由などでサードパーティのDNSを使うことも可能です。
最も人気のある第三者DNSサーバの2つは、 OpenDNS と Google Public DNSです。
場合によっては、これらのDNSサーバーがより高速なDNS解決を提供する場合があります。
これは、初めてドメインに接続するときに接続を高速化します。ただし、表示される実際の速度の差は、サードパーティDNSサーバーからの距離やISPのDNSサーバーの速度によって異なります。
ISPのDNSサーバーが高速で、OpenDNSまたはGoogle DNSサーバーから離れていると、ISPのDNSサーバーを使用する場合よりもDNS解決が遅くなることがあります。
OpenDNSはオプションのウェブサイトフィルタリングも提供しています。
たとえば、フィルタリングを有効にすると、ネットワークからポルノWebサイトにアクセスすると、ポルノWebサイトではなく「ブロックされた」ページが表示されたりします。OpenDNSはポルノWebサイトのIPアドレスの代わりに「ブロックされた」メッセージを持つWebサイトのIPアドレスを返すわけです。危険なサイトにアクセスできないって意味では非常に便利だったりします。
自分でDNSサーバを構築すべきか?
www.entershare.jpの場合、自分はルートでもTLDでもないのでjpドメインの設定はできませんが、
entershare以下のサブドメインやentershareのメールサーバの指定などは自力でDNSサーバを立ち上げればできなくないです。
しかし、DNSサーバの構築は大変めんどくさいし、自力で立ち上げたサーバが落ちたら名前解決できなくなるので、リスクもデカイです。お勉強以外で自力でDNSサーバを立ち上げることはおすすめしません。
幸いなことに、DNSの設定が簡単にできるようにドメイン管理会社がDNSサーバを提供していたりします。
どちらもGMO系で最大手ですしムームードメインの場合、初心者でも簡単にDNS設定ができるムームーDNSが提供されています。お名前.comの場合レンタルDNSが提供されています。
もしくはAWSのRoute53なんかも大変使いやすいDNSを提供していますが、上記に比べると割高なので、小さい規模ではおすすめできないです。
まとめ
DNSは簡単そうで非常に複雑です。ざっくり解説なので、間違っているところあれば指摘下さい(*_*)
細かい仕組みを知りたい方は自力でプロトコルの仕様書などを読んで見ると良いかと思います。
最新記事 by まなびん (全て見る)
- 日本最大級セミナーのポータルサイトの開発に関わらせて頂いています - 2019年10月24日
- エンジニアとして求人応募する際に意識してほしいこと - 2019年10月23日
- 受託が忙しく自社サービス開発できないので開発メンバー募集! - 2019年1月28日