CiscoのNAT。 パート1

こんにちは、同僚!

リスナーや同僚からのフォーラムの多くの質問(投稿の最後のリンク)から判断すると、CiscoルーターでのNATの動作(ファイアウォールは省略します。FediaはCisco ASAに関する一連の記事で十分に詳細に説明しています)ほとんどの形式で、このテクノロジーの経験と理解を説明してください。 包括的な説明と100%の正確さを装うわけではありませんが、面白いのは猫です。


したがって、記述の構造については、NATとは何かの定義を扱います。

定義 NAT (Network Address Translation)は、ネットワークアドレスを変換するための技術です。 IPパケットヘッダーのアドレスのスプーフィング(TCP / UDPヘッダーのポートを変更することもありますが、これについては後で詳しく説明します)。

言い換えれば、ルーターを通過するパケットは、その送信元および/または宛先アドレスを変更できます。

なぜこれが必要なのですか?
1.プライベートIPアドレスが最もよく使用されるLANから、グローバルIPアドレスのみがルーティングされるインターネットへのアクセスを提供するため。
2.( 程度は低いが )ネットワークトポロジを隠し、ネットワークへの侵入に対する何らかの保護バリアを作成します(これについては、後ほど例で説明します)。

NATは異なる場合があります:)そして、これについてはすでに多くのことが書かれていますが、NATに関する質問のある初心者を特定のアドレスに送りたいという要望があります。
1. 静的NAT-静的NATは、あるアドレスと別のアドレスの間に一意の対応を設定します。 つまり、ルーターを通過するときに、アドレスは厳密に指定されたアドレスに1対1に変更されます。 (たとえば、10.1.1.1は常に11.1.1.1に置き換えられ、その逆も同様ですが、12.1.1.1には置き換えられません)。 そのようなブロードキャストの記録は、設定に行がある限り、無期限に保存されます。
2. ダイナミックNAT-ルーターを通過するときに、プール(英語のプール)と呼ばれるアドレスの一部から新しいアドレスが動的に選択されます。 ブロードキャストレコードは、応答パケットを受信者に配信できるように、しばらく保持されます。 このブロードキャストのトラフィックがしばらくの間存在しない場合、ブロードキャストは削除され、アドレスがプールに返されます。 変換を作成したいが、プールに空きアドレスがない場合、パケットは破棄されます。 言い換えれば、内部アドレスの数がプール内のアドレスの数よりわずかに大きければ、外部へのアクセスで問題が発生する可能性が高くなります。
3. オーバーロードまたはPATを使用したダイナミックNAT 。 ダイナミックNATとほぼ同じように機能しますが、トランスポートレイヤーの機能を使用しながら、同時に多対1の変換が行われます。 これについては、以下の例で詳しく説明します。

私はほとんどの場合シスコのハードウェアを使用しているため、この記事ではこれらのハードウェア上での作業の機能とNATの可能なオプションを正確に説明します。
この場合に何があるか見てみましょう。

1.内部ソースNAT


最も一般的でかなり単純なオプション。 このようなトポロジがあるとしましょう:


言い換えれば
a)内部アドレスのサブネット-10.0.0.0/8
b)外部アドレスのサブネット-11.0.0.0/8

そして、トラフィックがルーターを通過するときに、何らかの方法で内部アドレスを外部アドレスに変換したいと考えています。
これには何が必要ですか?

1.ブロードキャストする内容を明示的に指定します。 つまり どのトラフィックとどのホストから。
2.翻訳する対象を明確に示します。つまり、 外部アドレスのプール(または静的変換用の唯一のアドレス)。
3.内部および外部インターフェイスをマークします。
4.ブロードキャストをオンにします。

パラグラフ3では、誤解がしばしば発生するため、ここで詳細に説明します。
どのように機能しますか?

したがって、11日には10番目のネットワーク全体をブロードキャストすることにしたとしましょう。 それに応じてそれらを設定します(設定は後で、最初の理論)。 また、インターフェイスを内部(内部)および外部(外部)としてマークしました。
次に、 内部ソースNATが正確何を行うかを考えてみましょう。 実際、アクションの半分は名前に縫い付けられています:)。つまり、 内部に来るパッケージがソース 変更します :)。 しかし、応答パケットが内部ホストに到達する必要があるという事実について話したことを覚えていますか? これはアクションの後半です。 外部に到着するパケットの場合宛先が変更されます。

ライブブロードキャストを考えてください。
1.内部としてマークされたインターフェイスに着信するトラフィックは、変換するものと一致する場合、possible_translatedとしてマークされます 。 放送は現在この時点で行われていると考えられていますが、そうではありません。
2.次のステップでは、トラフィックがルーティングされます(PBRおよび通常)。 そして同時に、トラフィックが外部としてマークされたインターフェースに向けられている場合のみ-ブロードキャストがあります。 変換が動的である場合、ルーターは変換テーブルでその存在を確認します。 存在しない場合は作成し、既に存在する場合は、非アクティブカウンターをリセットします。 パケットが外部としてマークされていないインターフェイスで出力に到達した場合、変換は行われません。

