山崎はるかのメモ

UNIX・FreeBSDにOCN用のDNSを仕込む

-OCN独特の設定もあるが 理解するのはカンタンだ -

 


それはね

UGTOPアルテミス)の石川先生の自宅から、もいできた「NEC PC9821Xa10」。
これにFreeBSD(98)を仕込んでサーバにしよう...というわけで、今回はDNSを設定することにした。

DNSって なぜわかりにくい?

DNSに関しては、いろんな書籍に書かれてあり、詳しい解説があるが、それが「詳しい」だけに、かえってわかりにくい。

そりゃ作家やライターにとっても「ごちゃごちゃ」解説したほうが、ページ数が増えて ノルマが達成できるし、それを読者は「詳しく」「わかりやすく」解説してあるとかんちがいして「購入」するもんだから、一挙両得というものである。
それが いいか・悪いかは別にして...私もテクニカルライターなので、自分のクビを締めるのは ほどほどにしておくが...ここで、カンタンにDNSの役割を解説しよう。
例によって、「読み物風」にしてあるが、これは「入門書を読んでもDNSが何者かわからなかった」という人向けに記述してあるからである。
(かく言う私も そうだった)
だから 入門書で 完璧に理解できる人は、このページは読まなくてよい。

 

さて。

インターネットでは すべての情報源・発信源を、「IP」という数字コードで振り分ける。
言いかえると IPは「電話番号」のようなものだな。

その「IP」は世界で唯一無二のものであり、ネットワークを連結する「ルータ」という装置は、あなたのIPが どこにいて・どの回線にスイッチ(ルーティング)すれば あなたに到達するかを知っている。
だから あなたが どこかのWebサーバをIPで呼び出した場合、ルータは 返ってきたデータをどこに スイッチするべきかを考えて、データの送り先を振り分けているわけである。

したがって インターネットでは「IP」は 非常に重要なウェイトを占めており、これをごまかすことは・あなたに情報が到達されなくなるということだから、なかなか固有なわけである。
住所をごまかすと、通販の荷物が届かないのと同じ理屈だな。
だから これをごまかすには「プロクシ」など、私設私書箱サービスを利用するぐらいしか方法がない。

さて、このIP。
IPは「数字コード」のかたまりで、外見上、非常におぼえにくい。
携帯電話のメモリーに「番号」だけを入れても わかりにくいように、番号には「名前」を対につけてやったほうが、 だんぜん 人間にとっては使いやすい。
そこで アルファベット(ローマ字)を使って 相手を指定できるようにしたのが「ドメイン(Domain)」である。

基本的に、ドメインは ひとつのIPに割り当てられている。
そのIPが、どのドメインと対になっているかを 辞書にしたのが「DNS」である。
まあ IPの電話帳のようなもんだな。
いや 自動でやってくれるんだから、エンジェルラインと言ったほうがいいかもしれないね。

DNSは「IP」を送られるとドメイン名を返し、「ドメイン名」を送られるとIP番号を返すシステムなのである。

IEやネスケなどの ブラウザは、URL欄にドメインを記入してリターンすると、WinSockというシステムを経由して、DNSに そのドメイン名を問い合わせる。
その結果、IPが返ってくると、そのIPにデータリクエストをする...という動きをしている。
ただ 外見上は そうは見えないけどね。

ためしに http://210.162.222.138/ とURLに直接入力すると DNS参照がないぶん、通常より速くアクセスできるわけだ。(ただし 人間に知覚できる速さかどうかは、ケースバイケースだけどね)
さらに http://3533889162/ とURLに入力すると やっぱりNDAホームページに到達する。
これは IPが4ケタの16進数で 制御されているためで、210×16777216 + 162×65536 + 222×256 + 138 は 3533889162 だからだな。

 

DNSの動作に必要なデータ

かように DNSは、IPやドメインを聞かれて その対となる片方の情報を返すシステムである。
もし このDNSを、どこか1ヶ所に置いて みんなで使うシステムだと、インターネット人口のすべてが そこにデータリクエストを集中させるわけだから、その回線トラヒックたるや、たいへんなものである。

