DNS (Domain Name System)

情報学類 分散システム					2008年01月29日

                                       筑波大学システム情報工学研究科
                                       コンピュータサイエンス専攻, 電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/dsys-2007/2008-01-29
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■復習

分散システム インターネット上で成功した次の2つのソフトウェアは、分散システムとして の性質も持つ。

■DNS

◆名前、アドレス

コンピュータの世界では、ある物を指し示すための情報という意味の類語:

◆名前サービス

名前サービスとは、高レベルの名前を低レベルの名前に変換するサービス。

高レベルの名前
文字列、人間が解釈できる
低いレベルの名前
整数、コンピュータにとって都合がよい

名前サーバ(name server)
名前サービスを提供するプロセスは、
名前解決(name resolution)
名前から名前を指している番号に変換すること
リゾルバ(resolver)
名前サーバのクライアントとして名前解決をする部分

◆DNS

インターネットで使われている名前サービスは、 DNS(Domain Name System) と呼ばれている。

DNS では、膨大な数のホスト名を含む名前空間を木構造で管理する。

==階層的にドメイン(領域)に分割して管理する。

◆ドメイン==木構造

筑波大学、社会・国際学群・・・情報学群、情報科学類・・・(領域的な見方)

図? 大学組織に見られる木構造(ドメイン的な見方)

筑波大学、社会・国際学群・・・情報学群、情報科学類・・・

図? 大学組織に見られる木構造(普通の木構造的な表記)

◆木構造の必然性

初期のシステムは、ホスト名とIPアドレスの対応を 平らな名前空間(flat namespace)で管理していた。 その内容は、NIC (Network Information Center)が管理していた。

利点: 名前が短い

問題点: 多数のホストに対して名前を付けられない。

1990年、137,000 台まで増えた所で、DNSに切り替えられた。

名前空間を分割し、一部の権限を委任する。 分割されたものをさらに分割する。

→木構造。

自然な考え方。

スケーラビリティを実現するには、木構造にするしかない、とも言える。 しかし

◆ドメイン名の数

2008年1月ごろの名の統計
ドメイン名
.com2137万
.de546万
.net363万
.org233万
.info82万
.biz67万
.jp98万
.jp は、属性型、地域型含む。 http://jpinfo.jp/stats/ JPドメイン名に関する統計 by JPRS

http://www.domainworldwide.com/ The Daily Domain Counts of Domains Worldwide by Domain Worldwide.

第二レベルのドメインの数。ホストの数はもっと多い。

http://jpinfo.jp/stats/ JPドメイン名に関する統計 by JPRS by Zooknic.

◆権限の委任

◆ドメイン名の表記方法

ドメインを木構造としてとらえた図

図? 名前空間の木構造としての見方

azalea1.coins.tsukuba.ac.jp」を 図?で考えると、次のようになる。 これは、Unixのファイル名とは解釈の順番が逆である。 Unixのファイル名では、「/jp/ac/tsukuba/coins/azalea1」となる。

◆ドメイン名の表記方法の問題点

イギリスは、一時期(1990年ごろ?)、左から右を使っていた。 ある時に、インターネット/アメリカに合わせた。

[RFC1034 DOMAIN NAMES - CONCEPTS AND FACILITIES,1987]

<domain> ::= <subdomain> | " "

<subdomain> ::= <label> | <subdomain> "." <label>

<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]

<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>

<let-dig-hyp> ::= <let-dig> | "-"

<let-dig> ::= <letter> | <digit>

<letter> ::= any one of the 52 alphabetic characters A through Z in
upper case and a through z in lower case

<digit> ::= any one of the ten digits 0 through 9

◆オルタネート・ルート問題

インターネットのドメイン名の根は、1つしかない。 13個のサーバにコピーが世界各地にある。

もし、別の根の情報を持つサーバがあれば、どうなるのか。

オルタネート・ルート(alternate roots)。

◆ドメイン名の種類

