DNS (Domain Name System)



ホスト名からIPアドレスへの変換

ホスト名からIPアドレスを求めるには、次の2種類の方法があります。

ファイルを参照する方法

ホスト名とIPアドレスの対応が書いてあるファイルは

です。

/etc/hostsの例(Linux)
127.0.0.1	localhost	localhost.tsuda.ac.jp
192.168.0.1	soho.tsuda.ac.jp	soho
192.168.0.64	klimt.tsuda.ac.jp	klimt
	...


hostsのサンプルファイル (Windows)
# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost


DNSに問い合わせる方法

昔はホスト名として短い名前をつけていました。 その後、世界中の計算機が 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)
$ nslookup www.google.com 
Server:		133.99.162.2
Address:	133.99.162.2#53

Non-authoritative answer:
www.google.com	canonical name = www.l.google.com.
Name:	www.l.google.com
Address: 66.102.7.104
Name:	www.l.google.com
Address: 66.102.7.147
Name:	www.l.google.com
Address: 66.102.7.99

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
名前: DataBasePath
hostsファイルの書き換えだとばれやすいので、巧妙なウィルスは レジストリを書き換えて、本来の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)
search tsuda.ac.jp
nameserver 210.141.112.131
nameserver 210.141.112.163

RedHat Linuxの場合は /etc/host.conf でホスト名→IPアドレス解決の 順番を設定しています。

/etc/host.confの例(Linux)
order hosts, bind
multi on

IPアドレスからホスト名への変換

IPアドレス から ホスト名への変換も同様です。

「『ホスト名』から『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アドレス

DNSの基本

DNS は階層的な「名前空間(name space)」を持ちます。 トップレベルのドメイン名 日本(jp) の第2レベルのドメイン名

世界には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/を見るとわかります。