NATディスクリプター機能 概要


1. 概要

この文書では、ヤマハルーターが搭載しているNATディスクリプター機能の仕様を説明します。

1.1. NAT、NAPT、IPマスカレード

ヤマハルーターでは、アドレスを一対一に対応づける変換方法を「NAT」、アドレスを多対一に対応づける変換方法を「IPマスカレード」と呼んでいます。一般には、IPマスカレードは「NAPT」と呼ばれることが多いようですが、ヤマハルーターではIPマスカレードという表記に統一しています。

※関連資料:RFC2663

1.2. バインド

NATでは変換前のアドレスと変換後のアドレスを対にして管理します。IPマスカレードでは、アドレスに加えて、ポート番号などの情報も管理する必要があります。ヤマハルーターでは、このような変換の対応付けを「バインド」と呼んでいます。また、バインドを決めることを単に「バインドする」と表現しています。

1.3. 静的変換と動的変換

あらかじめバインドが決まっているものを「静的変換」と呼び、パケットの発生時にバインドが決まるものを「動的変換」と呼びます。また、NATで変換する場合には、「動的NAT」、「静的NAT」と呼び、IPマスカレードで変換する場合には、「動的IPマスカレード」、「静的IPマスカレード」と呼びます。

動的変換では、パケットの発生時にバインドが決まり、一定時間の寿命が経てばバインドは消滅します。ただし、通信中にバインドが消滅すると通信が途絶してしまうので、通信中には寿命が減らない仕組みが用意されています。

静的変換では、最初からバインドが決まっていて、常にバインドが存在します。したがって、これらのバインドに含まれるアドレスやポート番号は、パケットの有無に関係なく予約されていて、動的変換で使うことはありません。

1.4. 内側と外側

NATやIPマスカレードの典型的な用途は、プライベートアドレスを隠すことです。端末にはプライベートアドレスを割り当てますが、プライベートアドレスを使ってインターネットと通信することはできないので、端末の送信するパケットに含まれるプライベートアドレスをグローバルアドレスに書き換えます(下図)。

プライベートアドレスの書き換え

このとき、端末のアドレスは変換されますが、サーバーのアドレスは変換されません。そこで、ルーターを境にして、アドレスを変換すべきネットワークを「内側」と呼び、そうでないネットワークを「外側」と呼ぶことにします。多くのケースでは「内側がLAN、外側がWAN」となりますが、運用によっては、この限りではありません。

また、上の例では192.168.0.1が1xx.2.3.4に変換されますが、これらはともに端末をさしているので、区別する呼び名がある方が便利です。そこで、内側で使うアドレスを「内側アドレス」、外側で使うアドレスを「外側アドレス」と呼んで区別します。この例では、192.168.0.1は内側アドレスで、1xx.2.3.4は外側アドレスになります。

なお、ここでいう内側・外側は、インターフェースの内側・外側とは別の概念です。今後、説明の中で混乱しやすいところでは「NAT/IPマスカレードの内側」というように、区別できるように表現していきます。多くのケースでは、NATやIPマスカレードの外側をインターフェースの外側にする方が分かりやすい設定になりますが、ネットワークの構成によっては逆にせざるをえないこともあります。ヤマハルーターでは前者を「順方向」、後者を「逆方向」と呼びます。

1.5. NATディスクリプター

ヤマハルーターでは、バインドを決めるためのポリシーを「NATディスクリプター」と呼んでいます。NATディスクリプターの基本要素は次の5点です。

NATディスクリプターの機能については3章で説明します。

1.6. 処理の位置づけ

NATディスクリプター機能が動作するタイミングは、パケットをインターフェースへ送信するときと、インターフェースから受信するときです。インターフェースの種類は問わず、LAN、PP、TUNNELインターフェースで動作します。PP Anonymousインターフェースでも動作しますが、相手ごとにポリシーを変えることはできないので、使い方は限られます。

フィルタリングやルーティングとの位置関係は下図のようになっています。特に、フィルタリングとNATディスクリプターの位置関係が重要です。インターフェースへ送信するパケットは、先にフィルタリングの処理を受けてから、NATディスクリプターの処理を受けます。逆に、受信するパケットは、NATディスクリプターの処理を先に受けます。

NATの処理の位置づけ