そこで、基本ドメインのIP情報は 各国のNIC機関が管理し、それ以下のドメインに対しては それぞれのネットワークが管理することで、データの集中を分散することにした。

たとえば http://nda.co.jphttp://nec.co.jp などのトップドメインのIP情報は http://www.nic.ad.jp というNIC機関のDNSが管理している。
そこをブラウザが呼び出せば IP情報が引けるわけである。

しかし http://www.server.nda.co.jphttp://www.ic.nec.co.jp/ などのように、トップドメインより深い部分に関しては、それぞれのドメインが独自に所有するDNSが IP情報を管理している。

だから、実際には こういう動きをしている。

ブラウザが www.server.nda.co.jp というURLをリクエストすると...

  1. ブラウザは 超トップドメイン「JP-DNS」に問い合わせる。
  2. すると JP-DNSは「CO.JP」と名がつくものは うちじゃないよん。それは「CO.JP-DNS」に聞いておくれ...と回答する。
  3. しかたないから「CO.JP-DNS」に問い合わせると、「NDA.CO.JP」に関しての情報は nda.co.jp にあるDNSが詳しく管理しているから そこに聞いておくれ...と回答する。
  4. そろそろ アタマにくるが、「NDA.CO.JP-DNS」に問い合わせると、「おお www.server.nda.co.jpは たしかにうちの管轄です」「IPは203.138.48.171ですよ、ご苦労様でした。お気をつけて。」と返してくれる。

かように、壮大な「お役所 たらいまわし現象」を地でいってるのが、DNSなわけだ。
したがって DNSは 少なくとも「自分のネットワークに関するIP情報」は すべて知っておかなければならない。
自分のネットワーク情報について、どこの誰が聞いてくるかわからないからな。

一方、DNSは もうひとつのオプションサービスを提供してくれる。

いちいち ユーザーが NICのトップDNSに問い合わせするのは、トラヒック上・めんどうだから、地元のDNSに
「このURLはなに?」
とリクエストすると、あなたのブラウザに代わって 各NIC機関やDNSに 代理で問い合わせを行ってくれるのだ。
つまり あなたが所属するプロバイダのDNSに 問い合わせれば、世界中のDNS情報を いつでも代わって入手してきてくれるわけである。
お役所にしては、なかなかサービスがよい。
したがって DNSには もうひとつ。「自分が管理していないドメインについて どこに問い合わせるべきか」という住所録を持たせてやる必要がある。

 

DNSに必要なデータファイル

このことから、DNSには 次のデータファイルを持たせてあげることになる。

これらはDNSの「仕事」について 必要なデータだ。

 

一方、DNSの「動作」について 必要なデータもある。

これら 合計 6つのファイルが DNSに必要なデータだ。

 


実際のセットアップ

では、これより 実際のセットアップに入ろう。
条件は次のとおり。

  1. 回線はOCNエコノミーで 16本のIPが与えられた「クラスCサブネット」である。

  2. すでに JPNICに対して ドメイン名の登録が完了している。

  3. セカンダリDNSは OCNのセカンダリDNSを使う。

 

なお設定表は 次の割り当て条件で記述されているから、保存後、自分のネットワークの割り当てに起きかえるとよい。

ドメイン名 nda.co.jp
IPアドレス 210.162.222.128/28 (210.162.222.128〜210.162.222.143)
DNSサーバ名 ns1.nda.co.jp (IPアドレス 210.162.222.130)
サーバじゃないけど なんか
名前をつけてみよう
twin.nda.co.jp(IPアドレス 210.162.222.131)

 

あたりまえのことだが、これから述べることは「設定例」であるから、そのまんま うのみにせず、自分なりに考えてやるべし。

 

DNSの自動起動をセットアップ

FreeBSD2.2.8-R rev2以上の場合、DNSとして「BIND」が標準でインストールされるようになっている。
だから 普通はインストールの必要はない。