ccTLD (country code Top Level Domain)
ISO (国際標準化機構, International Standardization Organization ) が定めた2文字による国別コード(country code)) (ISO 3166) を使う。日本の国別コードは、jp
gTLD (generic Top Level Domain)
ccTLD 以外。伝統的: .com,.edu,.gov,.int,.mil,.net,.org。 新しい: .aero,.biz,.coop,.info,.museum,.name,.pro (2000年)、 .jobs,.travel,.cat カタロニア語,.mobi,(.post),(.xxx),(.eu),(.asia) (2005年)、 (.tel) (2006年) http://www.icann.org/tlds/
jp の下には、次のような枝(領域、ドメイン)がある。 jpで使われている属性型ドメイン名の種類
ac.jp
学校関係(主に大学)、学術研究機関
ad.jp
ネットワーク管理、JPNICの会員
co.jp
会社、一般企業
ed.jp
児童、生徒などの教育・育成を行う組織。小中高。
go.jp
政府機関、国立の施設
gr.jp
任意団体
ne.jp
インターネット接続サービス・プロバイダ
or.jp
法律に基づく団体
lg.jp
地方公共団体
{都道府県名、政令指定都市名、市町村名}.jp
個人、地方自治体

■DNSの仕組み

DNS は、世界中に分散された多くの名前サーバが協調しあって、全体として一 つの巨大な名前空間を実現している。

◆名前解決

ホスト名をIPアドレスに変換すことを、名前を解決する(resolve)という。 名前を解決するモジュールを resolver という。

resolver の設定ファイルの例:

% cat /etc/resolv.conf  [←]
search coins.tsukuba.ac.jp
nameserver 130.158.86.204
nameserver 130.158.86.205
% []

◆分散されたサーバとゾーン

各名前サーバは、ゾーンと呼ばれる、木構造の節のデータ(Unixのディレクト リに相当)を保持する。

1つの名前サーバは、このようなゾーンのいくつかを管理することがある。

図? DNS のドメインとゾーンの関係

DNS のドメインとゾーンの関係

◆名前サーバの動き

図? 名前サーバの動き

図? 名前サーバの動き

例:このクライアントが、「www.tsukuba.ac.jp」というドメイ ン名のホストの IP アドレスを調べる。

  1. クライアントの内部にリンクされた リゾルバは、ローカルの名前サーバに、そのドメイン名を送る。
  2. ローカルの名前サーバは、ルート・ドメインの名前サーバに、このドメ イン名を送る。
  3. ルート・ドメインの名前サーバは、自分ではIPアドレスを答えずに代わ りにjp ドメインの名前サーバのIPアドレスを返す。
  4. ローカルの名前サーバは、今度は、それを使ってjpドメインの名前サー バに、ドメイン名を送る。
  5. jpドメインの名前サーバは、自分ではIPアドレスを答えずに代わりに ac.jp ドメインの名前サーバのIPアドレスを返す。
  6. ローカルの名前サーバは、ac.jpドメインの名前サーバに、ドメイン名を 送る。
  7. ac.jpドメインの名前サーバは、自分ではIPアドレスを答えずに代わりに tsukuba.ac.jp ドメインの名前サーバのIPアドレスを返す。
  8. ローカルの名前サーバは、tsukuba.ac.jpドメインの名前サーバに、ドメ イン名を送る。
  9. tsukuba.ac.jpドメインの名前サーバは、そのドメイン名のIPアドレスを 返す。
  10. ローカルの名前サーバは、リゾルバにそのIPアドレスを返す。
ローカルの名前サーバは、答え(IPアドレス)が見つかるまで繰り返し名前サー バに要求を送る(リゾルバが再帰的(recursive)な要求を出している)。

各ドメインの名前サーバは、 単に次の名前サーバを返すだけで、自分で最終的な答えが見つかるまで 繰り返さない。 (ローカルの名前サーバが 非再帰的(non-recursive)、または 反復的(iterative)な要求を出している。)

◆キャッシング

1つのドメイン名をIPアドレスに変換するたびに、該当する名前サーバに要求 を送っていると遅い。 ルート・ドメインの名前サーバの負荷が重たい。

実際の名前サーバでは、 キャッシング(caching) を行なっていてる。

一度知った情報は、メモリ中に保存しておき、次に必要になった時には、それ を使う。(他の名前サーバには問い合わせを行なわない)。

◆寿命(TTL)

名前とIPアドレスの束縛は、あまり変化しないので、 キャッシングが非常に有効に機能する。

