私にメールする前に、まずこの章を読んでください。
読んでいる HOWTO が間違っています。この HOWTO の古い版では bind 4 のことを扱っていますので、そちらを読んでください。 http://langfeldt.net/DNS-HOWTO/ にあります。
ヒント。 forward only;
。また
query-source port 53;
が named.conf
ファイルの ``options'' の部分に必要になるでしょう。
キャッシュ専用のネームサーバ
の節にある例でちょっと触れましたね。
www.busy.site
に対する負荷を
分散させるようにするにはどうすれば良いでしょうか。
www.busy.site
に対する A レコードを複数用意して、
4.9.3 以降の BIND を用いましょう。 BIND は回答を round-robin
してくれます。古い版の BIND では、これは動作しません。
root.hints
ファイルを使わないようにして、
ゾーンファイルだけを使いましょう。
root.hints
ファイルをいちいち更新する必要もないわけです。
プライマリ (マスタ) のサーバが、アドレス 127.0.0.1 だったと して、以下のような行をセカンダリの named.conf に記述します。
zone "linux.bogus" { type slave; file "sz/linux.bogus"; masters { 127.0.0.1; }; };
zone 情報を取ってこれるマスタサーバが他にもある場合は、
masters
リストに `;' (セミコロン) で区切って
追加することもできます。
これに関連した記事を 4 つ紹介しましょう。
私は、最近のバージョンの BIND では、これ [編注: ファイルを切り
替える] がもう不必要であることに気がつきました。 "forwarders"
指定の他に"forward" 指定が可能になっていて、後者で前者の使われ方を
制御できるようになっていたんです。デフォルトの設定は
"forward first" で、 最初にそれぞれの forwarders に問い合わせを行い、
失敗した場合にはじめて自分自身で聞き込み調査を始めます。これが
ラインが切れている時に gethostbyname() にやたらと時間がかかって
しまう、おなじみの振る舞いです。しかし "forward only" を設定して
おくと、 BIND は forwarders から反応が帰ってこないとすぐに
あきらめます。したがって gethostbyname() も速やかに返ってくる
ことになります。ですから技巧を使って /etc のファイルを切り替え、
サーバを再起動する必要はないのです。
私の場合では、以下の行を named.conf ファイルの options { }
セクションに追加するだけでした。
forward only;
forwarders { 193.133.58.5; };
とってもうまく動作してます。この方法のただ一つの欠点は、非常に
洗練された DNS ソフトウェアを、キャッシュ動作だけしかしない
単機能なソフトにしてしまう、ということです。ただ DNS キャッシュ
だけをするソフトがあれば私は実はそっちを使いたいんですけど、
Linux ではそのようなソフトはないみたいですね。
IP マスカレードをさせている手元のマシンで named を走らせています。
root.hints ファイルを二つ用意します。一つは root.hints.real で、
本物の root サーバの名前が書かれています。もう一つは
root.hints.fake で、その内容は...
----
; root.hints.fake
; this file contains no information
----
です。切断するときには root.hints.fake ファイルを root.hints に
コピーして named を再起動します。
接続するときには root.hints.real ファイルを root.hints にコピー
して named を再起動します。
これらは ip-down と ip-up でそれぞれ自動実行させています。
オフラインの時にドメイン名に対する問い合わせを行うと、named は
それらに付いて知りませんから、以下のようなエントリを messages に
出力します。
Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN
これは気にしなくてもかまいません。
私のところではこれで全く問題なく動作しています。ネットから切断
されているときは、ローカルマシンのネームサーバを外部のドメイン名に
対するタイムアウトの待ち時間なしで使えますし、接続されているとき
には外部のドメインに対する問い合わせを普通に行うことができています。
しかし、Peter Denison は Ian のやり方がまだ充分でないと教えてくれました。 彼のメッセージによると:
オンライン時) キャッシュされたエントリ (とローカルネットのエントリ) は
ただちに提供する。キャッシュされていないエントリについては、
自分の ISP のネームサーバにフォワードする。
オフライン時) ローカルネットワーク関連の問合わせはただちに提供する。
その他の問合わせについては **ただちに** 失敗する。
root キャッシュファイルの変更と、問合わせのフォワードとの組み合わせは
うまく動作しません。
そこで、私は二つの named を (地域 LUG で議論しながら) 以下のように
設定しました。
named-online: ISP のネームサーバへフォワード
localnet ゾーンのマスター
localnet の逆引きゾーン (1.168.192.in-addr.arpa) のマスター
0.0.127.in-addr.arpa のマスター
ポート 60053 で待機
named-offline: フォワードを行わない
root キャッシュファイルは「にせもの」にする
3 つのローカルゾーンのスレーブ (マスターは 127.0.0.1:60053)
ポート 61053 で待機
そしてこれをポートフォワードと組み合わせ、ポート 53 をオフラインの時には
61053 に、オンラインの時には 60053 にフォワードします (私は 2.3.18 で
新しい netfilter パッケージを使いましたが、以前の (ipchains) の機構でも
動作するはずです。
ただしこれはマシンの外側からの問合わせには動作しません。 BIND 8.2 には
小さなバグがあって、スレーブをマスターと同じ IP アドレスでは (ポートが
異なっても) 同時に動作できないからです (開発者には知らせました)。
明らかなパッチなので、おそらくすぐに直るでしょう。
インターネットに対してモデム経由でたまにしか接続しないマシンには、
私はすべて named を走らせていました。ネームサーバはキャッシュと
してのみ動作し、 authority をもつ zone は保有せず、すべてを
root.cache ファイルに書かれたネームサーバに問い合わせに行く設定に
していました。 Slackware の流儀に従い、named は nfsd や mountd の
前に起動していました。
マシンのうちの一つ (Libretto 30 notebook) で、問題が起こりました。
私のローカルな LAN につながっている他のマシンから、そのマシンを
mount できなくなってしまうのです (ごくたまにできる時もありますが)。
これは接続形式に依存せず、 PLIP でも PCMCIA のイーサネットカードでも、
シリアル経由の PPP でも同じように起こりました。
しばらく実験と考察を行った後、以下のような結論に達しました。
nfsd と mountd が起動時に portmapper に対して行った登録動作
(私はこれらのデーモンを、通常通りブート時にスタートしていました)
を、 named はめちゃめちゃにしてしまうのです。 named の起動を
nfsd と mountd のあとに行うようにしたところ、この問題は完全に
解決しました。
ブートの順序をこのように変更することによる不利はまったくありません
から、潜在的な問題を避けるために、このようにすることをすべての
皆さんにお薦めしたいと思います。
キャッシュはすべてメモリに保管されています。ディスクに 書き込まれることはまったくありません。 named を kill すると、キャッシュも失われます。 キャッシュを制御する方法はありません。 named のキャッシュ管理は単純なルールに従っているからです。 キャッシュそのものも、あるいはキャッシュのサイズも、 どんな理由があれ制御できません。 この点を「修正」したければ named をハックしても良いでしょう。 おすすめはできませんが。
いいえ、 named は終了時にキャッシュを保存しません。 つまり named を kill して再起動するたびに、 キャッシュはゼロから再構成されます。 キャッシュをファイルに保存するように named に指示する方法はないのです。 この点を「修正」したければ named をハックしても良いでしょう。 おすすめはできませんが。
linux-rules.net
というドメインを立ち上げたいのですが、
このドメインを割り当ててもらうにはどうすればいいのでしょうか。
ネットワークサービスプロバイダに連絡してみれば、 おそらく助けてもらえるでしょう。なお世界のほとんどの地域では、 ドメインの入手にはお金が必要であるはずです。
両方とも高度な話題になります。 いずれも http://www.etherboy.com/dns/chrootdns.html で取り上げられています。この話題は、 これ以上ここでは扱いません。