DNS

分散システム

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/dsys-1998/1999-02-02 /dns.html
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html

■ホストの名前

◆名前、アドレス

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

■DNS

◆名前サービス

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

名前サービスを提供するプロセスは、 名前サーバ(name server)

名前から名前を指している番号に変換することを 名前解決(name resolution) という。

名前サーバのクライアントとして名前解決をする部分を リゾルバ(resolver) という。

◆DNS

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

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

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

◆ドメイン==木構造

図 大学組織(ドメイン的な見方)
図 大学組織(ドメイン的な見方)

図 大学組織(普通の木)
図 大学組織(普通の木)

◆木構造の必然性

初期のシステムは、ホスト名とIPアドレスの対応を 平らな名前空間(flat namespace)で管理していた。 その内容は、NIC (Network Information Center)が管理していた。
利点
名前が短い
欠点
大量のマシンにたいして名前を付けられない。
1990年、137,000 台まで増えた所で、DNSに切り替えられた。

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

→木構造。

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

◆権限の委任

あるドメインには、それを統括するような名前サーバを置く。

必要に応じて、そのドメインを、さらにいくつかのドメインに分割して、その うちのいくつかについて、他の名前サーバに名前の管理を委任する。

自分では任せた名前サーバへのポインタだけを持つ。

委任された名前サーバは、その分割されたドメイン(サブドメイン)についての 権限を持つ。

分割されたドメインは、さらに分割され、また別の名前サーバに権限が委任さ れることがある。

◆ドメインの例

図 インターネットのホスト名の名前 付けで使われている木構造
図 インターネットのホスト名の名前 付けで使われている木構造

たとえば、「is.tsukuba.ac.jp」では、木の根から見た時、 jp,ac,tsukuba,is のように枝を探していくことを意味して いる。これは、UNIXのファイル名とは解釈の順番が逆である。 UNIXのファイル名では、「/jp/ac/tsukuba/is」となる。

根の直下は、ISO (国際標準化機構, International Standardization Organization ) が定めた 2文字による国別コード(country code)である。た だし、歴史的な理由により、アメリカを中心として .com,. edu,.gov,.net,.org,.mil などが現在でも使われている。日本の国別コー ドは、jp である。jp の下には、次のような枝 (領域、ドメイン)がある。

ac
学校関係(主に大学)、学術研究機関
ad
ネットワーク管理、JPNICの会員
co
会社
ed
児童、生徒などの教育・育成を行う組織。
go
政府機関、国立の施設
gr
任意団体
ne
インターネット接続サービス・プロバイダ
or
YHM_Footnote_Ref(domain,法律に基づく団体)
都道府県の名前
地方自治体、個人。

筑波大学は、ac の下にくる。tsukuba.ac.jp の下には、学内の組織を表わすな枝(領域、ドメイン)がある。

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

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

■DNSの仕組み

◆名前解決

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

resolver の設定ファイルの例:

----------------------------------------------------------------------
/etc/resolv.conf
domain  is.tsukuba.ac.jp
nameserver      130.158.80.245
nameserver      130.158.80.244
----------------------------------------------------------------------

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

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

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

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

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

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

◆名前サーバの動き

図? 図? 名前サーバの動き

図? 名前サーバの動き

例:このクライアントが、「www.u-ust.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: time to live) が決められており、それを過ぎると自動的に捨てられる。

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

トレードオフ。

◆資源レコード

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

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

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

◆キャッシング

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

しかし、名前とIPアドレスの束縛は、必ず変化する。 キャッシュの内容を正しく保つためには、次のような技術が使われている。

参考

◆複製(replication)

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

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

名前サーバの種類:

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

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

セカンダリの名前サーバは、プライマリの名前サーバや他のセ カンダリの名前サーバからデータをコピーする。

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

◆複製管理のパラメタ

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


----------------------------------------------------------------------
adonis1% nslookup
Default Server:  orchid.jks.is.tsukuba.ac.jp
Address:  130.158.86.241

> set type=soa[←]
> jks.is.tsukuba.ac.jp[←]
Server:  orchid.jks.is.tsukuba.ac.jp
Address:  130.158.86.241

jks.is.tsukuba.ac.jp
        origin = jks.is.tsukuba.ac.jp
        mail addr = postmaster.jks.is.tsukuba.ac.jp
        serial = 199804262
        refresh = 10800 (3 hours)
        retry   = 3600 (1 hour)
        expire  = 43200 (12 hours)
        minimum ttl = 86400 (1 day)
