ネームサーバーとは

2017.2.14 (火)

ネームサーバーを勉強する前のあれこれ

ネームサーバーを理解するにはある程度複雑奇っ怪なネットワークの歴史を学ぶ必要があるかもしれません。そもそもインターネットというものは「コンピューター同士をつなぐ技術」というそれ以上それ以下でもない技術で文字通り単につないでいるだけだからです。あなたのPCと隣のPCをケーブルでつないでお互いにデータのやり取りや操作をできるようにするというわけです。しかし複数のPCがつながれると見られたくないファイルもあるだろうし秘密にしておかなくてはならないファイルも存在します。そこでインターネットにはプロトコルと権限という概念が必要になってきました。つまりつながってはいるけれど、あるプロトコル(接続ルール)に従うと読みだすことはできるけれど書き込みはできない、また、読み書きはできるかもしれないけど、スクリプトを走らせる実行権限がないなど、それらPCの関係性をより複雑にしてきました。その接続に関する根本的なルールを規定しているのがネームサーバー(DNSサーバー)です。
さて、PC同士を接続するにはまず何が必要かというと、そのPCをアイデンティファイする名前のようなものです。その名前は実は何でもよいのですが、ネットワークの歴史の中でそれらを「ホスト名」という名前をつけることにしたわけです。hostというのはコンピューター機器をアイデンティファイするためのそれぞれの名前です。しかしhostは人間が人間の言語として理解するための事実上本当の名前です。かつてのhost名は本当に本人の名前をつけていたのです。私の場合はosamuなので、osamuというホスト名をもったコンピューターを持つことになりますが、機械はそのような人間が理解できる言語なんてどうでもいいのです。機械はホスト名のかわりに「IPアドレス」という数字で理解するようになっています。
さて、IPアドレスは、Internet Protocol addressの略称ですが、先程述べた「プロトコル」という言葉が入っています。プロトコルとはなんぞやという話になってきますが、プロトコルはコンピューター同士を接続するためのルールです。IPアドレスはそれぞれのPC(host)をアイデンティファイするためのインターネット上のルールを定めたものです。PCそれぞれに固有の重複しない名前がなければ、PCを特定することができません。IPアドレスについての詳細なルールはここでは割愛しますが、実によくできたプロトコル(ルール)です。現代に至ってはそのIPアドレスの枯渇に困って次世代のIPv6が登場する過渡期に入っていますが、ここではIPv4、つまり現在一般的に使われているIPアドレスを中心に解説します。
インターネットにつながれているPC(または、PCと同様の機能を持ったデバイス)にはそれぞれIPアドレスが割り振られています。ここであえてPCと言っているのは実は比喩に過ぎません。というのもインターネット上のPC(host)は、現在ではまた更にその跡に続く巨大なネットワークのGateWay(頂点)になっていたりするからです。あるいは勿論たった一台のPCにすぎないかもしれません。しかし、IPアドレスはその階層構造をなして殆ど無数(ではありませんが…)のアドレスを作り出すことができます。
現在に至っては、IPアドレスはグローバルIPアドレスとプライベートIPアドレスに二分されます。これら2つのIPアドレスに
ついて、ネームサーバーを理解するには正確に理解する必要があるかもしれません。

グローバルIPアドレスとプライベートIPアドレス

インターネット上には無数の網の目のような通信経路があります。しかし、この通信経路は、世界の地図と同じ概念で、国、都道府県、市町村区、町名、番地、アパート・マンション名(そして部屋番号)のように階層化されています。つまりあなたが米国のあるサイトに接続した時には、その情報が保存しているそのコンピューターそのものにあなたのPCが直接つながれているわけではありません。階層的に日本を代表する数本のケーブルにさかのぼったり、人工衛星などを中継した無線などに収束し、まとめてアメリカ合衆国本国の代表的な何本かの回線にまとめて送受信します。余談ですが、日本とアメリカ合衆国間の代表的なインターネット回線は海底ケーブルで、神奈川県からグアム、ハワイ、アメリカ合衆国という経路で設置されています。TPC-5CN(TransPacific Cable-5 Cable Network)と呼ばれるケーブルで全長およそ24,500km、転送量は10Gbpsです。
実はこの階層構造が非常によくできたシステムなのです。
さてインターネットに詳しい方なら、WANとLANという言葉を聞いたことがあるかもしれません。WANが開かれたインターネット、LANが閉じられたローカルなネットワークを指します。WAN上のIPアドレスのことをグローバルIPアドレスといいます。グローバルIPアドレスは世界中どこにいってもお互いに接続することができます。逆にいうとインターネットにつながれたコンピューターはずべてグローバルIPアドレスを保持しているということです。しかしLAN同士は直接お互いに接続することができません。LANはLANのみでも成立しますし、またGateWayと呼ばれる門を通ってグローバルIPと変換し外界のインターネットに接続することができます。(いわゆるファイヤーウォールはこのGateWayに設置されます)つまり1つのグローバルIPがあれば、その傘下のLAN内には無数(殆ど無数という意味で、本来は有限です)の閉じられたネットワークを設置することが可能になります。大企業のネットワークなどは、数百人から数千人のPCがLANでつながれていて、GateWayにはかなり厳しい検問(ファイヤーウォール)が施されています。

