公開ネームサーバを構築しました。
主に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”になります。