jks.is.tsukuba.ac.jp    nameserver = orchid.jks.is.tsukuba.ac.jp
orchid.jks.is.tsukuba.ac.jp     internet address = 130.158.86.241
> []
----------------------------------------------------------------------
serial
セカンダリ名前サーバがゾーン転送の時に、データが更新されたかどう かを判定する時に比較される番号。プライマリでデータを更新したら、忘れず に増やさなければならない。
refresh
セカンダリ名前サーバは、ここで示された秒数ごとに、ゾーン転送を行 ないデータを更新する。
retry
リフレッシュしようとした時、転送元の名前サーバが落ちていたら、こ こで示された秒数ごとに再実行する。
expire
ゾーン転送で得たデータを、転送元の名前サーバが落ちていても、ここ で示された秒数は保持する。
minimum ttl
。レコードのデフォルトの最小生存期間。この間はキャッシャが保持さ れる。(個別のレコードごとにも ttl を設定できる)

◆逆引き

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

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

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

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

例 IP アドレス(数字は、全て 10 進数): YHM_Interaction2(` 12.34.56.78 ') のホストのドメイン名を調べるには、次のようなドメイン名の PTR レコード を検索する。 YHM_Interaction2(` 78.56.34.12.in-addr.arpa ')

◆ルートの設定

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

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

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

named.root:
----------------------------------------------------------------------
.	99999999	IN	NS	A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.	IN	A	198.41.0.4
.	99999999	IN	NS	B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.	IN	A	128.9.0.107
....
.	99999999	IN	NS	M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.	IN	A	202.12.27.33
----------------------------------------------------------------------
ここで 99999999 は、このレコードの生存期間(TTL)が無限大 (いつまでも有効)という意味。

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

◆要求と応答の中身の例


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.

If the same query was sent to some other server which was not
authoritative for SRI-NIC.ARPA, the response might be:

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

This response is different from the previous one in two ways: the header
does not have AA set, and the TTLs are different.  The inference is that
the data did not come from a zone, but from a cache.  The difference
between the authoritative TTL and the TTL here is due to aging of the
data in a cache.  The difference in ordering of the RRs in the answer
section is not significant.

◆設定例

adonis-serv:/etc/named.boot 
----------------------------------------------------------------------
;
;  Boot file for server jks.is.tsukuba.ac.jp.
;
;       $Header: named.boot,v 2.0 98/03/16 01:13:32 root Exp $
;
directory       /var/named
;domain         jks.is.tsukuba.ac.jp
;
forwarders      130.158.80.245 130.158.80.244
;
cache           .                               named.root
primary         0.0.127.in-addr.arpa            named.local
;
primary         jks.is.tsukuba.ac.jp            jks.zone
;
primary         86.158.130.in-addr.arpa         130.158.86.rev
primary         87.158.130.in-addr.arpa         130.158.87.rev
;
secondary open-coins.jks.is.tsukuba.ac.jp 130.158.87.132 cache/open-coins.zone
secondary 128.87.158.130.in-addr.arpa 130.158.87.132 cache/open-coins-128.rev
----------------------------------------------------------------------
adonis-serv:/var/named/jks.zone
----------------------------------------------------------------------
;
;       jks.zone (jks.is.tsukuba.ac.jp)
;
;       $Header: jks.zone,v 2.0 98/03/16 17:57:01 root Exp $
;
@       IN      SOA     jks.is.tsukuba.ac.jp. postmaster.jks.is.tsukuba.ac.jp.
(
                        199804262 ; Serial
                        10800   ; Refresh
                        3600    ; Retry
                        43200   ; Expire
                        86400   ; Minimum
)
        IN      NS      orchid
        IN      A       130.158.86.241
        IN      MX 10   orchid.jks.is.tsukuba.ac.jp.

; aliases
localhost       IN      CNAME   localhost.
www             IN      CNAME   azalea-serv
orchid          IN      A       130.158.86.241
                IN      MX 10   orchid.jks.is.tsukuba.ac.jp.
azalea-serv     IN      A       130.158.86.242
                IN      MX 10   orchid.jks.is.tsukuba.ac.jp.
..
adonis-serv     IN      CNAME   orchid
ugrad1          IN      CNAME   orchid
ugrad2          IN      CNAME   azalea-serv
$INCLUDE        adonis.hosts

----------------------------------------------------------------------

◆まとめ

DNSに見られる分散システム構築の技術
[分散システムの特徴] [DNS]
↑[もどる] ←[1月26日] ・[2月2日] →[2月9日]
Last updated: 1999/02/16 03:00:24
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>