NAT(IPFILTER の ipnat による設定)
 概要
NAT(ネットワークアドレス変換)は,内部ネットワークのプライベートアドレスを, 外部インタフェースのグローバルアドレスに変換する機能である. FreeBSD の基本システムには ipfw,pf,IPFILTER の 3 種類のパケットフィルタが含まれており, それぞれが NAT 機能を持つ. このページでは IPFILTER のパケットフィルタ ipf と,NAT 機能 ipnat を使用する手順を示す.
以下の例では,外部インタフェースを em0,内部ネットワークを 192.168.33.0/24, 外部インタフェースのアドレスを 203.0.113.10 とする. インタフェース名は ifconfig の実行結果で確認し,使用中の環境の値に置き換えること.
設定手順
/etc/rc.conf の編集
/etc/rc.conf に次の行を追加する
|
gateway_enable="YES" ipfilter_enable="YES" ipfilter_rules="/etc/ipf.rules" ipnat_enable="YES" ipnat_rules="/etc/ipnat.conf" |
gateway_enable="YES" により net.inet.ip.forwarding が 1 に設定され, インタフェース間の IPv4 パケット転送が有効になる. ipfilter_rules と ipnat_rules は, それぞれフィルタ規則ファイルと NAT 規則ファイルのパスを指定する(既定値は /etc/ipf.rules,/etc/ipnat.rules).
エディタを使わずに設定する場合は,次のコマンドを実行する.
# sysrc gateway_enable=YES ipfilter_enable=YES ipnat_enable=YES # sysrc ipfilter_rules=/etc/ipf.rules ipnat_rules=/etc/ipnat.conf
/etc/ipf.rules の作成
/etc/ipf.rules を次の内容で新規に作成する
|
pass in all pass out all |
この 2 行は,すべてのパケットを通過させる設定である. NAT の動作確認用の最小構成であり,フィルタリングは行わない. 実運用では,必要な通信のみを許可する規則に置き換えること.
/etc/ipnat.conf の作成
/etc/ipnat.conf を次の内容で新規に作成する
|
map em0 192.168.33.0/24 -> 203.0.113.10/32 portmap tcp/udp 20000:30000 map em0 192.168.33.0/24 -> 203.0.113.10/32 |
外部インタフェースのアドレスが DHCP などで変化する場合は, 変換先アドレスに 0/32 を指定する. 0/32 は,そのインタフェースに設定されているアドレスを実行時に参照する記法である.
|
map em0 192.168.33.0/24 -> 0/32 portmap tcp/udp 20000:30000 map em0 192.168.33.0/24 -> 0/32 |
説明
1 行目: TCP と UDP のパケットについて,内部ネットワークのアドレスを外部インタフェースのアドレスに
変換し,変換後の送信元ポートを 20000 から 30000 の範囲から割り当てる。
変換後の送信元ポートが特権ポート(1024 未満)になることはない。
2 行目: TCP と UDP 以外のパケット(ICMP など)についてアドレス変換を行う。
1 行目に一致しないパケットがこの規則で処理される。
規則の反映
次のコマンドを実行する.
# service ipfilter start # service ipnat start
NAT 規則のみを読み込み直す場合は,次のコマンドを実行する.
# ipnat -CF -f /etc/ipnat.conf
-C は既存の NAT 規則の削除,-F は現在の変換テーブルの消去,-f は規則ファイルの指定である.
"Device not configured" というエラーが表示される場合は, IPFILTER のカーネルモジュール(ipl)が読み込まれていない. 次のコマンドを実行してモジュールを読み込む.
# kldload ipl
起動時に読み込ませる場合は,/boot/loader.conf に次の行を追加する.
| ipfilter_load="YES" |
クライアントの設定
クライアントのデフォルトゲートウェイを,NAT を行うマシンの内部側インタフェースのアドレス(この例では 192.168.33.1)に設定する. FreeBSD のクライアントでは,/etc/rc.conf に次の行を追加する.
| defaultrouter="192.168.33.1" |
確認
次のコマンドを実行する.
# ipnat -l
現在有効な NAT 規則と,変換中のセッションの一覧が表示される.
次のコマンドを実行する.
# ipnat -s
NAT の統計情報が表示される.
次のコマンドを実行する.
# ipfstat -io
現在有効な入力方向と出力方向のフィルタ規則が表示される.