フィルタリングの設定で記述するアドレスやポート番号には注意が必要です。例えば、送信するパケットをフィルタリングするときには、NATディスクリプターで処理する前にフィルタリングの処理をすることになるので、フィルタリングの設定では外側アドレスではなく内側アドレスを使います。

2. パケットの扱い

2.1. インターフェースとNATディスクリプター

変換のルールはNATディスクリプターによって定義されます。そして、それぞれのインターフェースは最大16個のNATディスクリプターを持つことができます。パケットがインターフェースを通過するときには、インターフェースが持つNATディスクリプターにしたがって、パケットを変換します。

インターフェースが持つNATディスクリプターを設定するためには、ip INTERFACE nat descriptorコマンドを使います。このコマンドの設定例は次のようになります。

      ip lan2 nat descriptor 1 2
    

この例では、LAN2インターフェースが持つNATディスクリプターの番号が1〜2であり、それらが順方向に適用されることを意味します。

Rev.8.03.37以降のファームウェアでは、順方向に加えて、逆方向にも適用することができます。

      ip lan2 nat descriptor 1 2 reverse 3 4 ★
    

また、順方向のNATディスクリプターを削除して、次のように設定することもできます。この例では、逆方向のNATディスクリプターのみが適用されます。

      ip lan2 nat descriptor reverse 3 4
    

細かい点について補足すると、それぞれの方向について、パケットを変換するNATディスクリプターは1つだけです。例えば上の★の設定では、順方向については、1番のNATディスクリプターで変換できたら、2番はスキップして3番に移ります。2番を試みるのは1番で変換できないときに限ります。逆方向についても同様で、3番で変換できたら4番はスキップします。4番で変換するのは3番で変換できないときに限ります。

2.2. 外向きのパケットの処理

ここでは、内側から外側へ向かうパケット、すなわち外向きのパケットの処理について説明します。処理の概要は次のようになります。

  1. 既知のフローに一致するかどうかを調べます。一致すれば、過去のパケットと同じように変換して終了します。
  2. 一致しない場合には、まず、静的NATで処理できるかどうかを調べます。処理できるならば、パケットをNATで変換して終了します。
  3. 次に静的IPマスカレードで処理できるかどうかを調べます。処理できるならば、パケットをIPマスカレードで変換して終了します。
  4. 動的NATで処理できるかどうかを調べます。処理できるならば、新しいバインドを生成し、NATで変換して終了します。
  5. 動的IPマスカレードで処理できるかどうかを調べます。処理できるならば、新しいバインドを生成し、IPマスカレードで変換して終了します。
  6. 以上のすべてに該当しなければ、パケットを変換せずに通します。

新しいフローに属するパケットを処理したときには、その状態を「NATテーブル」というキャッシュに蓄積します。キャッシュは、フローが継続していて、パケットが流れている間は有効です。TCPの場合には、FINやRSTを観測したら、その60秒後にキャッシュを解消します。もしくは、フローに属するパケットが流れなくなってから一定の時間が経った場合にもキャッシュを解消します。

キャッシュの解消までの時間を計測するタイマーはデフォルトで900秒ですが、nat descriptor timerコマンドを使えば、他の値に変えることができます。

なおヤマハルーターでは、一般的に「ヘアピンNAT」と呼ばれる機能には対応しておりません。 すなわち、外向きのパケットに対して、その宛先が静的NATや静的IPマスカレードの外側アドレス/外側ポート番号に一致していたとしても、折り返して内側の端末への転送は行いません。

2.3. 内向きのパケットの処理

ここでは、外側から内側へ向かうパケット、すなわち内向きのパケットの処理について説明します。内向きの処理は、外向きの処理と違って、新しいバインドを生成しない点が大きく異なります。

  1. 既知のフローに一致するかどうかを調べます。一致すれば、過去のパケットと同じように変換して終了します。
  2. 一致しない場合には、まず、静的NATで処理できるかどうかを調べます。処理できるならば、パケットをNATで変換して終了します。
  3. 次に静的IPマスカレードで処理できるかどうかを調べます。処理できるならば、パケットをIPマスカレードで変換して終了します。

以上に該当しなければ、次のように分類してパケットの処置を決めます。

  1. ICMPのEcho Requestのときには、無条件にEcho Replyを返します。
  2. そうでなければ、nat descriptor masquerade incomingコマンドの設定にしたがいます。