だが FreeBSD2.2.1などは、デフォルトでは インストールされていないから /stand/sysinstall を起動して、(C)設定→(P)パッケージとして、パッケージやPortsコレクションから インストールしてくれ。
なお ここでは Bind4.x.x系を使って解説している。

さて、まず インストールされている「Bind」が ブートごとに 自動起動できるように、FreeBSDの設定を変えてあげよう。
もちろん ルート権限で行わねばならぬ。

 

#ee /etc/rc.conf

として、起動設定を見ると

### Network daemon (miscellaneous) & NFS options: ###

のところに

named_enable="NO" # Run named, the DNS server (or NO).
named_program="/usr/sbin/named" # named program, in case we want bind8 instead.
named_flags="-b /etc/namedb/named.boot" # Flags to named (if enabled).

と記述された行がある。
ここは DNSが どのように起動されるかを指定した部分だ。
これを、

named_enable="YES" # Run named, the DNS server (or NO).

とすると、自動起動するようになる。

 

ESC を押し LeaveMenu → a)save changes とすれば 自動起動設定は終了だ。
これを やっておかないと、いくら他の設定が正しくても 永遠に自動起動してくれないから、気がつかなければ ずいぶん悩んでしまう。
忘れるなよ。

 

DNS設定ファイルディレクトリに移動・作業開始!

# cd /etc/namedb

とすると、デフォルトの設定ファイルが出てくる。
これらを とりあえず 保存しよう。

#mkdir org
#mv * org

これで 邪魔者は org の中に入った。
ここからが 本格的な編集作業だ!

 

【1】正引きファイルの設定

正引きファイルを設定しよう。
これは ネットワークの内外から「 ドメイン」について、 電子的に質問された場合、そのドメイン名が、実際には なんという IPなのかを記述したファイルである。
これを「正引きファイル」と呼ぶ。

ブートファイルとリゾルブコンフィグファイルを除き、DNSでは 基本的に、これら設定ファイルを どんな名前でつけようと かまわない。
どんな名前だろうと、後から出てくるブートファイルに 書いてやればいいんだからな。

ただ、自分自身が わけがわかんなくなるといけないから、それぞれ 特徴的な名前をつけることにする。
ここでは 正引きファイルを db.zoneinfo として、ファイルを作る事にする。

# ee db.zoneinfo

中には 次のように書こう。

【 db.zoneinfo 】

nda.co.jp. IN SOA ns1.nda.co.jp. postmaster.ns1.nda.co.jp. (
1 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hours
604800 ; Expire after 1 week
86400 ) ; Minimum TTL of 1 day

;
nda.co.jp. IN NS ns1.nda.co.jp.
nda.co.jp. IN NS
ns-tk012.ocn.ad.jp.
nda.co.jp. IN MX 10 ns1.nda.co.jp.
;
localhost IN A 127.0.0.1
;
ns1.nda.co.jp. IN A 210.162.222.130
;
;
www.nda.co.jp. IN CNAME ns1.nda.co.jp.
mail.nda.co.jp. IN CNAME ns1.nda.co.jp.
;
twin.nda.co.jp. IN A 210.162.222.131
;

赤字のOCNセカンダリDNSは、自分の地域に見合ったものを設定したほうがよい

ここで 重要なのは
ns1.nda.co.jp. IN A 210.162.222.130
twin.nda.co.jp.
IN A 210.162.222.131
という部分で、これによって DNSは
「そもさん!」「せっぱ!」
ns1.nda.co.jp とはなんぞや
210.162.222.130 のことぞ!
ならば twin.nda.co.jp とはなんぞや
210.162.222.131 のこと!
と、やらかしてくれるようになるのだ。

 

【2】逆引きファイルの設定

逆引きファイルを設定しよう。
逆引きファイルとは 正引きの逆で、IPからドメイン名を導き出すためのファイルである。

ここでも例によって名前を db.in-addr-c にしよう。

#ee db.in-addr-c

