Name serverの構築(bind)

公開ネームサーバを構築しました。
主にZonefileの理解を記載しておきます。

Zonefileは、いろいろなドキュメントで見かけます。ドメインとipアドレスの対応を記述していることは理解できていました。@、$ORIGIN、SOAがよくわかっていませんでした。
ネームサーバ構築にあたり、ドキュメントを読んでしっかり理解したい。
エンジニアの性なのか、”できれば、その仕様を読んで納得したい。”と思ってしまうのです。RFC1035を読み込みました。

Zonefileの書式
下に記載したようになっています。3行目<domain-name><rr>がドメイン名の定義で、ドメイン名に対して、Resource Record(RR)を定義していく書式です。4行目<blank><rr> もドメイン定義で、先頭文字を空白にすると直前のドメイン名に対するRRを追加して定義できるようになっています。RRは、ともに省略可能なTime To Live(TTL)、Classが並びます。この並びは逆でもよい。次にタイプを記載してタイプに対応したResource Data(RDATA)を記述します。タイプごとにDataの形式は変わります。

$ORIGIN <domain-name> [<comment>]

$INCLUDE <file-name> [<domain-name>] [<comment>]

<domain-name><rr> [<comment>]

<blank><rr> [<comment>]

[<TTL>] [<class>] <type> <RDATA>

[<class>] [<TTL>] <type> <RDATA>

<domain-name>の説明
細かいことは、RFC1035を見ていただくとして、いわゆるドメイン名を書きます。この書式については、dot(.)で終わるドメイン名を絶対ドメイン(相対に対しての絶対)としています。ドメイン名は.で区切られるとしています。あるdot(.)で分けたときのdot(.)より左側だけを相対ドメインとしています。

絶対ドメイン hello.world.example.com. 最後が.で終わっているので完全ドメイン名
相対ドメイン hello.world 最後が.で終わっていないので.で終わるドメインが暗に右側にある

相対ドメインは右側に続くドメインによって、ドメイン名が異なることになりますね。

@の説明
@は仕様を読んでいくと、current origin(現在の原点)となっています。$ORIGINを指していますね。Zone fileで$ORIGINで定義したドメイン名を使いたいなというときに@と書くことドメイン名を書いたことになります。

SOAの説明
Zonefileの書式から、SOAは結局のところRDATAのTYPEを指しています。Start Of Authority、略してSOAは、権限(出典)の開始といったところでしょうか?あるドメイン名の有効性についての記述になります。SOA以降の書式はTYPEがSOAの部分の記載を読めばよいということになりますね。

SOA RDATA format

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                     MNAME                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    /                     RNAME                     /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    SERIAL                     |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    REFRESH                    |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     RETRY                     |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    EXPIRE                     |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    MINIMUM                    |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

MNAME このZonefileの情報を提供するネームサーバのドメイン名を入力します。普通はこのZonefileを読み込むのはネームサーバなので、このZonefileのどこかに入力したネームサーバのipアドレスの対応を記載することになると思います。
RNAME このZonefileの責任者のメールボックスのドメイン名を記載します。実はここ、いろいろなSOAを例をみて混乱しました。RNAMEについてに詳細を記載しました。
SERIAL 32bitのZonefileバージョン番号を記載します。32bitルールはないようです。
REFRESH Zonefileの更新間隔を32bit値で表した秒で記載します。
RETRY 更新が失敗したとき、再度更新を行う間隔を32bit値で表した秒を記載します。
EXPIRE ZoneFileの有効
MINIMUM このゾーンのRRを転送した場合のTTLの32bit値の最小の秒数。

RNAMEについて
メールボックスなので、toshi@oc-soft.netのように途中に@が出てくる記載を想像していましたが、info.example.com.のように記載されている例があったからです。mailboxの箇所を良く読んでみると、ドメイン名としてメールボックスを指す場合は、@はdot(.)に置き換えると記載があります。@より前の部分は<label>で記載となっています。ドメイン名なので、最後に(dot).をつけている場合は、完全ドメイン名を表していることになります。

MININUMについて
NameServerは、ipアドレスとドメイン名の対応表を管理しています。NameServerに自身の管理するZonefile以外のipアドレスとドメイン名の対応を保持してよい仕様になっています。いわゆるキャッシュですね。自身以外のNameServerと通信して、そのサーバからの対応表をもとにキャッシュをつくります。キャッシュを管理しているサーバは、キャッシュが古くならないように、一定期間ごとに自身以外のNameServerと通信する必要があります。MINIMUMは、この間隔を制御するための値です。MINIMUMが小さいと頻繁にネームサーバーと通信する必要があります。MINUMが大きいとキャッシュを更新の頻度が小さくなります。

$ORIGINの初期値
Bindでは$ORIGINは起動時に読み込む初期設定ファイル(起動時設定ファイル)内で決定されます。Bindにはzoneという制御パラメータがありそこで、Zonefileの読み込みを行います。Zoneパラメータは、ドメイン名とzonefileの対で構成されています。このZoneパラメータのドメイン名が$ORIGINになります。

zone "example.com" {
   type master;
   file "named-zone1";
}

この例では、named-zone1がZonefileで$ORINGINは”example.com”になります。

By toshi

OC ソフトウェア 代表取締役

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です