FreeBSD で NAT(NAPT) ゲートウェイ

NAT(NAPT)ゲートウェイの覚書きをつらつらと.
対象は 4.0-RELEASE 以降を対象としておく.

カーネルの再構築

さて,突然ですがカーネルの再構築は必要ありません.
FreeBSD 4.0-RELEASE 以降はローダブルモジュールが使えるので,おもむろにカーネルモジュールを呼び出せばOKです.
が,static に組み込んだ方が早い&トラブルが少ない為に,カーネルの再構築をした方が良いかと.
FreeBSD は 4.0-RELEASE 移行,カーネルモジュールとして,各機能が分割されている為,通常はカーネルの再構築は必要ありません.
ですが,ipfw + natd での NAT-Box を構築する場合は,カーネルコンパイルが必要になります.
これは,ipfw.ko というカーネルモジュールがデフォルトインストール時に用意されていますが,このモジュール内には natd と連携する機能が組み込まれていない為です.

FreeBSD 6 系からは,ipdivert.ko という,natd と連携する機能がモジュール化されていますので,コンパイルの必要はありません.

また,いらないデバイスや機能をカーネルからはずす事によって,カーネルサイズが小さくなりますし,パフォーマンスアップにもつながります.その為,カーネルコンパイルはチューニングの 1つとして今でも有効な方法です.

cd /sys/i386/conf
cp GENERIC NAT

と,GENERIC ファイルをコピーします.今回は NAT というファイル名.
コピーしたファイルを編集します.

ident     NAT
options   IPFIREWALL
options   IPFIREWALL_VERBOSE
options   IPDIVERT

さて,最初の行の ident は編集しているファイル名を指定します.今回は NAT というファイル名ですので,NAT.
次の行から2行は IPFirewall の設定です.2行目が IPFirewall を組み込むオプション.そしてその次の行が IPFirewall のログを取得する為のオプションです.
最後の行は,natd を動作する為に必要なオプションで,divert socket を利用可能にします.これが無いと natd で NAT が出来ません.まったくパケットのやり取りを行う事が出来ませんので注意.

編集が終わったらこんな感じです.

config NAT
cd ../compile/SERVER
make depend
make
make install


config NAT を実行するとメッセージが表示されます.そのディレクトリに移動して下さい.上の例は 5.3-RELEASE でやった場合です.4.x 系はディレクトリの場所が違いますので注意.
後は,make 関係を実行しエラーが出なければ make install でカーネルを差し替えてください.

NAT を有効に

/etc/rc.conf に IPFirewall 及び natd の設定をします.これによって起動時に IPFirewall,natd が動作します.
さらに忘れてはいけない事として,gateway 機能を On にしないと内部マシンからのパケットが下界へ飛んで行かないので注意して下さい.

firewall_enable="YES"
firewall_type="open"
firewall_logging="YES"
natd_enable="YES"
natd_interface="fxp0"
gateway_enable="yes"


この様に rc.conf に設定する事によって起動しますが,上の例では firewall_type が open なので,IPFirewall は素通りの設定です.きちんと firewall として動作させるのであれば /etc/rc.firewall を参照し書き換えてて下さい.
natd_enable="YES" で natd が動作します.natd_interface でどのインタフェースで natd を働かせるかを指定します.このインタフェースは パケットの出口のインタフェースを指定してください.内側ではありません.

先の設定がすべて終了したならば再起動しましょう.natd が動作するはずです.

おまけ

自分が使用しているカーネルの設定ファイルを貼り付けておきます.ただしこれは 5-STABLE のファイルです.注意して下さい.
また,このファイルの場合,PPPoE の設定も有効になっています.
fileNAT


Hiroyuki Seino http://www.seichan.org/ http://www.seichan.org/blog/
Today:3 Yesterday:0 All:8708