nat descriptor masquerade incomingコマンドは、内向きのパケットを変換できないときの動作を定義するもので、セキュリティの観点で注意が必要なコマンドです。特に、forwardを設定したときには、内部の端末にパケットを転送するので、外部から内部の端末へのアクセスを許すことになります(※)。

※この動作は「DMZホスト機能」と呼ばれることが多いようです。ファイアウォールの「DMZ」とは意味が違うので注意が必要です。

2.4. プロトコルの扱い

大きく分けて、TCP、UDP、ICMP、それ以外という4つのグループがあります。

2.4.1. TCP

TCPパケットを変換するケースですが、NATではIPヘッダのアドレスを変換し、IPマスカレードでは、アドレスに加えて、TCPヘッダのポート番号を変換します。一部のTCPアプリケーションでは、TCPのデータ部を書き換える必要があり、そのときにメッセージの長さが変化することがあります。この場合にはTCPヘッダのシーケンス番号も書き換えの対象になります。

TCPのコネクションでは、FINフラグやRSTフラグによって、明示的にコネクションの終了を知ることができます。このようなフラグを観測した場合には、対応するバインドのTTLを60秒まで落として、早期にバインドを解消します。このようなフラグが発生しない場合でも、パケットが流れなくなって一定時間が経てば、前述のとおりバインドは解消します。

2.4.2. UDP

NATではIPヘッダのアドレスを変換し、IPマスカレードでは、アドレスに加えて、UDPヘッダのポート番号を変換します。

UDPのコネクションでは、終了に対応する明示的なトリガーがないので、パケットが届かなくなってから一定時間が経過したときにバインドを解消します。

2.4.3. ICMP

ICMPパケットのうち、ICMP EchoとICMP Echo-Replyについては、Identifierフィールドを変換します。このフィールドを変換することで、内側の複数の端末が同時にpingを実行できるようになります。

Destination Unreachable、Source Quench、Time Exceeded、Parameter Problemについては、IPヘッダのアドレスに加えて、データ部分に格納されたパケットが変換の対象になります。

2.4.4. その他のプロトコル

TCP、UDP、ICMPに該当しないパケットについては、IPヘッダのアドレスだけが変換の対象になります。したがって、設定に関係なく、すべての変換はNATになります。厳密にいえば、設定がIPマスカレードであれば、内部的にはIPマスカレードの扱いになります。例えば、syslogには、IPマスカレードのバインドを出力します。しかしながら、実質はやはりNATと同じであり、変換後のパケットはNATと同じ結果になります。

実質がNATであるため、IPマスカレードで変換するときでも、内部の端末は1台しか通信できない点に注意する必要があります。典型的な例としてはIPsecのESPがあります。詳細は4.4.で後述します。

2.5. アプリケーションの扱い

アプリケーションによっては、単にアドレスやポート番号を変換するだけでは実用に適さないものがあり、特殊な方法で処理する必要があります。例としては、FTP、SIP、PPTPなどがあります。個々のアプリケーションの詳細は4章で説明します。

▲ このドキュメントの先頭へ

3. NATディスクリプター

この章では、NATディスクリプターの設定項目とその役割を説明していきます。

3.1. 変換の方式

変換の方式としてはnatmasqueradenat-masqueradeの3通りを用意しています。それぞれの方式の動作は次の通りです。

方式動的NAT動的IPマスカレード静的NAT静的IPマスカレード
nat××
masquerade×
nat-masquerade

nat-masqueradeという方式は、通常は動的NATを使用して外側アドレスと内側アドレスを1対1で割り当てていき、外側アドレスが最後の1つになったら、そのアドレスについては、動的IPマスカレードを使うという方式です。

変換の方式は、nat descriptor typeコマンドで設定します。

3.2. 外側アドレス

NATディスクリプターを定義するときには必ず外側アドレスを設定する必要があります。コマンドとしては、nat descriptor address outerコマンドを使い、アドレスやアドレスの範囲を設定します。

この設定は、動的NAT、動的IPマスカレード、静的IPマスカレードで使われ、静的NATには使用されません。静的NATで使用する外側アドレスは、nat descriptor staticコマンドで、別に登録する必要があります。

nat descriptor address outerコマンドでは、次のような値を設定することができます。

設定できる外側アドレスの最大数は256個です。

3.3. 内側アドレス