IPアドレスとドメイン

さて、IPアドレスの話ばかりでネームサーバーがどこにも出てこないじゃないか…ということになりかねませんが、機械同士の通信はIPアドレスで行われているので、基本的にはIPアドレスだけで我々はインターネット、つまり、PC同士の接続が可能になります。
IPアドレスは無機質な数字の羅列です。123.456.789.10というような形式になっています。実際これは人間にはとても覚えにくい。omnioo.comは覚えてくれるかもしれないけれど、123.456.789.10はさすがに暗記できない。そこで、先程の「ホスト名」というものを思いついたわけです。「123.456.789.10 = omnioo」であるというように記述しておけばいちいち数字を覚えていなくても普通に名前を覚えておけばよいというわけです。かつてのコンピューターにはhostsファイルというものがあって(今もありますが)IPアドレスとホスト名を対にしてその関係性を記述していました。これはこのホスト名に対してはこのIPアドレス、またその逆でこのIPアドレスはこのホスト名という風に機械と人間が要領よく通信できるように考えだされたものでした。
しかし現在のように世界的にインターネット通信網が整備され数億という人々がインターネットをするような世界になると、さすがにホスト名では足りません。世界にmikeという人間がどれほどいるかもわからないし、名前が重複してしまいます。また更にhostsファイルはかねてから手動で記述していたために接続先が増える度に記述を手動で書き足してゆく必要がありました。これでは効率的なネットワークが設計できません。どこで名前空間(name space)とノードをもったドメインという考え方が生まれました。

ドメイン

xxxx.jpというドメインを見たことがあるでしょう。これは日本のドメインであることが示されているのですが、これが本当に日本人が所有しているドメインかどうか、あるいは日本語で書かれたサイトであるかどうかは別です。ドメインはただ単にIPアドレスと同様にそのノード(枝分かれ)を示すものです。今後、このノードは更に増えてゆくことになりそうです。
このサイトのドメインはomnioo.comですが、これは.comグループに属しています。ですが、omnioo.jpという別のドメインが存在するかもしれませんし、omnioo.netも存在するかもしれません。ですが、全く別のドメインです。
このドメインとIPアドレスの関係をデータベースに格納して、いつでも参照できるようにしているのがネームサーバー(DNSサーバー)です。ドメインの登場でより詳細な殆ど無数のアドレスを生成できるようになったおかげで、それらの膨大なデータベースを管理するためにネームサーバーが必要になりました。

ネームサーバーとは

