BIND9、君だったのか

| コメント(0)

先日家にあるパソコン上の Firefox を 3.5.3 にアップデートしたおかげで、Web散策時のストレスは随分と減った。


ところが、改善されないものもあった。
突然停止したかのような、Webページ表示の遅延が散発する。
何か、日を追うごとにひどくなっているような気もした。
これは本腰を入れて対処しなくちゃならん、ということで、調査を開始した。

デスクトップ用パソコンで、時々異常に CPU使用率が上昇し、その時に Firefox の表示が遅いということは分かったのだが、なかなかそこから先に進まない。


あれやこれやしているうち、この表示遅延現象は、パソコンを起動して初めてブラウザを使ったときに頻発していて、使い続けているとあまり起こらないことに気づいた。


さては DNS(ドメインネームサーバ)がらみか。


我が家のローカルネットでは、ドメインネーム解決の効率を上げるためと、ローカルネット上のパソコンのドメインネーム管理の為に、FreeBSD-7.2Rの自宅サーバ上で DNS (=BIND-9)を動かしている。
MRTG で DNS のアクセス統計グラフを出しているので、それをみると、じわじわと索引エラー件数が上昇している。
ひどい時間帯には、アクセス件数の半分がエラーだ。

なんだこりゃ。

それで、Webページ表示遅延が起こっているときに、dig を使って、そのドメインネームの状況を見てみた。
すると、dig の応答すら遅い、というか、「Not Found」って、おいおい、なんだそれ (^^;

何回かやっていると dig でドメインネームを引けて、それとほぼ同時に Webページも表示される。
この事象が起きたドメインネームに共通していたのは、TTL値が、例えば 900秒(=15分)などと、かなり短いこと。
TTL値が小さければ、サーバトラブル等でゾーンデータ(ドメインネームとIPアドレスの対応を表わすデータ)を変更したい状況になった時に、ドメインとIPアドレスの組み合わせの変更がそれなりに早く反映するのだが、その分、頻繁にネームサーバに索引しに行くので、せっかく設置したキャッシングドメインネームサーバの効果が落ちる。
1週間とはいわんから、せめて半日とか、1時間以上に設定してくれんものかねぇ。

しかし、ネームサーバの索引頻度が上がったからといって、それが度々エラーになるのは解せない。
他に原因が隠れているのは間違いない。


試しに「BIND9 遅延」で検索してみたら、IPv6 設定がらみでエラーが発生するらしい。
※「BIND9のIPV6絡みで発生するエラーと遅延の解決方法

なるほど、BIND-9の不具合(エラーを無視してIPv6の応答を待ってしまう)によるものなのね。
IPv4のみ有効な環境では、BIND-9自体のIPv6機能を無効にしておかないと遅延が発生するのだそうだ。

一般的な対処方法としては、BIND-9をビルドする際に、コンフィグオプションでIPv6無効を指定すればいいのだが、FreeBSD の場合はBIND-9がOSに組み込まれているので、お手軽に再ビルドというわけにもいかない。

実はFreeBSD組み込みのBINDでは、簡単に対処できる。
起動オプション「-4」を指定したスクリプトでnamedを起動すればいいのである。
※「FreeBSD 日本語マニュアル named(8)
FreeBSD-7.2-RELEASEオリジナルの起動スクリプト(/etc/rc.d/named)だったら、次の差分ファイルのように修正するだけである。
	--- ./named.orign       2009-05-01 15:56:44.000000000 +0900
	+++ ./named     2009-10-26 21:11:23.000000000 +0900
	@@ -168,6 +168,6 @@
	 #
	 required_dirs="$named_chrootdir"       # if it is set, it must exist
	 pidfile="${named_pidfile:-/var/run/named/pid}"
	-command_args="-u ${named_uid:=root}"
	+command_args="-4 -u ${named_uid:=root}"
	
	 run_rc_command "$1"
スクリプトを修正して、named(=BIND-9)を再起動すると、うまくいった。
ネームサーバの索引遅延は起こらなくなった。(^^)


【教訓】IPv6が使えない環境では、「IPv6機能無効」でアプリケーションを構築しよう。

ちなみに、ports で、portupgrade 関連コマンドを使って導入するアプリケーションを、一律「IPv6機能無効」にするには、 /usr/local/etc/pkgtools.conf に次のような記述(太字部分)をするとよい。

	MAKE_ARGS = {
	  'databases/mysql50-client' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
	  'databases/mysql50-server' => 'WITH_CHARSET=ujis WITH_XCHARSET=all',
	  'editors/openoffice.org-2' => 'LOCALIZED_LANG=alllangs',
	  '*'	=>	'WITHOUT_IPV6=yes',
	}
(11月3日追記)
Sendmail のIPv6機能も無効にしないと、「no ipv6 socket」といった類の警告(どちらかというとエラー)メッセージが出ます。
修正するのは /etc/mail/sendmail.cf ファイルです。
FreeBSDでは、一般的に ~.mc ファイルを修正して、「# make install」として、m4によるsendmail.cfファイル作成を行います。
※もちろん、Linuxと同様に、m4を直接起動してもOKです。
@@ -83,7 +83,7 @@
	
 dnl Enable for both IPv4 and IPv6 (optional)
 DAEMON_OPTIONS(`Name=IPv4, Family=inet')
-DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O')
+dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O')

コメントする

このブログ記事について

このページは、山椒魚が2009年10月27日 10:56に書いたブログ記事です。

ひとつ前のブログ記事は「煎茶のすすめ」です。

次のブログ記事は「自宅サーバが壊れた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

おすすめサイト

おすすめ

サーバ/OS技術書

技術書一般

  • 長沢工:天体の位置計算 増補版

    長沢工:天体の位置計算 増補版

    天体の視位置を計算する「位置天文学」の入門書。ロングセラー。刊行が古いために、具体的計算に使われている星表等の定数は、1984年以前の計算システムによるものである。しかし、現在、新刊で入手可能な同種の書籍は限られており、天体位置計算の考え方が変った訳ではないので、現在でも充分に役立つだろう。