外側アドレスと同様に、内側アドレスも重要な設定項目のひとつです。コマンドとしては、nat descriptor address innerコマンドを使い、アドレスやアドレスの範囲を設定できます。あるいはautoという値を設定できます。autoを設定したときには、すべてのアドレスを内側アドレスとして扱います。

この設定は、動的NAT、動的IPマスカレードで使い、静的NAT、静的IPマスカレードでは使いません。静的NATについては、nat descriptor staticコマンドで、静的IPマスカレードについては、nat descriptor masquerade staticコマンドで、別に設定する必要があります。

内側の端末からパケットを受けたとき、その端末のアドレスが、設定した内側アドレスの範囲外であれば、NATディスクリプターは動作しません。つまり、パケットは何も変換されないままで通過します。

3.4. 静的NAT

静的NATのバインドを設定するためには、nat descriptor staticコマンドを使います。このコマンドは、外側アドレスと内側アドレスの対応付けを記述するもので、次のように記述します。

      nat descriptor static 1 1 10.0.0.2=192.168.0.2 1
                                ======== ===========
                                   ↑         ↑
                             外側アドレス  内側アドレス
    

静的NATのバインドは、NATディスクリプターの中で最優先として処理されます。すなわち、IPマスカレードや動的NATで処理可能なパケットが通過した場合でも、静的NATのバインドに該当すれば、その設定の通りに変換されます。

3.5. 静的IPマスカレード

静的IPマスカレードのバインドを設定するためには、nat descriptor masquerade staticコマンドを使います。

      nat descriptor masquerade static 1 1 192.168.0.2 tcp 8080=80
                                           =========== === ==== ==
                                           内側アドレス ↑  ↑ 内側ポート番号
                                                 プロトコル 外側ポート番号
    

内側ポート番号を外側ポート番号と同じにしたいときには、「=」を使わずに次のように書くこともできます。

      nat descriptor masquerade static 1 1 192.168.0.2 tcp 8080
    

静的IPマスカレードのバインドは、静的NAT、動的NATについで3番目の優先度を持っています。すなわち、パケットがNATで処理できない場合にはじめて、静的IPマスカレードのバインドを試すことになります。ちなみに、優先度は次のようになっています。

      静的NAT > 動的NAT > 静的IPマスカレード > 動的IPマスカレード
    

静的NATの優先度が最も高く、動的IPマスカレードの優先度が最も低くなっています。

3.6. アドレスの割り当てポリシー

ここでは、nat descriptor address outerコマンドで設定した外側アドレスがどのように使われるかを説明します。

まず、このコマンドで設定した外側アドレスのうち、nat descriptor staticコマンドの設定と重複するものは無視します。理由は、静的NATのバインドが常に優先になるからです。

動的NATでは、パケットを受信したときに、新しい内側アドレスを見つけると、新しい外側アドレスを割り当ててバインドを作ります。バインドには寿命があり、寿命が尽きたときにバインドは解消します。バインドとともに解消した外側アドレスは、将来的には他の内側アドレスとバインドされる可能性があります。

NATとIPマスカレードは同じ外側アドレスを共有できません。例えば、NATで10.0.0.1というアドレスを使っているならば、IPマスカレードでは10.0.0.1ではなく、別の外側アドレスを使います。つまり、外側アドレスが1つしかないときには、IPマスカレードを使うべきです。

複数の外側アドレスがあるときには、一部をNATで使い、一部をIPマスカレードで使います。割り当てポリシーは、静的変換の設定に依存します。静的NATで設定した外側アドレスはNATで使い、静的IPマスカレードで設定した外側アドレスはIPマスカレードで使います。それ以外の外側アドレスについては、3.1.で説明した変換の方式に依存します。

3.7. ポート番号の割り当てポリシー

動的IPマスカレードではバインドに使うポート番号を動的に割り当てます。このとき割り当てるポート番号は、nat descriptor masquerade port rangeコマンドで設定した範囲から使用されます。