しかし、名前とIPアドレスの束縛は、必ず変化する。 キャッシュを持っていると、元の情報が更新され時に問題が起きる。

キャッシュの内容を正しく保つためには、次のような技術が使われている。

参考

逆に考えると、この期限内では、たとえデータを更新したとしても、古いデー タが参照される。

トレードオフ。

◆資源レコード

DNS では、主にドメイン名を IP アドレスへ変換するが、これは ドメイン名ごとに IP アドレスのデータが定義されていることによる。 このような DNS で扱う1つひとつのデータを、 資源レコード(RR: resource recourd) という。

表? DNSでよく使われる資源レコード

資源レコード 意味
A アドレス
CNAME 正式名
HINFO ホスト情報
MX 電子メールの送り先
NS 名前サーバ
PTR ポインタ
SOA 権限開始

◆dig コマンド

dig コマンドを使うと、DNS サーバに問合せを行うことができる。 引数として、ドメイン名とレコード(デフォルトはAレコード)を与える。
% dig +noall +answer azalea10.coins.tsukuba.ac.jp a [←]
azalea10.coins.tsukuba.ac.jp. 86400 IN  A       130.158.86.30
% dig +noall +answer www.coins.tsukuba.ac.jp a [←]
www.coins.tsukuba.ac.jp. 86400  IN      CNAME   orchid-nwd.coins.tsukuba.ac.jp.
orchid-nwd.coins.tsukuba.ac.jp. 86400 IN A      130.158.86.207
% []

◆複製(replication)

1つのドメインについて、名前サーバは、普通は必ず2つ以上動作させる。

名前サーバを複数用意しておくと、それらの名前サーバのうちどれか1つでも アクセスできれば、名前解決をすることができる。

名前サーバの種類:

マスタ(master)、プライマリ(primary)
あるドメインについて最終権限を持っている。世界でひとつだけ。
スレーブ(slave)、セカンダリ(secondary)
マスタのコピー(複製、replication)を持つ。

マスタの名前サーバは、ファイルからそのゾーンのデータを読み込む。

スレーブの名前サーバは、マスタの名前サーバや他の スレーブの名前サーバからデータをコピーする。

このコピーのことを ゾーン転送(zone transfer) という。

◆名前解決できる確率

たとえば、サーバが2個ある時

◆複製管理のパラメタ

ゾーン転送を制御するパラメタは、SOA レコードに含まれている。

% dig +noall +answer coins.tsukuba.ac.jp soa [←]
coins.tsukuba.ac.jp.    86400   IN      SOA     orchid-nwa.coins.tsukuba.ac.jp. 
postmaster.coins.tsukuba.ac.jp. 2006081404 3600 3600 604800 3600
% []
数字は、左から、serial, refresh, retry, expire, minimum ttl
serial
スレーブ名前サーバがゾーン転送の時に、データが更新されたかどう かを判定する時に比較される番号。マスタでデータを更新したら、忘れず に増やさなければならない。
refresh
スレーブ名前サーバは、ここで示された秒数ごとに、ゾーン転送を行 ないデータを更新する。
retry
リフレッシュしようとした時、転送元の名前サーバが落ちていたら、こ こで示された秒数ごとに再実行する。
expire
ゾーン転送で得たデータを、転送元の名前サーバが落ちていても、ここ で示された秒数は保持する。
minimum ttl
ネガティブキャッシュの生存期間。「ドメイン名が見つからない」という情報 を、ここで指定された秒数だけ保持する。

◆逆引き

ホスト名をIPアドレスへ変換するのではなく、逆にIPアドレスをホスト名へ変 換することを 逆引き とい。

ホスト名からIPアドレスを引く普通の引き方を強調する時には 正引き という。

正引きは、A レコードを検索することで行なわれる。

引きには、PTR が検索される。

例 IP アドレス(数字は、全て 10 進数):

12.34.56.78
のホストのドメイン名を調べるには、次のようなドメイン名の PTR レコード を検索する。
78.56.34.12.in-addr.arpa
% dig +noall +answer azalea10.coins.tsukuba.ac.jp a [←]
azalea10.coins.tsukuba.ac.jp. 86400 IN  A       130.158.86.30
% dig +noall +answer 30.86.158.130.in-addr.arpa ptr [←]
30.86.158.130.in-addr.arpa. 86400 IN    PTR     azalea10.coins.tsukuba.ac.jp.
% []

