一般に natd(8) として知られている FreeBSD ネットワークアドレス変換デーモンは、 raw IP パケットを受信して、 ソースアドレスをローカルマシンに変更し、 そのパケットを外向きの IP パケットの流れに再注入するデーモンです。 natd(8) は、 データが戻ってきたときに、データの本来の場所を判別し、 もともと要求した相手へデータを返すことができるようにソース IP アドレスとポートを変更します。
NAT の最も一般的な使用法は、 一般的にはインターネット接続共有として知られているものを実行することです。
IPv4 の IP 空間が足りなくなりつつあること、および、 ケーブルや DSL のような高速の加入者回線利用者の増加によって、 人々はますますインターネット接続を共有する手段を必要としています。 一つの接続および IP アドレスを通していくつものコンピュータを回線に接続する能力がある natd(8) が合理的な選択になります。
もっともよくあるのは、ユーザが 1 つの IP アドレスでケーブルまたは DSL 回線に接続されたマシンを持っており、 インターネットへのアクセスを LAN 経由でいくつかのコンピュータに提供するのに、 この接続されたコンピュータを使用したいという場合です。
そのためには、インターネットに接続されている FreeBSD マシンはゲートウェイとして動作しなければなりません。 このゲートウェイマシンは 2 つの NIC が必要です (1 つはインターネットルータへ接続するためで、もう 1 つは LAN に接続するためです)。 LAN 上のすべてのマシンはハブまたはスイッチを通して接続されます。
インターネット接続を共有するために、 このような設定がよく使用されています。 LAN 内のマシンの 1 台がインターネットに接続しています。 残りのマシンはその “ゲートウェイ” マシンを通してインターネットにアクセスします。
次のオプションがカーネルコンフィギュレーションファイルに必要です。
options IPFIREWALL options IPDIVERT
さらに、次のオプションを入れてもよいでしょう。
options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_VERBOSE
下記の設定を /etc/rc.conf で行わなければなりません。
gateway_enable="YES" firewall_enable="YES" firewall_type="OPEN" natd_enable="YES" natd_interface="fxp0" natd_flags=""
gateway_enable="YES" | マシンがゲートウェイとして動作するように設定します。 sysctl net.inet.ip.forwarding=1 コマンドを実行しても同じ効果がえられます。 |
firewall_enable="YES" | /etc/rc.firewall にあるファイアウォールルールを起動時に有効にします。 |
firewall_type="OPEN" | これはあらかじめ定義されている、 すべてのパケットを通すファイアウォールルールセットを指定します。 他のタイプについては /etc/rc.firewall を参照してください。 |
natd_interface="fxp0" | パケットを転送するインタフェースを指定します (インターネットに接続されたインタフェース)。 |
natd_flags="" | 起動時に natd(8) に渡される追加の引数 |
/etc/rc.conf に前述したオプションを定義すると、起動時に natd -interface fxp0 が実行されます。 これは手動でも実行できます。
注意: オプションの定義に natd(8) のコンフィグレーションファイルを使うこともできます。 この場合には、/etc/rc.conf に以下の行を追加し、 コンフィグレーションファイルを定義してください。
natd_flags="-f /etc/natd.conf"/etc/natd.conf ファイルでは、一行ごとにオプションを設定します。たとえば、 次節の例では以下のような行を含むファイルを用意してください。
redirect_port tcp 192.168.0.2:6667 6667 redirect_port tcp 192.168.0.3:80 80コンフィグレーションファイルに関する、より詳細な情報については、 natd(8) マニュアルページの
-f
オプションを調べてください。
LAN にぶら下がっているマシンおよびインタフェースのそれぞれには RFC 1918 で定義されているプライベートネットワーク空間の IP アドレス番号を割り当て、デフォルトゲートウェイアドレスを natd マシンの内側の IP アドレスにすべきです。
たとえば LAN 側のクライアント A および B は IP アドレス 192.168.0.2 および 192.168.0.3 を割り当てられており、 natd マシンの LAN インタフェースは IP アドレス 192.168.0.1 を割り当てられています。 クライアント A および B のデフォルトゲートウェイは natd マシンの 192.168.0.1 に設定されなければなりません。 natd マシンの外部、 またはインターネットインタフェースは natd(8) の動作に際して特別の修正を必要としません。
natd(8) の短所は、インターネットから LAN 内のクライアントにアクセスできないということです。 LAN 内のクライアントは外部に向けて接続を行うことはできますが、 入って来るものを受け取ることができません。これは、LAN クライアントのどれかでインターネットサービスを動かそうとした場合に、 問題になります。これを何とかする単純な方法は natd マシンから LAN クライアントへ、 選択したインターネットポートを転送することです。
たとえばクライアント A で実行されている IRC サーバがあり、 クライアント B 上で実行されている web サーバがあるとします。 これが正しく動作するには、ポート 6667 (IRC) および 80 (web) への接続を対応するマシンに転送しなければなりません。
-redirect_port
に適切なオプションを加えて natd(8)
に渡さなければなりません。 書式は以下のとおりです。
-redirect_port proto targetIP:targetPORT[-targetPORT] [aliasIP:]aliasPORT[-aliasPORT] [remoteIP[:remotePORT[-remotePORT]]]
上記の例では、引数は以下のようにします。
-redirect_port tcp 192.168.0.2:6667 6667 -redirect_port tcp 192.168.0.3:80 80
これで適切な tcp ポートが LAN クライアントマシンに転送されます。
-redirect_port
引数は個々のポートを対応させるポート範囲を示すのに使えます。 たとえば tcp 192.168.0.2:2000-3000 2000-3000 は 2000 番から
3000番ポートに受け取られたすべての接続を、 クライアント A
上の 2000 番から 3000 番に転送します。
これらのオプションは natd(8) を直接実行するか、 /etc/rc.conf 内の natd_flags="" オプションで設定するか、 もしくはコンフィグレーションファイルから渡してください。
設定オプションの詳細については natd(8) をご覧ください。
複数の IP アドレスが利用可能ですが、 それらが 1 台のマシン上になければならないときには、 アドレス転送が便利です。 これを用いれば natd(8) は LAN クライアントのそれぞれに外部 IP アドレスを割り当てることができます。 natd(8) は LAN クライアントから外部へ出て行くパケットを適切な外部の IP アドレスで書き直し、 そして特定の IP アドレスに対してやって来るトラフィックのすべてを、 指定された LAN クライアントに転送します。 これは静的 NAT としても知られています。 たとえば 128.1.1.1, 128.1.1.2 および 128.1.1.3 の IP アドレスが、 natd ゲートウェイマシンに属しているとします。 128.1.1.2 および 128.1.1.3 は LAN クライアントの A および B に転送される一方で、128.1.1.1 は natd ゲートウェイマシンの外部 IP アドレスとして使用することができます。
-redirect_address
の書式は以下のとおりです。
-redirect_address localIP publicIP
上記の例では引数は以下のようになります。
-redirect_address 192.168.0.2 128.1.1.2 -redirect_address 192.168.0.3 128.1.1.3
-redirect_port
と同様に、これらの引数は /etc/rc.conf 内の natd_flags=""
オプションで設定するか、 コンフィグレーションファイルから渡すことで指定できます。
アドレス転送では、 特定の IP
アドレスで受け取られたデータはすべて転送されるので、 port 転送は必要ありません。
natd マシン上の外部 IP アドレスは、 アクティブで外部インタフェースにエイリアスされていなければなりません。 やりかたは rc.conf(5) を参照してください。
本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で)
連絡してください。
本文書に関する質問については、<doc@FreeBSD.org> まで電子メールを (英語で)
送ってください。