基本的なポート番号の割り当てポリシーについては、以下の2通りのポリシーが存在します。

  1. 個々のコネクションに対して、使用できるポート番号を順に割り当てていく方式です。

    たとえば、ポート番号 60000番 から 64095番 までが使用可能な場合、最初に60000番を使用し、以後新しいコネクションが発生するたびに、 60001番、60002番というように、1つずつ大きい値のポート番号を割り当てていきます。

    個別のポート割り当て

    使用できるポート番号の最後に達した場合は、再び最初の番号に戻ります。すなわち、この例でポート番号が64095番に達した場合には、再び60000番に戻ります。 この時、以前に割り当てた番号のコネクションがまだ接続中であれば、その次の番号が候補になります。

  2. コネクションの宛先ホストごとに、独立してポート番号の割り当てを行う方式です。

    たとえば、ポート番号 60000番 から 64095番 までが使用可能な場合、宛先ホスト1に対する最初のコネクションでは60000番を使用し、以後同じ宛先ホスト1に対しては新しいコネクションが発生するたびに、 60001番、60002番というように、それぞれ異なるポート番号を割り当てていきます。この点はAタイプと同様です。 しかし宛先ホスト1とは異なる宛先である、宛先ホスト2に対するコネクションが発生した場合、その次の60003番ではなく独立して 60000番から割り当てていきます。 結果としてこの例では、ポート番号 60000番は宛先ホスト1に対するコネクションと宛先ホスト2に対するコネクションの両方で使用されます。

    重複したのポート割り当て

    この方式では、平均的に見てコネクションの数よりも外側ポート番号の必要数が少なくなります。そのため、動的IPマスカレードで使用するポート番号の個数を節約でき、使用するポート番号の個数より多くのセッションを処理することができるという利点があります。

    ヤマハルーターでは、この方式をポートセービングIPマスカレードと呼んでいます。

    なお、この方式における宛先ホストの区別は「宛先アドレスと宛先ポート番号の組」で行います。つまり宛先アドレスか宛先ポートのどちらかが異なれば、それらは異なる宛先ホストとして区別されます。

動的IPマスカレードにおいてAタイプ, Bタイプ のどちらの割り当てポリシーが使用されるかは、以下の表の通り、ファームウェアのリビジョン、パケットのプロトコルなどに依存します。

ファームウェアプロトコル割り当てポリシー
Rev.14 系以前すべてのプロトコルAタイプ
Rev.14.01 系以降TCPBタイプ
TCP以外のすべてのプロトコルAタイプ

ただし、Bタイプ(ポートセービングIPマスカレード)を使用するパターンについては、nat descriptor backward-compatibilityコマンドで、Aタイプを使用するRev.14 系以前の動作に切り替えることができます。
※ 関連資料: NAT動作タイプの違いについて

この他ポート番号を割り当てるポリシーとして、なるべくポート番号を変えずに済ませるというポリシーを選択できます。このためには、nat descriptor masquerade unconvertible portコマンドを使用します。このコマンドを使用すると、特定のパケットについて、ポート番号をなるべく変換しないようにすることができます。

3.8. DFビットの扱い

IPマスカレードでパケットを変換するときに、変換と同時にDFビットを操作することができます。動作はnat descriptor masquerade remove df-bitコマンドの設定にしたがいます。

▲ このドキュメントの先頭へ

4. アプリケーションへの対応

アプリケーションによっては、単にアドレスやポート番号を変換するだけでは実用に適さないものがあり、特殊な方法で処理する必要があります。この章では、主なアプリケーションについて、ヤマハルーターの対応を説明します。

4.1. FTP

FTPの制御コネクションにはアドレスやポート番号の情報が含まれるため、これを変換する必要があります。ヤマハルーターは、PORT、PASV、EPRT、EPSVの各コマンドに対応します。

内側からFTPを開始する場合には、特に設定は必要ありませんが、外側からのFTPを受け付けるためには、静的変換の設定が必要です。静的IPマスカレードであれば、次のようにTCPの21番ポートへのアクセスを通すバインドを追加します。

      nat descriptor masquerade static 1 1 192.168.0.2 tcp 21
                                                 ↑
                                         FTPサーバーの内側アドレス
    

通常、FTPの制御コネクションは21番ポートを使用しますが、そうでない場合には、nat descriptor ftp portコマンドを使って、制御コネクションとして扱うポート番号を変更できます。

4.2. SIP

SIPでは、メッセージの内部にアドレスが記述されるため、これらのアドレスを変換する必要があります。ヤマハルーターは、TCP、UDP双方のSIPメッセージについて、SIPメッセージのアドレスを変換できます。SIPに対応するためには、nat descriptor sipコマンドでSIPの動作をonに設定します。