ネームサーバーは、事実、ドメインとIPアドレスの対の情報をかつてのhostsファイルと同様に書き連ねていうだけです。構造的には何も変わりません。しかし、hostsファイルと最も違うのは、PC内に設定ファイルを置くのではなく外部のコンピューターに設定して誰でも公平にその情報を引き出せるということなのです。このIPアドレスはどのドメイン(PCの住所)なのかというのを公的に公表しているわけです。このおかげで我々は別のコンピューターのホスト情報またはドメインの情報を持つ必要がなくなりました。ネームサーバーに問い合わせればいつでもその情報を与えてくれるからです。
しかし、ちょっと考えればこれはおかしなことになりはしませんか?例えば日本だけでも大量のIPアドレスとドメインが存在しますが、それらを1つのネームサーバーで集中的に管理するというのはちょっと変な感じがしませんか?IPv4だけでも、4294967296個(約43億個)もあります。IPv6に至っては340282366920938463463374607431768211456個(約340澗(かん)個)です。兆、京…という我々の生活には殆ど無関係な単位以上の澗という単位です。(余談ですが、IPv6では地球上の見えるすべての物体にIPアドレスを振ることができます。鉛筆1本などとはいわず、米粒1つにもIPアドレスを振ってアイデンティファイすることができます(笑))これらの情報を1つのサーバーで扱うのは殆ど不可能です。ですから、委譲型の分散システムでネームサーバーを管理しています。もっと簡単にいうとあなたも自前のネームサーバーを作って世界に向けて公的に開放できるというわけです。
これは実に賢いシステムです。分散型で様々な場所にネームサーバーを置くことでインターネットの全面的なダウンを回避できるし、何せ頻繁に更新されるネットワーク情報をそれぞれのネームサーバーで管理しておくことができるのです。(先日我社のサーバーも一部引越しをしました。)
しかしまばらにあるネームサーバーをどうやって見つけるのか?omnioo.comのIPアドレスを参照できるネームサーバーをどうやって見つけるのでしょうか?
最も短いドメインをご存知でしょうか?それは「.」(ドッド)です。点一個です。これが現存するドメインの最も短いものです。しかし、このドメインは何も指していません。では何を表しているのかというと、ドメインの最大ノードのROOTを指しています。実はomnioo.comは、omnioo.com.という最後にドットがついているのが正式ドメイン名です。しかし、ドメインのトップノードがどのドメインにも存在するのはあたり前なので、WEBブラウザーなどではあえて省略可能になっているだけなのです。
このROOTは、ネームサーバーのROOTサーバーを指しています。世界に10個ぐらいあります。数年前まで7つだったのですが増えました。このうち日本にはROOTサーバーが2台もあります。omnioo.comのドメインのIPアドレスを探す時、まずROOTサーバーを見に行きます。ルートサーバーでは、.com付きのドメインが管理されている別のネームサーバーを案内してくれます。そのサーバーにomniooを見つけてくれます。簡単にいえばそのような仕組みになっています。どんな複雑なドメインもROOTからたぐってゆけば数個のサーバーを介すだけでIPアドレスが瞬時に発見できます。また、一度アクセスしたドメインの情報はたいていの場合PC内にキャッシュされます。なので実際はROOTまでいってドメイン情報を探すというのは滅多にないです。またネームサーバーはセカンダリ(スレーブ)サーバーというものがあって複数台設置することができるので、1台のネームサーバーがこけても全然平気です。

ネームサーバーの構造

我々はドメインを購入しますが、それはどうしてでしょう。それはインターネットを維持するための資金になっています。この開放無料平等なインターネットでドメインで得た資金は誰が牛耳っているのでしょう?それは分配されています。
ドメインの元値は非常に安価です。しかし実際に我々が購入する時には1000円とか2000円とかになります。これはどういうことかというと各信用度の高い企業が同様に信用度の高いシステムでドメイン管理を委譲されているからです。技術者の給料も必要ですし、サーバーを大切にする建物も必要です。それゆえにちょっと高くなります。ライブ・ドアが何をやっている会社かわからない…というナベツネ様のお言葉通り、殆ど我々には目に触れることのない技術をライブ・ドアがやっています。新聞という旧式情報配信をしている方々には非常にわかりづらいことでしょう。
ここに日本のドメイン配給企業の一覧があるのでご参考に。
http://www.xn--eckwd4c7cy36u3zowmk0qcl32k.com/registrer.html
これ以外の企業でドメインを配布している企業があるとすれば、2次配給業者ということになります。
これらのドメインを配給している会社をレジストラといいます。レジストラはドメインとIPアドレスの情報を管理していている大本の会社ですがレジストラはちょっと特殊な情報も管理しています。それは(ややこしいのですが)あるドメインがどのネームサーバーで管理されているのか?という情報をもっているのです。つまり、ドメインとIPアドレスを対で記述し管理しているネームサーバーそのものがどのIPアドレスでありどのドメインであるのかを管理しているのです。具体的にいうとこういうことになります。
あなたがドメインを購入します。購入後にそのドメインをどのネームサーバーで管理するのかを聞いてきます。たいていその設定が細かくできるようになっているのですが、通常レジストラがもっている自前のネームサーバーに登録してしまいます。この方が安心だし今現在ではたいてい無料です。ここまでの設定で多くの人はネームサーバーの存在を忘れます。年に一回(あるいは3年に一回)一定量の料金を支払えば、もう何もかも自動的に設定されているので何1つ気にする必要がないからです。
購入したドメインをどのネームサーバーで管理するのかは自由に設定できます。私は机の下のネームサーバーで管理しています。またSakuraの専用サーバーにもネームサーバーを設定しています。またMuuMuuDomainでも管理しています。いろいろです。