逆放送
1.ライブブロードキャストとは対照的に、外部インターフェイスに到達するトラフィックは、最初にNATにさらされます。 内部ソースNATの場合、変換が存在する場合(動的または静的)、宛先が変更されます。 その後、トラフィックがルーティングされ、宛先にリダイレクトされます。

したがって、作業のメカニズムを考慮して、インターフェイスを内部または外部としてマークする必要があります。

発言と結果
1.逆変換の場合、インターフェイスに内部ラベルを付ける必要はありません。 とにかく、ライブブロードキャストが存在する場合、逆ブロードキャストはルーティングの前に機能します。 しかし、ライブブロードキャストを作成するにはトラフィックが内部インターフェイスを通過する必要があることを説明したため、このようなブロードキャストがいつ存在するのでしょうか。 ここから
2. ルータ自体トラフィックは、外部としてマークされたインターフェイスに到達し、NATルールを満たす場合にブロードキャストされます 。 そしてどれほど便利で、とても危険です。 一方では、他と同様にルータートラフィックをブロードキャストできます。 一方、多くの人はブロードキャストされるトラフィックをallow anyとして記述したいと考えていますが、たとえば、ルーティングプロトコルパケットがブロードキャストされ、障害が発生します。
3.ループバックルーターなどのインターフェイスは他のインターフェイスと同様に扱われ、内部または外部としてマークし、トラフィックをラップして利益を得ることができます:)

それでは、一般的な構成を見てみましょう。次に、いくつかの特別なケースを見てみましょう。

内部ソースNAT設定

内部ソースダイナミックNAT

1.ブロードキャストする内容を指定します。 これを行うには、トラフィックをリストするアクセスリストを作成します。 たとえば、この例では1行で十分です。
(config)# access-list 100 permit ip 10.0.0.0 0.255.255.255 any
備考 ACLには拒否行が含まれる場合があります。 一般的な誤解に反して、このラインを満たすトラフィックはドロップせず、単にブロードキャストしません。 また、ACLは標準および拡張、番号付け、名前付けが可能です。
2.開始アドレスと終了アドレスを指定して、アドレスのプールを作成します。 たとえば、次のように:
(config)# ip nat pool NAME_OF_POOL 11.1.1.10 11.1.1.20 netmask 255.255.255.0
備考
1.プール内の開始アドレスと終了アドレスが一致すると、ブロードキャストは1つのアドレスになります。
2.ネットマスクオプションは必須ですが、私の意見では初歩です。 プール内のアドレス範囲からサブネットアドレスまたはこのマスクを使用してブロードキャストするアドレスを切り取ることができます。
3.インターフェイスをマークします。 私たちの場合、それで十分です
(config)# interface fa 0/0
(config-if)# ip nat inside

そして
(config)# interface fa 0/1
(config-if)# ip nat outside


4.実際のブロードキャストを作成します。
ip nat inside source list 100 pool NAME_OF_POOL

出来上がり:)たとえば、ホスト10.1.1.1からホスト11.1.1.2に変更すると、次の翻訳が得られます。
Router#sh ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 11.1.1.10:55209 10.0.1.1:55209 11.1.1.2:23 11.1.1.2:23


興味深いことに、送信元ポートと宛先ポートはテーブルに明示的に記述されていますが、変換は完全にアドレスに対して作成されます。 そして、変換テーブルでの彼女の存続期間中、外部のパケットは外部アドレス(グローバル内部)に行くことができます
たとえば、外部ネットワークの一部のアドレスから内部グローバルへのpingは成功します(ブロードキャストの間):
R4#ping 11.1.1.10
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 11.1.1.10, timeout is 2 seconds:
!!!!!

言い換えれば、ブロードキャストは特定のホストに対して一度開かれ、その後、外部からのアドレスに対してしばらく有効になります。

オーバーロードの内部ソースダイナミックNAT

P. 1、2、および3-前のセクションと同様。
4.実際のブロードキャストを作成します。
ip nat inside source list 100 pool NAME_OF_POOL overload
オーバーロードという単語が1つだけ追加されていることがわかります。 しかし、放送方式は大きく変わりました。
前述のように、PATは少し多かったり、多対1のブロードキャストです。 ただし、ある接続のトラフィックを別の接続のトラフィックと区別できるようにするために、ルーターはIPアドレスだけでなく、TCP / UDPポートも変更します。
備考 ポートを操作するスキーム(ソースが変更されたとき、宛先が変更されたとき)は、IPアドレスを操作するスキームと同じです。
つまり、内部からアクセスすると、送信元IPと送信元ポートが変更され、このレコードが変換テーブルに入力されます。 逆ブロードキャストでは、すべてが逆に変化します。

何が変わったのか見てみましょう:
R3#sh ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 11.1.1.11:21545 10.0.1.1:21545 11.1.1.2:23 11.1.1.2:23
tcp 11.1.1.11:49000 10.0.2.1:49000 11.1.1.2:23 11.1.1.2:23

