ホスト名からIPアドレスを求めるには、次の2種類の方法があります。
ホスト名とIPアドレスの対応が書いてあるファイルは
/etc/hostsの例(Linux) |
|
hostsのサンプルファイル (Windows) |
|
昔はホスト名として短い名前をつけていました。 その後、世界中の計算機が IP reachableとなり互いに 直接通信ができるようになると「『ホスト名』と『IP Address』 の対応」をいかにして保持するかが大問題となりました。 たとえば、インターネットに接続している計算機全ての ホスト名とIPアドレスをどこかに表にして置いておくやり方では、 日々刻々変化するネットワーク構成には対応できないのは 明らかです。
そこで使われるのが DNS (Domain Name System) サーバです。 DNS サーバとは、ホスト名を与えるとIPアドレスを 返すサーバであり、Name Server や BIND (Berkeley Internet Name Domain) サーバなどとも呼ばれることもあります。
DNSは「ドメイン名とIPアドレスを対応づける」ための技術として 1983年に開発され、1987年11月に RFC1034「Domain Names - Concepts and Facilities」 (原文, 日本語訳) および RFC1035「Domain Names - Implementation and Specification」 (原文, 日本語訳) として策定されました。
パソコンなどが、 「ホスト名からIPアドレスを調べるためにDNSサーバに質問を送り、 IPアドレスを知る」仕組みを「リゾルバ (resolver)」といいます。 クライアントは、個々のコンピュータ上で動作している リゾルバのおかげでDNSサーバと通信して、ホスト名からIPアドレスを 得ることができるのです。
DNSは分散型のデータベースであり、各サイトは自分のサイト に属する計算機の情報だけを登録したDNSサーバを管理・ 運用します。それらのDNSサーバが階層的に構成されて、 全体としてはインターネット全体の情報を保存している データベースに見えるのです。
DNSサーバはツリー状の階層構造を構成しています。
インターネットに接続した組織は独自のドメイン名を取得すると、 そのドメイン内の計算機のホスト名やIPアドレスを登録した DNSサーバを運用します。 DNSサーバはドメイン名にしたがって階層的に構成されていて、 そのサーバでわからないときは上位のサーバに問い合わせに行きます。 ドメイン名は'.' ( = ドット) で区切って、後ろが上の階層に なるように並べて記述されています(たとえば prep.ai.mit.edu)。 この、ドメイン名まで含む長いホスト名を FQDN (= Fully Qualified Domain Name)といいます。 最近ではホスト名は FQDN で表すのが普通です (DNS サーバに問い合わせるためには、ドメイン名が必要なので)。
(例) www.netscape.com, www.tsuda.ac.jp, nw.tsuda.ac.jp 等
(上の図はDNSの動作する概念を表したものです。実際にはルートサーバは 第2層までの全データをキャッシュしているので google.com のDNSサーバの IPアドレスを直接返すことができます。)
DNSサーバへの問い合わせ (Linux or cygwin) |
|
Windowsでは一般に、hostsファイルがDNSより優先して参照されます。 これを悪用して、ウイルスやスパイウェアなどのマルウェアが hostsファイルを書き換えて、ユーザを偽のホストへ誘導することがあります (ファーミング詐欺)。
WindowsNT系列であるWindowsXPの場合は C:\Windows\System32\drivers\etc\hosts を、Windows95系列の場合は C:\Windows\hosts を参照してホスト名→IPアドレスを解決します。 このファイルパスはレジストリの次の値で決められています。
キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 名前: DataBasePathhostsファイルの書き換えだとばれやすいので、巧妙なウィルスは レジストリを書き換えて、本来のhostsファイル以外のファイルを hostsファイルとして参照させることもあります。 WndowsNT系列でホストファイルとして実際に参照するのは 標準では、 「%SystemRoot%\System32\drivers\etc」 という REG_EXPAND_SZ 値になっていますが、これが書き換えられているようだと ウィルス感染を疑った方がよいです。 http://www.symantec.com/region/jp/sarcj/data/t/trojan.qhosts.html
Linuxの場合は /etc/resolv.conf ファイルで参照するDNSサーバを設定しています。
/etc/resolv.confの例(Linux) |
|
RedHat Linuxの場合は /etc/host.conf でホスト名→IPアドレス解決の 順番を設定しています。
/etc/host.confの例(Linux) |
|
IPアドレス から ホスト名への変換も同様です。
IPアドレスからも情報が引けるように、
IPアドレスを 8bit毎に逆順に10進数で表して、
最後に in-addr.arpa というドメイン名をつけて
DNS に登録しています。
これは、名前を引く時に「後ろから順に」サーバに問い合わせるためです。
IPアドレスが 133.99 で始まる計算機の一覧を表示させてみましょう。
DNSサーバへの問い合わせ (Linux or cygwin) |
|
「『ホスト名』から『IPアドレス』を調べるためにDNSサーバに 問い合わせを出す」ことを「DNSの正引き」と、 「『IPアドレス』から『ホスト名』を調べるためにDNSサーバに 問い合わせを出す」ことを「DNSの逆引き」ということがあります。
「A.B.C.D」というIPアドレスを逆引きするためには、 「D.C.B.A.in-addr.arpa.」 という名前をDNSの木構造の中で探します。 正引きと逆引きでは、DNSの木構造の異なる部分からデータを取り出して いますので、「IPアドレスから逆引きしたホスト名」は正しいとは限りません。 そのため、安全を確保するためには、逆引きからホスト名を得た場合は、 その名前でDNSを正引きしてIPアドレスを求めて、元のIPアドレスと 一致するか確認する必要があります。
IPアドレス→(逆引き)→ホスト名→(正引き)→IPアドレス
com | 商業組織 |
edu | 教育機関 |
gov | 米政府関係機関 |
int | 国際機関 |
mil | 米軍 |
net | ネットワーク |
org | その他の組織 |
jp | 日本 |
us | 米国 |
uk | 英国 |
to | トンガ共和国 |
... |
世界には13のルートサーバ http://www.root-servers.org/ があります。 13番目のルートサーバは m.root-servers.org (http://m.root-servers.org/) と呼ばれていて、日本で1997年8月からWIDE Projectによって運用されています (最近はmサーバも韓国やフランスなど6カ国に分散配置されているようです)。 ルートサーバの稼働状況は http://www.root-servers.org/を見るとわかります。