DNSの役割
DNSとはDomain Name Systemの略で、その主な役割は、インターネット上の住所であるIPアドレスと人間が覚えやすい為の「名前」であるドメインを紐づけする(名前解決)為のシステムです。
弊社で制作したWebサイトを公開する時、独自ドメインを利用することがほとんどです。ブラウザのアドレスバーに、独自ドメインから始まるURLを入力するとお客様のWebサイトが表示されます。
これは、DNSがドメイン→IPアドレスに変換してサーバーの場所を特定して通信を行っています。
DNSの構造
DNSは分散型データベースです。また、その構造はルートサーバーを頂点とした階層構造になっています。ドメインに対する情報を1つのサーバーで管理しているのではなく、世界中のDNSサーバーに分散して情報を管理しています。
DNSが登場する以前は
インターネットの前身であったARPANETでは、ホスト名とIPアドレスの対応表として、HOSTS.TXTというテキストファイルを使っていました。HOSTS.TXTのマスターファイルはIPアドレスの国際割り当て機関であった米国のSRI-NICにより管理され、FTPで公開されていました。
新たにARPANETに接続する組織は最新のHOSTS.TXTをSRI-NICから入手してました。しかし1980年代にはすでにこの方法は限界が来ていました。HOSTS.TXTの肥大化とHOSTS.TXTファイルの更新頻度の増大でSRI-NICの負担が増大し、マスターファイルを集中管理するSRI-NICサーバーの負荷も増大していました。そこで開発されたのがDNSです。
2つの種類のDNSサーバー
DNSサーバーには、大きく分けて2つの種類があります。ドメインとIPアドレスの対応表を持ったサーバーを権威DNSサーバー。名前解決の際に得た情報をキャッシュするキャッシュDNSサーバーです。
権威DNSサーバー
権威DNSサーバーは、上記「各組織のDNSサーバー」にあたる階層化されたDNSサーバーです。ドメインに対する情報を管理しています。キャッシュDNSサーバーからの問い合わせに対して応答するサーバーとなります。
お客様がWebサイトやメールの為に取得したドメインの情報は、この権威サーバーに登録して管理されています。
キャッシュDNSサーバー
個々のユーザー(PCなど)からの名前解決の問い合わせに対しての応答を行う為のDNSサーバーです。問い合わせされたドメインの情報を権威サーバーに問い合わせして、情報を伝達する役割です。また過去に既に問い合わせのあった情報は、DNSキャッシュ(保存された情報)として保存されているので、権威サーバーに再度問い合わせ(再帰問い合わせ)をせず、保存されている情報を回答します。
普段、お客様がインターネットを閲覧する際には、必ず名前解決が必要ですがその情報を得る為に問い合わせしているDNSサーバーは、このキャッシュDNSサーバーです。
DNSへの問い合わせの流れ
もしあなたがsample.co.jpへアクセスする場合は、以下の様な流れでDNSサーバーが利用されます。
問い合わせしたDNSがsample.co.jpの情報を持っている
- ユーザーがsample.co.jpへアクセスする場合は、先ずPCやルーターが指定しているDNSサーバーに問い合わせを行います。このDNSサーバーは、通常プロバイダが用意しているDNSサーバーです。
- もしこのDNSサーバーがsample.co.jpの情報をキャッシュしている場合は、その情報を返します。このサーバーが情報を持っていなくても他のDNSサーバーが情報を持っている場合は、その情報が返されます。
- ユーザーのPCには、sample.co.jpの場所が回答されて、そのIPアドレスを元にアクセスされます。
問い合わせしたDNSがsample.co.jpの情報を持っていない
- ユーザーがsample.co.jpへアクセスする場合は、先ずPCやルーターが指定しているDNSサーバーに問い合わせを行います。このDNSサーバーは、通常プロバイダが用意しているDNSサーバーです。
- キャッシュDNSサーバーが情報を持っていない場合は、ルートサーバーと呼ばれる最上位の権威DNSサーバーに問い合わせします。しかし、sample.co.jpの情報は管理していないので名前解決はできませんが、.JPを管理しているDNSサーバーの情報は知っているので、問い合わせ元のキャッシュDNSサーバーに対し.JPのDNSサーバー情報を渡します。
- 問い合わせ元のキャッシュDNSサーバーはルートサーバーから教えられた.JPのDNSサーバーにsample.co.jpの問い合わせをしますが、sample.co.jpの情報は管理していないので名前解決はできませんがsample.co.jpの情報を管理しているDNSサーバーの情報は知っているので、問い合わせ元のキャッシュDNSサーバーに対しsample.co.jpを登録したDNSサーバーの情報を渡します。
- 問い合わせ元のキャッシュDNSサーバーに対し、.JPのDNSサーバーから教えられたsample.co.jpを登録したDNSサーバーへsample.co.jpの情報を問い合わせます。このDNSサーバーはsample.co.jpの情報を知っているので、問い合わせ元のキャッシュDNSサーバーにsample.co.jpの情報を渡します。
- 問い合わせ元のキャッシュDNSサーバーは、sample.co.jpを登録したDNSサーバーから教えられたsample.co.jpの情報を要求元のユーザーPCヘ回答します。
- ユーザーのPCには、sample.co.jpの場所が回答されて、そのIPアドレスを元にアクセスされます。
DNS情報の書き換えとキャッシュ
問い合わせに対して、キャッシュDNSサーバーが既に持っている情報を回答していますが、ドメインのDNS情報を変更した際にキャッシュが古いままだと、古い情報を回答してしまいます。これを防ぐ為に、キャッシュは定期的に更新される仕組みです。
更新の間隔は、DNS情報にTTLという数値を設定できます。例えばTTLを86400とした場合、86400秒=24時間ですので、24時間毎に情報を破棄されます。再度問い合わせがあった場合は、上位のキャッシュDNSサーバーに問い合わせするか、権威サーバーに対して再度問い合わせして情報を取得するので、新しい情報が得られるという仕組みです。TTLの最小値は30秒ですが、情報を変更した直後を除いて適切ではありません。
これはあまり短くすると、次の様なデメリットがあります。
TTLを短くすることのデメリット
-
- サイトへのアクセスが遅くなる
- TTLが短いと情報が即座に破棄されてしまう為、何度も再帰問い合わせが発生してしまいます。その為、いくらWebサーバーが早くてもDNSの問い合わせの部分で、遅くなってしまいます。
-
- DNSへの毒入れ(DNSキャッシュポイズニング)の成功率が上がる
- DNSの毒入れとは、DNSの脆弱性を就いてDNSの応答に割り込んで偽の情報を送り込んでしまう攻撃です。毒入れが成功すると偽のサイトに誘導してフィッシング詐欺やウイルス感染などに悪用されてしまいます。
TTLが短いと毒入れが成功する確率が上がるので狙われる確率が高くなります。