なお、SIPではRTPで使用するポート番号をネゴシエーションしますが、ヤマハルーターはこれらのネゴシエーションの内容を解析しません。したがって、IPマスカレードでRTPを通す場合には、静的IPマスカレードを使って、RTPが通過するポート番号を設定しておく必要があります。

      nat descriptor type 1 masquerade
      nat descriptor masquerade static 1 1 192.168.0.2 udp 5004-5060
                                                   ↑           ↑
                                      VoIP端末の内側アドレス   RTPで使うポート番号
    

TCP、UDPともに、ヤマハルーターがSIPメッセージとして認識するパケットのポート番号は5060になっています。このポート番号は変更できません。

※関連資料:SIP-NAT

4.4. IPsec

IPsecでは、IKE、ESP、AHの3種類のパケットが発生します。

IKEについては、UDPの500番ポートを利用します。外側から鍵交換を受け付ける必要があるならば、次のように静的IPマスカレードを設定します。

      nat descriptor masquerade static 1 1 192.168.0.1 udp 500
    

ESPについても、通常は静的IPマスカレードを設定します。設定がないと、通信のない時間が長く続いたときにバインドが消えてしまい、トラブルの原因になります。

      nat descriptor masquerade static 1 1 192.168.0.1 esp *
    

AHについては、原理的にNATやIPマスカレードを通過しないため、利用できません。AHはパケットの改ざんを検出するために使われるので、NATやIPマスカレードでパケットを変換した瞬間に、AHとしては無効なパケットになってしまいます。

IPsecでは、VPNの終端をセキュリティゲートウェイといいますが、NATの内側に配置できるセキュリティゲートウェイは1台に限られます。ルーター自身がセキュリティゲートウェイになる場合には、他のセキュリティゲートウェイを設置できないことに注意してください(下図)。

セキュリティゲートウェイ

※関連資料:IPsecとNAT

※補足: NATの内側で複数のセキュリティゲートウェイを設置するために、NATトラバーサルという方式が提案されています。これは、ESPパケットをUDPパケットの中に収納することで、問題を解決するものです。

4.5. PPTP

PPTP MSVPNでは制御コネクションとしてTCPの1723番ポートを使用し、データパケットとしてGRE(プロトコル番号47)を使用します。PPTPのコネクションを通す機能は一般に「PPTPパススルー」 と呼ばれています。

外側からアクセスを受け付ける場合には、以上の設定に加えて、次のような静的変換を設定します。

      nat descriptor masquerade static 1 1 192.168.0.1 tcp 1723
      nat descriptor masquerade static 1 2 192.168.0.1 gre *
                                               ↑
                                        PPTPサーバーのアドレス
    

※関連資料:PPTP

4.6. traceroute

特別な設定がなくてもtracerouteは動作します。

4.7. ping

特別な設定がなくてもpingは動作します。

外側アドレスに対して外側からpingを実行するときには、NATディスクリプターの設定内容に関係なく、常にルーターが返事を返す仕様になっています。2.3.で説明した手続きのA.がそれにあたります。

4.8. r系コマンド

rloginなどのr系コマンドでは、クライアントのポート番号が512〜1023番の範囲であることが求められます。したがって、ヤマハルーターでは、IPマスカレードを使う場合でも、クライアントのポート番号を変換しないようにします。対応するアプリケーションは、rlogin(TCP/513)、rcp(TCP/514)で、rshには対応しません。

rlogin、rcpに対応するためには、nat descriptor masquerade rloginコマンドでonを設定します。

4.9. SSH

一部のケースでは、クライアント側のポート番号として1023以下のポート番号が要求されます。これに対応するため、クライアントのポート番号を変換しないように設定できます。具体的には、nat descriptor masquerade rloginコマンドでonを設定します。なお、ヤマハルーターがSSHとして認識できるのは、ポート番号として22番を使うパケットのみです。

※関連資料:http://www.se.openbsd.org/openssh/ja/faq.html#2.1

4.10. DNS

通常のUDPコネクションでは明示的にコネクションの終了を示す情報がありませんが、DNSでは要求(Query)パケットと応答(Response)パケットの対応が分かるので、応答パケットを受信した直後にバインドを解消します。応答パケットを受信してから、バインドを解消するまでの時間は約10秒です。なお、この動作については、コマンドの設定は必要ありません。

制限事項として次の3点があります。

▲ このドキュメントの先頭へ

5. 他の機能との連携

5.1. UPnP

