お手軽 NAT TX-ERROR 対策

Posted on 2007年11月15日 | Comment (0) | TrackBack (0)

いろんなサイトに書かれてるこれ(NAT TX-ERROR hogehoge....)は、NATテーブルが溢れてしまうために起こるもの。

良く分からない人のために書いておくと、、インターネット上の相手と通信するためにはグローバルアドレスじゃないとだめなんす。で、このグローバルアドレスってのはプロバイダ等から割り当てられるもので、家庭なんかだとIP 1つってのが普通。

IPが1つじゃパソコンが1台しかつなげないので、プライベートに勝手にIPを割り当てておいて、インターネット上に出るときだけグローバルアドレスに変換してあげましょう、というのがこのNATというもの。そしてその機能を担うのが、よくあるブロードバンドルーターという装置。
ルーターを境界に、上流はグローバルアドレス、下流はプライベートアドレスになっているわけですね。

で、このローカルIP,portと通信相手のIP,port の対応表を保持しているのがNATテーブルと呼ばれるものです。これが溢れてしまって、新しいエントリを登録できなくなる(新しい通信が開始できなくなる)ことを、NATテーブルの溢れと呼んでいます。

うちでも起きてます

うちも安物のへっぽこルーターなので、この問題は相当昔から発生していました。
発生するとその後一切の通信ができなくなるわけではなく、有効期限が切れてテーブルが開放されればまた通信できるようになるんですよね。
発生頻度もそう多くはありませんでしたので、有効期限を短めに設定することでしのいでいました。

現在3分持ちません^^

詳しくは述べませんが、逆引きして相手の素性を調べるような仕掛けを突っ込んであります。
なんだかこのところいろんなところからのアクセスが多くて(主にメール...)、どばば~っと逆引きが走り、あっという間に NAT TX-ERROR が出るようになってしまいました(汗)。
ルーター再起動後、3分持ちません。

解決法

要は、NATテーブルに負担をかけずに名前が引ければよいと、いうことです。
ほとんどのルーターにはキャッシュサーバーな機能を積んでいますので、それを利用して名前解決を行えば、NATを経由せずに名前解決が行えると、そういう理屈。

今まで ローカルにあるキャッシュサーバーや、プロバイダのdnsサーバを指定していたネームサーバーの設定のところに、ブロードバンドルーターのIPを指定します

実際にこのやり方で NAT TX-ERROR が解消しました。ルーターには負担をかけますが、今のところルーターが落ちる,おかしな情報を返すなどの問題は発生していません。

うちは内部にもう1つキャッシュサーバ(dnscache)がいるので、dnscache をFORWARDONLYに設定し、その向きをブロードバンドルーターにしています。そして内部にある全てのPCは、このキャッシュサーバーを見るようにしてあります。
具体的には次のように設定。(ルーターのIPが192.168.1.1の場合)

# echo 1 > /service/dnscache/env/FORWARDONLY
# 192.168.1.1 > /service/dnscache/root/servers/@

内部にもう1つキャッシュサーバーを作る意味があんのかよ?ってあたりについては、あるのです。
外部に公開してるサーバーがローカルな環境にある場合、内部からの問い合わせならプライベートIPを返さないと不便でしょ。普通にブロードバンドルーターでそういうものの名前を引くと、グローバルアドレスを返すわけで。
内部環境の逆引きもブロードバンドルーターのキャッシュサーバーではできませんが、もう1段キャッシュサーバーを入れてちゃんと設定しておけば、内部環境の逆引きもできるようになります。

ついでにキャッシュサイズをでかくしておくとトラフィックを減らすのにも貢献します。

へぼルーターで頑張ろう

そろそろまともなルーターを買わないとダメかなぁ~とあきらめかけたのですが、どうにかなるものですね。
同様の問題で悩んでいる人がいたらぜひ試してみてください。

トピック

トラックバック

このエントリーのトラックバックURL:

コメント

コメントフォームに記入し投稿してください

初コメントのときは、このてらかどの承認が必要になります。承認されるまでコメントは表示されません。そのときはしばらく待ってください :)





Recent Entries
Archives
Feed
Search

Powered by

Valid CSS!