異なる内部アドレス(10.0.1.1および10.0.2.1)が1つの外部アドレス(11.1.1.11)に変換されたことがわかります。

備考
1.約束どおり、ソースポートは変更されていなかったようです:)。 実際、ルーターは利用可能なすべての手段で送信元ポートを保持しようとしています。 特に、内部グローバルアドレスポートがすでに使用されている場合、プール内の次のアドレスを取得し、ポートのビジー状態を確認します。 そして、空きポートのあるアドレスが見つからない場合は、次の空きポートが使用されます。
2.このような変換の動作は、外部から内部のグローバルアドレスへのアクセスが不可能であるという点で、通常のダイナミックNATの動作とは異なります。 これは、PATを使用する場合のセキュリティの向上について話したときの意味です。 事実上すべての接続はネットワーク内から開始され、外部からはそれらへの回答のみが届きます。
3.プロバイダーからアドレスのブロック全体ではなく、ルーターの外部インターフェイスにすぐに割り当てられた1つの不幸なアドレスを受け取った場合、1つのアドレスにプールのある庭を置くことはできませんが、次のようにすぐに書き込みます:
(config)# ip nat inside source list 100 interface fa0/1 overload
内部ソーススタティックNATおよびPAT

静的ブロードキャストについては多くのことが言われていますが、最後にそれらについて説明しましょう。

なぜこれが必要ですか?
ダイナミックNATの場合、PATの場合に変換が作成されなかった場合、外部からのアクセスは不可能であることを説明しました。 ダイナミックNATの場合でも変換が作成されると、内部グローバルアドレスが変更される可能性があります。 そして、外部アドレスで内部ホストに連絡することは不可能です。
それにもかかわらず、企業ネットワーク内にサーバーがあり、静的外部アドレスを介して外部からアクセスすることが重要な場合があります。 この場合、グローバルアドレスを割り当てることにより、インターネットに直接設定できます。 しかし、多くの場合、これは、たとえばセキュリティ上の理由から、あまり便利ではありません。 そして、そのような場合、静的NATが助けになります。

双方向の継続的なブロードキャストを作成します。 したがって、ホストは常に1つの外部アドレスで利用でき、このブロードキャストはタイムアウトによってブロードキャストテーブルから飛び出すことはありません。
実際の設定。
すぐにブロードキャストを作成します。
(config)# ip nat inside source static 10.0.1.1 11.1.1.21
インターフェイスと出来上がりをマークします!
R3#sh ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 11.1.1.21:14 10.0.1.1:14 11.1.1.2:14 11.1.1.2:14
--- 11.1.1.21 10.0.1.1 --- ---

ご覧のように、2つのエントリが表示されました。1つは永続的で、もう1つは(純粋に情報量の多い)一時的なもので、内部からのトラフィックによって発生しました。
備考 このような有益なエントリの表示は、コマンドによって無効にすることができます
(config)# no ip nat create flow-entries

どうぞ アドレス全体ではなく、1つのポート(たとえば、wwwサーバーの場合は80番目)のみを公開する必要があることがよくあります。 問題ありません。一部のポートに対して静的PAT変換を作成できます。
(config)# ip nat inside source static tcp 10.0.1.1 80 11.1.1.21 80
(config)# ip nat inside source static udp 10.0.1.1 5060 11.1.1.21 7877

同じ外部アドレスのポートを異なる内部ポートに転送できることがわかり、ポート変換を管理することもできます。

結論として、NATのさまざまなタイムアウトをコマンドで変更できることを追加します。
Router(config)#ip nat translation ?
arp-ping-timeout Specify timeout for WLAN-NAT ARP-Ping
dns-timeout Specify timeout for NAT DNS flows
finrst-timeout Specify timeout for NAT TCP flows after a FIN or RST
icmp-timeout Specify timeout for NAT ICMP flows
max-entries Specify maximum number of NAT entries
port-timeout Specify timeout for NAT TCP/UDP port specific flows
pptp-timeout Specify timeout for NAT PPTP flows
routemap-entry-timeout Specify timeout for routemap created half entry
syn-timeout Specify timeout for NAT TCP flows after a SYN and no
further data
tcp-timeout Specify timeout for NAT TCP flows
timeout Specify timeout for dynamic NAT translations
udp-timeout Specify timeout for NAT UDP flows


大量の記事が判明し、いくつかの部分に分割する必要があります。 もちろん、内部ソースNATは何度も議論され、記述されてきましたが、初心者でもこの記事で役に立つものを見つけられないことを願っています。 有名なものではありますが、いくつかの拠点から始めなければなりませんでした。

次の記事では、当然のことながら応答とサポートが見つからない限り、内部宛先NATについて説明します。

よろしく
ポドクパエフイリヤ

PS記事を改善し、不正確/エラーを修正するための提案を受け付けています。
PPSリンク:
1. フォーラムサイトanticisco.ru
2. Cisco NATの動作順序

Source: https://habr.com/ru/post/J108931/


All Articles