22.13. ネットワークアドレス変換 (NAT)
戻る | 第22章 高度なネットワーク | 次へ

## 22.13. ネットワークアドレス変換 (NAT)

寄稿: Lee Chern [FAMILY Given].

### 22.13.1. 概要

一般に natd(8) として知られている FreeBSD ネットワークアドレス変換デーモンは、 raw IP パケットを受信して、 ソースアドレスをローカルマシンに変更し、 そのパケットを外向きの IP パケットの流れに再注入するデーモンです。 natd(8) は、 データが戻ってきたときに、データの本来の場所を判別し、 もともと要求した相手へデータを返すことができるようにソース IP アドレスとポートを変更します。

NAT の最も一般的な使用法は、 一般的にはインターネット接続共有として知られているものを実行することです。

### 22.13.2. 設定

IPv4 の IP 空間が足りなくなりつつあること、および、 ケーブルや DSL のような高速の加入者回線利用者の増加によって、 人々はますますインターネット接続を共有する手段を必要としています。 一つの接続および IP アドレスを通していくつものコンピュータを回線に接続する能力がある natd(8) が合理的な選択になります。

もっともよくあるのは、ユーザが 1 つの IP アドレスでケーブルまたは DSL 回線に接続されたマシンを持っており、 インターネットへのアクセスを LAN 経由でいくつかのコンピュータに提供するのに、 この接続されたコンピュータを使用したいという場合です。

そのためには、インターネットに接続されている FreeBSD マシンはゲートウェイとして動作しなければなりません。 このゲートウェイマシンは 2 つの NIC が必要です (1 つはインターネットルータへ接続するためで、もう 1 つは LAN に接続するためです)。 LAN 上のすべてのマシンはハブまたはスイッチを通して接続されます。

インターネット接続を共有するために、 このような設定がよく使用されています。 LAN 内のマシンの 1 台がインターネットに接続しています。 残りのマシンはその 「ゲートウェイ」 マシンを通してインターネットにアクセスします。

### 22.13.3. 設定

次のオプションがカーネルコンフィギュレーションファイルに必要です。

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) の動作に際して特別の修正を必要としません。

### 22.13.4. ポート転送

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) をご覧ください。

### 22.13.5. アドレス転送

複数の 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

localIP | LAN クライアントの内部 IP アドレス
publicIP | LAN クライアントに対応する外部 IP アドレス

上記の例では引数は以下のようになります。

-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) を参照してください。

戻る | 上に戻る | 次へ
22.12. NTP | ホーム | 22.14. inetd 「スーパサーバ」

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。