中には 次のように書こう。

【 db.in-addr-c 】

@ IN SOA ns1.nda.co.jp. postmaster.ns1.nda.co.jp. (
1 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hours
604800 ; Expire after 1 week
86400 ) ; Minimum TTL of 1 day

;
IN NS ns1.nda.co.jp.
IN NS
ns-tk012.ocn.ad.jp.
IN PTR nda.co.jp.
IN A 255.255.255.240
;
130.222.162.210.in-addr.arpa. IN PTR ns1.nda.co.jp.
131 IN PTR twin.nda.co.jp.

逆引きというぐらいだから IPも逆に書くのである

ちなみに ここでは 後日、理解を深めるために

130.222.162.210.in-addr.arpa. IN PTR ns1.nda.co.jp.
131 IN PTR twin.nda.co.jp.

としているが、これは 次のように 書いてかまわない。

130 IN PTR ns1.nda.co.jp.
131 IN PTR twin.nda.co.jp.

双方ともに同じ意味だから、後者のほうがよいだろう。

なんにしても この設定で、
「そもさん!」「せっぱ!」
210.162.222.130 とはなんぞや
ns1.nda.co.jp のことぞ!
と、DNSが答えられるようになるのである...って もういいよな、このネタ。

 

【3】キャッシュファイルの設定

キャッシュファイルと聞くと、ちょっとDNSを知っている人は「1度引いたIPやドメイン情報を保存するファイルか?」と思うかもしれないが、さにあらず。
自分のところで管理していない「他人のドメイン」や「他人のIP」について質問されたとき、いったい どこに聞くべきか「DNS自身が判断するための」リストファイルのことである。

このファイルは自分で書かず ftp://rs.internic.net/domain/named.root から、公式なものを落としてきて仕込む。

なぜなら 自分のDNSで わからないIPやドメインを 探すわけだから、それらを聞く相手は 公式・最新であって正しいものでなくてはならないからだ。
さっそく ダウンロードしてくれたまえ。

ただ、ここで注意点がある。
よくやる ミスが named.root で落としてきたもんだから そのまんま /etc/namedb にコピーしてしまうことである。

まあ それでも ブートファイルで named.root をキャッシュのファイル名として 指定しまえばいいんだが、これはブートファイルの固定名「named.boot」と 非常にまぎらわしいため、初心者はもちろん 上級者でも混乱する場合がある。

ここでは root.cache に名前を変えておこう。

# mv named.root root.cache

これは 忘れないでくれよ。

 

とりあえず休憩

以上で、DNSの「仕事」に必要なファイルは整った。

DNSトラブルが起きるのは、この3つのうち「正引きファイル」「逆引きファイル」の いずれかが原因となることが多い。なんせ この二つは「あなたのネットワーク独自」に「考えて」 いろいろと書かねばならない。
他のファイルは どのネットワークでも ほとんど共通・修正なしで使用できるから、トラブルになりにくいわけだ。

問題が発生したら、「正引きファイル」「逆引きファイル」「ブートファイル」の順番で 疑ってかかろう。

では、一休みの後、作業再開だ!

 

【4】ループバックファイルの設定

ループバックファイル。別名・ローカルホストファイルとも言う。

このファイルは「自分自身(DNS)」とUNIXとの関係や、「セカンダリDNS」の場所を定義する。

これまでと比べて いじるところは少ない。が、気を抜かずに しっかりやってほしい。

このファイル名を db.localhost にしよう。

#ee db.localhost

中には 次のように書こう。

【 db.localhost 】

0.0.127.in-addr.arpa. IN SOA ns1.nda.co.jp. postmaster.ns1.nda.co.jp.
1 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hours
604800 ; Expire after 1 week
86400 ) ; Minimum TTL of 1 day

;
0.0.127.in-addr.arpa. IN NS ns1.nda.co.jp.
;
0.0.127.in-addr.arpa. IN NS ns-tk012.ocn.ad.jp.
;
1.0.0.127.in-addr.arpa. IN PTR localhost.
;