◆ルートの設定

名前解決を行なうためには、ルート・ドメインの名前サーバをあらかじめ知っ ている必要がある。

逆に言えば、ルートさえ手動で設定すれば、他のドメインは設定しなくてもよ い。

名前サーバの設定ファイルから読み込ませる。

% cat /var/named/named.ca [←]
...
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
...
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
% []

最後の M は、日本にある。

◆ルート・サーバへの攻撃

2002年10月には、13個のルート・ドメインのサーバに対して攻撃が行われた。 ほとんど効かなかった。 その後、攻撃は時々行われるが効いていない。

◆要求と応答の中身の例

[RFC1034 DOMAIN NAMES - CONCEPTS AND FACILITIES,1987]

6.2.1. QNAME=SRI-NIC.ARPA, QTYPE=A

The query would look like:

               +---------------------------------------------------+
    Header     | OPCODE=SQUERY                                     |
               +---------------------------------------------------+
    Question   | QNAME=SRI-NIC.ARPA., QCLASS=IN, QTYPE=A           |
               +---------------------------------------------------+
    Answer     |                                            |
               +---------------------------------------------------+
    Authority  |                                            |
               +---------------------------------------------------+
    Additional |                                            |
               +---------------------------------------------------+

The response from C.ISI.EDU would be:

               +---------------------------------------------------+
    Header     | OPCODE=SQUERY, RESPONSE, AA                       |
               +---------------------------------------------------+
    Question   | QNAME=SRI-NIC.ARPA., QCLASS=IN, QTYPE=A           |
               +---------------------------------------------------+
    Answer     | SRI-NIC.ARPA. 86400 IN A 26.0.0.73                |
               |               86400 IN A 10.0.0.51                |
               +---------------------------------------------------+
    Authority  |                                            |
               +---------------------------------------------------+
    Additional |                                            |
               +---------------------------------------------------+

The header of the response looks like the header of the query, except
that the RESPONSE bit is set, indicating that this message is a
response, not a query, and the Authoritative Answer (AA) bit is set
indicating that the address RRs in the answer section are from
authoritative data.  The question section of the response matches the
question section of the query.

◆設定例

orchid-nwa:/etc/named.conf
...
options {
        directory "/var/named";
...
}

zone "." IN {
        type hint;
        file "named.ca";
};

zone "coins.tsukuba.ac.jp." in {
        file "coins.tsukuba.ac.jp.zone";
        type master;
};

zone "86.158.130.in-addr.arpa" IN {
        file "db.130.158.86";
        type master;
};
...
/var/named/coins.tsukuba.ac.jp.zone:
$TTL 86400
coins.tsukuba.ac.jp.	IN	SOA	orchid-nwa.coins.tsukuba.ac.jp.	postmaster.coins.tsukuba.ac.jp.	( 
	2006081404	;     serial
	1h	;     refresh
	1h	;     retry
	1w	;     expiry
	1h	 ) ;     minimum
;
coins.tsukuba.ac.jp.	IN	NS	orchid-nwa.coins.tsukuba.ac.jp.	
coins.tsukuba.ac.jp.	IN	NS	kasumi.cc.tsukuba.ac.jp.	
coins.tsukuba.ac.jp.	IN	NS	utogwgw.gssm.otsuka.tsukuba.ac.jp.	
			IN	MX 10	smtpgwin.cc.tsukuba.ac.jp.
...
orchid-nwa	IN	A	130.158.86.204	
orchid-nwb	IN	A	130.158.86.205	
orchid-nwd	IN	A	130.158.86.207	
...
mail	IN	CNAME	orchid-nwc	
oldmail	IN	CNAME	orchid-calc6	
www	IN	CNAME	orchid-nwd	
vpn	IN	A	130.158.87.160	
...
azalea1	IN	A	130.158.86.21	
azalea2	IN	A	130.158.86.22	
azalea3	IN	A	130.158.86.23	
...

◆まとめ

DNSに見られる分散システム構築の技術
Last updated: 2008/01/28 13:03:00
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>