柳澤です。

YAMANEKO/Mao さんは書きました:
> たびたびお世話になります、もりもとです
> 
> DNSサーバにおいて、
> ipfwで limit src-addr の設定をしているのですが、
> そのため動的ルールが限界いっぱいまで出来ておりまして、
(snip)
> そこで、動的ルールの最大数を減らせばいいのでは、と思いつき、

動的ルールの使用率が高いのに最大数を減らすのは良くないと思いますよ。
しかし、検索の時間も馬鹿にならなくなってきているようなので、
この状況での解決策は必要最低限のものだけ動的ルールを使うように
することかと思います。

>  net.inet.ip.fw.dyn_max=8192
> 
> となっていたので、少し減らしてみたところ、
> 
>  net.inet.ip.fw.dyn_max=100 (極端!?)
> 
> DNSのUDP/53のパケットがほとんどまったく通らなくなってしまいました。

DNSのqueryとreplyはかなり多いパケットを投げることになるので、
keep-stateすると割とすぐにテーブルを使い果たします。

未確認ですが、UDPは状態を持たないため、keep-stateした場合はDNSのreplyが
来ても一定時間テーブルを保持すると思います。これがテーブルを使い果たす
原因になっていると思います。ちなみに、昔ipfwを使っていた頃は自分も
同じような経験をしたので、DNSだけはkeep-stateしなくても動くように
ルールを書いていました。外部に通信するDNSソースポートを固定し、
そこに向かう外部からの通信を無条件で許可しました。

最近はwebalizerのようにDNSクエリーを外に投げまくる必要があるソフトを
使わないためか、pfにしたためか、これについて特に何も設定してないですね。
pfでは状態を検索するテーブルをAVL木で格納しており、検索性能が
エントリ数nに対してO(log n)となることの効果かもしれません。
http://www.benzedrine.cx/pf-paper.html

メールによる返信