次世代サービスの確定的NAPTの概要
MX-SPC3 を使用した次世代サービスでは、確定的 NAPT44 と NAPT64 の両方のサービスを設定できます。次世代サービス 決定論的NAPTサービスでは、アルゴリズムを使用して宛先ポートのブロックを割り当てます。
次世代サービス 決定論的 NAPT44 サービスにより、元の送信元 IPv4 アドレスとポートは常に同じ NAT 後の IPv4 アドレスとポート範囲にマッピングされ、特定の変換された外部 IPv4 アドレスとポートのリバース マッピングは常に同じ内部 IPv4 アドレスにマッピングされます。
次世代サービス 決定論的 NAPT64 サービスにより、元の送信元 IPv6 アドレスとポートは常に同じ NAT 後の IPv4 アドレスとポート範囲にマッピングされ、特定の変換された外部 IPv4 アドレスとポートのリバース マッピングは常に同じ内部 IPv6 アドレスにマッピングされます。
確定的 NAPT の設定方法の詳細については、「 次世代サービスの確定的 NAPT の設定」を参照してください。
決定論的 NAPT の利点
IP アドレスは常に同じ外部IPアドレスとポート範囲にマッピングされ、特定の変換された外部IPアドレスとポートのリバース マッピングは常に同じ内部 IP アドレスにマッピングされるため、アドレス変換のロギングが不要になります。
決定論的NAPTアルゴリズムの理解
決定論的 NAPT の実装の有効性は、加入者要件の分析によって異なります。指定するブロック サイズは、該当するNAT ルールで指定された from
句の範囲から、受信する各加入者アドレスで使用可能になるポートの数を示します。割り当てアルゴリズムは、オフセット値を計算して、送信 IP アドレスとポートを決定します。逆方向のアルゴリズムを使用して、発信元の加入者アドレスを取得します。
ログを使用せずに加入者を追跡するには、ISP が逆方向のアルゴリズムを使用して、変換されたアドレスから加入者(送信元)アドレスを取得する必要があります。
次の変数は、順計算(プライベート サブスクライバー IP アドレスからパブリック IP アドレスへ)と逆計算(パブリック IP アドレスからプライベート サブスクライバー IP アドレスへ)で使用されます。
Pr_Prefix—NAT 以前の IPv4 加入者アドレス。
Pr_Port—NAT 以前のプロトコル ポート。
Block_Size—各Pr_Prefixで使用可能に設定されたポートの数。
block-size
がゼロとして構成されている場合、ブロック・サイズの計算方法は次のように計算されます。ブロックサイズ = int(64512/ceil[(Nr_Addr_PR_Prefix/Nr_Addr_PU_Prefix)])
ここで、64512 は、パブリック IP アドレスごとに使用可能な最大ポート範囲です。
Base_PR_Prefix - NAT ルール の
from
句で最初に使用可能な NAT 以前の IPv4 加入者アドレス。Base_PU_Prefix—NAT プールで設定された最初に使用可能なNAT後IPv4加入者アドレス。
Pu_Port_Range_Start - 最初に使用可能な NAT 後ポート。これは1024です。
Pr_Offset—NAT ルールの
from
句で最初に使用可能な NAT 前 IPv4 加入者アドレスから変換される NAT 前 IP アドレスのオフセット。PR_Offset = Pr_Prefix – Base_Pr_Prefix。PR_Port_Offset—NAT 前の IP アドレスのオフセットにブロック サイズを掛けた値。PR_Port_Offset = Pr_Offset * Block_Size
Pu_Prefix—特定のPr_PrefixのNAT後アドレス。
Pu_Start_Port—特定のPr_PrefixからのフローのNAT後開始ポート
Pu_Actual_Port—リバースフローで見られるNAT後のポート。
Nr_Addr_PR_Prefix — NAT ルールの
from
句で使用可能な NAT 前の IPv4 加入者アドレスの数。Nr_Addr_PU_Prefix — NAT プールで設定された使用可能なNAT IPv4後IPv4アドレスの数。
Rounded_Port_Range_Per_IP — NAT 後の各 IP アドレスで使用可能なポートの数。Rounded_Port_Range_Per_IP = ceil[(Nr_Addr_PR_Prefix/Nr_Addr_PU_Prefix)] * Block_Size。
Pu_Offset—最初に使用可能な NAT 後 IP アドレスからの NAT 後 IP アドレスのオフセット。Pu_Offset = Pu_Prefix – Base_Pu_Prefix。
Pu_Port_Offset — 1024 からの NAT 後ポートのオフセットを、NAT 後の IP アドレスのオフセットと、NAT 後の IP アドレスで使用可能なポート数の積に加算します。Pu_Port_Offset = (Pu_Offset * Rounded_Port_Range_Per_IP) + (Pu_Actual_Port – Pu_Port_Range_Start) です。
アルゴリズムの使用:次の設定を想定します。
services { nat { source { pool src-pool { address 203.0.113.0/16; port { automatic { random-allocation; } deterministic { block-size 249; host address 10.1.0.1/16; } } } rule-set set1 { rule det-nat { match-direction input; match { source-address 10.1.0.0/16; } then { source-nat { pool src-pool; } } } } } } }
前方変換
-
Pr_Offset =Pr_Prefix – Base_Pr_Prefix – プライベート IP プールのギャップ
手記:プライベートIPプールが連続していない複数のプールで構成されている場合、Pr_Offsetはプール内のプライベートIPのみをカウントする必要があります。したがって、次の合計です。
-
IP が属するプール内のオフセット。
-
IP が小さいプールのサイズ。
-
Pr_Port_Offset = Pr_Offset * Block_Size
Rounded_Port_Range_Per_IP = ceil[(Nr_Addr_PR_Prefix/Nr_Addr_PU_Prefix)] * Block_Size
Pu_Prefix = Base_Public_Prefix + floor(Pr_Port_Offset / Rounded_Port_Range_Per_IP)
手記:パブリック IP プールが連続していない複数のプールで構成されている場合、Pu_Offsetはプール内のパブリック IP のみをカウントする必要があります。したがって、合計は次のように意図する必要があります。
-
floor(Pr_Port_Offset / Rounded_Port_Range_Per_IP)
値がfirst Public IP pool
のサイズより大きい場合は、この値からこの最初のプールのサイズを減算します。次に、2 番目のプール サイズを検討します。 -
値が n 番目のプールより小さくなるまで、このプロセスを繰り返します。
-
Pu_Start_Port = Pu_Port_Range_Start + (Pr_Port_Offset % Rounded_Port_Range_Per_IP)
サンプル設定を使用し、10.1.1.250:5000をソースとする加入者フローを想定します。
Pr_Offset = 10.1.1.250 – 10.1.0.1 = 505
Pr_Port_Offset = 505 * 249 = 125,745
Rounded_Port_Range_Per_IP = ceil[(65, 533/254)] * 249 = 259 * 249 = 64,491
Pu_Prefix = 203.0.113.1 + floor(125,745 ÷ 64,491) = 203.0.113.1 +1 = 203.0.113.2
Pu_Start_Port = 1,024 + (125,745 % 64,491) = 62278
10.1.1.250 は 203.0.113.2 に変換されます。
開始ポートは 62278 です。設定されたブロックサイズに基づいて、加入者が使用できるポートは249あります。使用可能なポート範囲は、ポート 62278 から 62526 までです。
特定のフロー 10.1.1.250:5000 は、ランダム割り当てが指定されているため、その範囲内のポートのいずれかをランダムに割り当てます。
逆変換
-
Pr_Offset =Pr_Prefix – Base_Pr_Prefix – プライベート IP プールのギャップ
手記:プライベートIPプールが連続していない複数のプールで構成されている場合、Pr_Offsetはプール内のプライベートIPのみをカウントする必要があります。したがって、次の合計です。
-
IP が属するプール内のオフセット。
-
IP が小さいプールのサイズ。
-
Pu_Port_Offset = (Pu_Offset * Rounded_Port_Range_Per_IP) + (Pu_Actual_Port – Pu_Port_Range_Start)
Subscriber_IP = Base_Pr_Prefix + floor(Pu_Port_Offset / Block_Size)
逆変換は次のように決定されます。203.0.113.2:62278に戻るフローがあるとします。
Pu_Offset = 203.0.113.2 – 203.0.113.1 = 1
Pu_Port_Offset = (1 * 64,491) + (62,280 - 1024) = 125,747
Subscriber_IP = 10.1.0.1 + floor(125,747 ÷ 249) = 10.1.0.1 + 505 = 10.1.1.250
手記:逆変換では、元のプライベートIPアドレスのみを取得し、使用中の元のポートは取得できません。これは、法執行機関の要件に対して十分にきめ細かいものです。
確定的 NAPT を設定している場合は、 show services nat deterministic-nat internal-host
コマンドと show services nat deterministic-nat nat-port-block
コマンドを使用して、順方向と逆方向のマッピングを表示できます。ただし、決定論的ポート ブロック割り当てブロック サイズまたはNAT ルールの from
句を再設定すると、マッピングが変更されます。マッピングの履歴情報を提供するために、以前の設定の特定のマッピングを表示できるスクリプトを記述することをお勧めします。
決定論的 NAPT の制限
決定論的 NAPT を設定する場合は、次の点に注意してください。
IPv6 の決定論的 NAT64 ホスト アドレス構成では、IPv6 ホスト プレフィックスの最後の 32 ビット(4 バイト)の変更がサポートされます。つまり、IPv6 アドレスには /96 プレフィックス マスクのみを設定でき、1 つの IPv6 プレフィックスに対して最大アドレス番号 232 をサポートします。ホストアドレスは、
[services nat source pool p1 port deterministic host]
設定階層で指定されます。通常、ホスト範囲のアドレス数は、プール内のアドレス数よりも大きくなければなりません。
-
ベスト プラクティス:
一部のホストはポート ブロック リソースを正常に受信しない可能性があるため、ホスト アドレス番号をポート ブロック リソース番号の合計を超えるように構成することはお勧めしません。
決定論的 NAT の最小ブロック サイズは 1 です。ブロックサイズを小さく設定すると、コミットは失敗します。ブロック サイズが 0 に設定されている場合、ブロック サイズはホスト番号と変換されたアドレス番号に基づいて自動的に計算されます。計算されたブロック サイズが 1 未満の場合、コミットは失敗します。
次世代サービス 決定論的 NAPT では、IPv4 と IPv6 のホスト アドレスの組み合わせを、ホスト アドレスまたはアドレス名リストのいずれかの NAT プールにまとめて設定できます。ホストプレフィックス番号の合計は1000を超えることはできません。
ホストアドレス帳名にアドレス範囲やDNS名を設定することはできません。
設定されたホストアドレスプレフィックスとホストアドレスブック名は、プレフィックスが重複している場合、マージされます。
show services nat source deterministic
操作コマンドを使用して、マージされたプレフィックスを表示できます。-
ベスト プラクティス:
同じ決定論的 NAT プールが複数のルールで使用される場合は、送信元アドレス プレフィックスに一致する複数のルールとサブスクライバ ホスト アドレスの一貫性を保つことをお勧めします。そうしないと、NAT プールで設定されていないホストからのトラフィックは、NAT ルールに一致していても、ポートを正常に割り当てない可能性があります。
次世代サービス NAPT サービスの場合、構成されるホスト アドレスの総数は、使用可能な決定論的 NAT ポート ブロック以上である必要があります。