とても DNSの哲学書には見えないが、DNS自身が「自分はどこにいるのか?」を知るために必要なファイルだ。
これがないと DNSは立ちあがりすら ままならないから、ある意味で 最も重要なのかもしれない。

 

【5】リゾルブコンフィグファイルの設定

リゾルブコンフィグファイルは、DNSの遺言書である。
マシンが停止して DNSが完全に死んだか、ハングアップして脳死状態になった場合、DNSの仕事を 誰が・どの優先順位で引き継ぐか、事前に告知しておく「ドナーカード」とも言える。

ここで書かれた情報によって、生前中・セカンダリDNSに 自分の役割(ゾーン情報など)を転送し、死後はセカンダリDNSにコピーされた内容で セカンダリ動作が開始されるわけだ。※BINDのバージョンやOSにもよりけりだが 似たようなもんだ

したがって このファイルは、なかなかに厳粛で、おちゃめなファイル名など つけられない。

resolv.conf として ファイルを作り 書かねばならない。

#ee resolv.conf

中には 次のように書こう。

【 resolv.conf 】


domain nda.co.jp
nameserver 210.162.222.130
nameserver 203.139.160.69

domain 自分のドメイン
nameserver 現在作っているDNSのIP
nameserver セカンダリDNSのIP

遺言書である以上、書き方は ガチガチに決まっているらしい。

 

 

【6】ブートファイルの設定

作業も いよいよ大詰めだ。

これまで 書いてきたファイルのありかを、ひとつのファイルに一覧し、ブート時にDNSへ読み込ませるファイルを作るのだ。

このファイル名も固定で named.boot である。

#ee named.boot

中には 次のように書こう。

 

【 named.boot 】

;
directory /etc/namedb
;
primary 0.0.127.in-addr.arpa
db.localhost
;
primary nda.co.jp
db.zoneinfo
primary 222.162.210.in-addr.arpa
db.in-addr-c
primary 128.222.162.210.in-addr.arpa
db.in-addr-c
;
cache . root.cache
;

赤字が今回のオリジナルファイル名である

ここでは ちょっと 特徴的な部分がある。

210.162.222.128 のネットワークの逆引き(in-addr.arpa)は、普通222.162.210. と記述する。
インターネット上における、IPのグループ分けは 通常「クラスC」の256本が最小単位だから、これ以下は すべて同じグループと考える。

したがって、クラスCのネットワークでは 逆引きには
primary 222.162.210.in-addr.arpa db.in-addr-c
だけでいい。

だが、OCNはサブアロケーション(クラスCのこまぎれ)であるから、ひとこと 余分な指定が必要なのだ。

primary 128.222.162.210.in-addr.arpa db.in-addr-c

これを追加せねばならん。
つまり ネットワークアドレスを 全ケタにわたって、まったく逆から読んだ 数字(IP)を記述することになるわけだ。

雑誌などでは、このサブアロケーション部分を別ファイルにしている場合もある。
それは、それで行儀がいいのかもしれないが db.in-addr-c をしっかり書けば、ひとつにまとめちゃって いいわけだから、今回は そのようにした。

 

 

再起動と動作テスト

以上で、DNSの設定作業は 終わりである。
たいへん ご苦労さまでした。

が! まだ、ちゃんと動く保証はないから、チェックせねばならん!

# shutdown -r now

としてリブートしよう。
DNSだけを起動してもよいが、まあ 再起動したほうが確実だろう。

 

再エントリーして 次のように各項目をチェックする。

% nslookup
Default Server: ns1.nda.co.jp
Address: 210.162.222.130

> ns1.nda.co.jp ←正引きチェック
Server: ns1.nda.co.jp
Address: 210.162.222.130

Name: ns1.nda.co.jp
Address: 210.162.222.130

> 210.162.222.130 ←逆引きチェック
Server: ns1.nda.co.jp
Address: 210.162.222.130

Name: ns1.nda.co.jp
Address: 210.162.222.130