UPnPを使用する場合には、ポートマッピングの機能に対応して、IPマスカレードのバインドを自動生成します。この処理は、UPnPとIPマスカレードを使う設定では常に動作するものです。

※関連資料:UPnP

5.2. 動的フィルタ

動的フィルタでは、コネクションの発生時に一時的にフィルタを開けて、パケットを通します。しかしながら、NATディスクリプター機能を併用するときには、フィルタだけを開けても不十分で、一時的にパケットを変換できるようにする必要があります。そこで、動的フィルタの動作と同期して、バインドを自動的に生成する仕掛けを用意しています。

例として、以下の設定を考えます。6000番宛てのTCPコネクションがトリガーとなり、トリガーと同じ方向の7000番宛てのUDPコネクションと、トリガーと逆方向の8000番宛てのUDPコネクションを通すという設定です。トリガーについては常に待つ必要があるので、★印で示したように、静的IPマスカレードを設定しています。

      ip filter 10 pass * * tcp * 6000
      ip filter 11 pass * * udp * 7000
      ip filter 12 pass * * udp * 8000
      ip filter dynamic 1 * 192.168.0.128 filter 10 in 12 out 11
      ip pp nat descriptor 1
      ip pp secure filter in dynamic 1
      nat descriptor type 1 masquerade
      nat descriptor masquerade static 1 1 192.168.0.128 tcp 6000 ★
    

残りのコネクションについては、静的IPマスカレードを設定する必要がありません。7000番については、外向きのコネクションになるので、動的変換で十分です。8000番については、動的フィルタと連携して、IPマスカレードのバインドを自動的に追加します。

※関連資料:ファイアウォール

▲ このドキュメントの先頭へ

6. 管理機能

6.1. 状態の表示

次のコマンドを使って、状態を表示することができます。

show nat descriptor addressコマンドは、すべてのインターフェースについてバインドを表示し、show nat descriptor interface addressコマンドは、特定のインターフェースについてバインドを表示します。

show nat descriptor interface bindコマンドは、インターフェースが持っているNATディスクリプターを示すものです。このコマンド名の「bind」は、これまでに使ってきたバインドの意味ではなく、インターフェースとNATディスクリプターの対応づけというニュアンスです。

6.2. 状態の解放

clear nat descriptor dynamicコマンドを使うと、動的変換で生成したバインドを一度に解消できます。同時にNATテーブルのキャッシュも解放されます。

6.3. Syslog

nat descriptor logコマンドでonを設定しているときに限り、NATディスクリプターに関するsyslogを以下のレベルで出力します。ヤマハルーターが出力するsyslogを次の表にまとめておきます。

メッセージログレベル意味
Bound protocol outer_address <-> inner_address INFO NATのバインドを生成した。
Bound protocol outer_address.outer_port <-> inner_address.inner_port INFO IPマスカレードのバインドを生成した。
Released protocol outer_address <-> inner_address INFO NATのバインドを解消した。
Released protocol outer_address.outer_port <-> inner_address.inner_port INFO IPマスカレードのバインドを解消した。
Session was limited. Total session number is max(max_session_number). INFO バインド数の合計が最大値に達したため、パケットに対して新しいバインドを生成できず、破棄された。
Session was limited. inner_address has max session(max_session_number). INFO ホスト毎のバインド数の最大値に達したため、パケットに対して新しいバインドを生成できず、破棄された。
Session was limited. Port is exhausted for destination_address.destination_port INFO 宛先(destination_address.destination_port)に対して使用可能な外側ポートが枯渇したため、パケットに対して新しいバインドを生成できず、破棄された。
Rejected at NAT(descriptor_id): protocol address.port because static inner_address.inner_port NOTICE 内側から受信したパケットの始点アドレス(address)と始点ポート(port)は、静的IPマスカレードのバインドで使われていて、新しいバインドを生成できず、破棄された。
Rejected at NAT(descriptor_id): protocol address because static inner_address NOTICE 内側から受信したパケットの始点アドレス(address)は、静的NATのバインドで使われていて、新しいバインドを生成できず、破棄された。
Rejected at NAT(descriptor_id): protocol source_address destination_address ... NOTICE 外側から受信したパケットを内側に通すことができずに破棄した。nat descriptor masquerade incomingコマンドで、rejectdiscardを設定しているときに出力される。

▲ このドキュメントの先頭へ