ネームサーバーとインターネット

インターネットをしていてもいわゆるプロトコルについて意識することは技術者以外ではほとんどありません。インターネットという漠然とした言葉でたいていのことは済まされますし、メールをちょいちょい送るだけです。しかしネット上には厳粛なルールが存在します。
WEBブラウザーで様々なサイトにアクセスして様々な情報を得ます。天気予報から占い、技術情報から他人の噂まで何でもです。これらはhttpという基本的には読み込み専用のプロトコルで接続します。WEB屋さんや自前のホームページを作成している人だったらFTPという接続方法でファイルのアップダウンロードをしていることでしょう。FTPは読み書きを基本にしたプロトコルでです。またSSHやそれらを元にしたSFTPなど暗号化された情報をやり取りできるプロトコルもあります。しかしこれらのプロトコルもドメインとIPアドレスという基本的な情報で接続を共有します。これらの基本情報を定めるネームサーバーの情報をAレコード(Address Record)といいます。概念的な話だけに留めたいのですが、Aレコードは以下のようなものです。

@ IN A 123.456.789.10 (ドメインからIPを引く)
10.789.456.123.in-addr.arpa. IN PTR omnioo.com. (IPからドメインを引く)

PTRレコードとセットでたいていの場合は設定します。逆引きができない場合でも充分にサーバーとしての機能はしますが、インターネットモラル上あまりよいことではありません。ですから大企業などはたいてい双方からどちらの情報も得られるようにネームサーバーの設定をしています。
先程のhttp、FTP、SSHなどはAレコードの設定で接続が可能になります。しかしメールだけは別のレコードを参照します。かの有名なMXレコード(Mail Exchanger Record)です。

@ IN MX [優先順位] 123.456.789.10 (ドメインからIPを引く)

メールのプロトコルのみ別のレコードで設定します。
これら以外のレコードもまだまだあります。例えばtxtレコードでは任意のテキストが設定できます。そのドメインやIPが自分のモノであることを証明するためのkeyを設定したりいろいろできます。またCNAMEという別名レコードもあります。違うドメインで同じIPを指定したりする時に使います。
これらの情報を元にインターネット上で様々なデータ通信が行えるようになります。
さて、先程のレジストリ、つまりドメインを配給している会社のシステムに「そのドメイン情報がどのネームサーバーに設定されているのか?」を設定するのがレジストリの担当部分ですが、その実際の情報が書かれているネームサーバーを「レジストリ」と呼びます。ここら辺りも厄介です。ドメインを配給するレジストラに対して、実際にドメイン情報が書かれているネームサーバーそのものがレジストリということになります。

おさらい

ネームサーバーは実にシンプルな機能しかもっていません。ドメインとIPアドレスを管理し、ドメインからIPアドレスを、IPアドレスからドメインを参照できるようにしているだけです。実際それ以外の機能は何もありません。しかしネームサーバーは権限委譲による負荷分散と階層構造をもったノードによってその全体として成り立っています。ですから、ネームサーバーを設定する際にはそういうルールが以外に複雑でやっかいです。自分勝手に適当にコードを書いても機能しないのです。また、先のレジストラとの関係で更に厄介な感じがします。
インターネットと漠然といわれるシステムの中枢は実はこのネームサーバーにあります。アメリカ合衆国が軍事的な目的で作ったといわれるシステムで、一部の経路が遮断されても複数の経路を持つ回線でネットワークが破壊されることはないという堅牢な構想がネームサーバーの構造に宿っています。ネットワークが渋滞していても迂回経路を使って難なくアクセスします。またTCP/IPというプロトコルでデータはパケット(カプセル状)に小さく分断されて配信します。血液の赤血球や白血球のように渋滞することなくスムーズに流れます。まだまだ弱点はあるとしても今時点では実によくできたシステムです。