一般に 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 台がインターネットに接続しています。 残りのマシンはその 「ゲートウェイ」 マシンを通してインターネットにアクセスします。
次のオプションがカーネルコンフィギュレーションファイルに必要です。
さらに、次のオプションを入れてもよいでしょう。
下記の設定を /etc/rc.conf
で行わなければなりません。
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
に以下の行を追加し、
コンフィグレーションファイルを定義してください。
/etc/natd.conf
ファイルでは、一行ごとにオプションを設定します。たとえば、
次節の例では以下のような行を含むファイルを用意してください。
コンフィグレーションファイルに関する、より詳細な情報については、
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) に渡さなければなりません。
書式は以下のとおりです。
上記の例では、引数は以下のようにします。
これで適切な 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
の書式は以下のとおりです。
localIP | LAN クライアントの内部 IP アドレス |
publicIP | LAN クライアントに対応する外部 IP アドレス |
上記の例では引数は以下のようになります。
-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> まで電子メールを (英語で) 送ってください。