> localhost ←ローカルホストチェック
Server: ns1.nda.co.jp
Address: 210.162.222.130

Name: localhost.nda.co.jp
Address: 127.0.0.1

> ugtop.com ←ネットワーク外のドメインを引けるかチェック
Server: ns1.nda.co.jp
Address: 210.162.222.130

Name: ugtop.com
Address: 210.157.158.132

以上のように うまく引ければ DNSのセットアップは完了だ。


コマンドリスト

DNSの設定で よく使うコマンドや 文字列コマンドは 次のとおり。

 

トラブルシューティング

■nslookupが立ちあがらない

% nslookup
*** Can't find server : Unknown host

などとなる場合は、次の項目をチェック

 

■逆引きができない

> 210.162.222.130
Server: ns1.nda.co.jp
Address: 210.162.222.130

*** ns1.nda.co.jp can't find 210.162.222.130: Non-existent host/domain

あきらかに 正引きができているから、DNSが動いているにもかかわらず、そのDNSそのものを逆引きできないということは ヘンである。
その場合は 次の項目をチェック

なお ネットワーク外のドメインで 逆引きができないことがあるのは 不思議ではない。
じつは 自分の経路を 一時的にごまかすアングラテクニックのひとつに「逆引きさせない」という手法があるのだ。
たとえば 他人に自分のプロキシを使わせたくない場合、逆引きできないようにしておけば、IPからは それがプロキシだとは 瞬時には見えない。(調べればわかるけどね)

 

■ネットワーク外のIPやドメインを引けない

ネットワーク外のドメインやIPに限って 引けない場合がある。
その場合は 次の項目をチェック

 


番外編・DNSについて

●暫定的に他人のDNSを使う

OCNエコノミーを引いたばかりの頃は、まだDNSもメールサーバも立っていないから、自分のマシンからはOCNの公式DNSを使って インターネットにアクセスすることになる...が!
こいつが しこたま重い!!

そこで、隣近所のDNSを借りてみよう。本当はマナーにもエチケットにも反するけどな。

JPNIC のWhois を使って、自分の IPを引くと、自分のネットワークの他に「OCNクラスCサブアロケーション」も表示される。
そこで そのサブアロケーションをクリックすると、今度は そこに収容されているサブネット一覧が表示される。

OCNは その地方のNTT法人営業部などが一手に引きうけて、IPも配番していることが多いから、自分が収容されているエリアは、物理的なネットワーク距離も近いという事である。
したがって そこで「すでに立っているDNSサーバ」を、自分のマシンのネットワーク設定で「プライマリDNS」にすれば、かなり速くなる。

ただ あんまりやってると、そのうちバレて、ゾーン転送を含めてラッパーやフィルターされたりするから、ほどほどにね。

●秘密のゾーン情報を引き出してしまう

自粛しました

●逆引き情報は何のためにあるか・逆引きを禁止すると...

そもそもなんだけど 逆引きというのは 何のためにあるのだろうか。
たしかに、なんらかのトラブルが生じた場合、IPから いちいち NICのWhoisを引いてたら、かなりめんどうには違いない。

だが それは 人間様の都合であって、システムには IPがわかれば充分なんだから、名前なんか もう どうでもいいじゃん...と かねがね思っていた。
そこで 石川先生に質問してみた。

「逆引きは 元々は(セカンダリDNSなどとの)ゾーン転送のためにあるんだけど、(OCNなどのように)同一サブネット内でドメイン名を振る場合はあんまし使わないと思う。」
という おこたえだった。

また、OCNなどのサブアロケーションネットワークで 逆引きを禁止すると、外からは応答が極端に遅くなるという経験がある...とも 言っておった。

なるほど。
それに よーく考えると、Apacheなどで ドメインをAuthでフィルターするときなんかにも使うよな。
やっぱり 逆引きは 必要なものらしい。

(99/06/09・山崎はるか)


Network Diamond Apricot - SOHKA.JSC

■メモエリアに戻る