C言語ネットワークプログラミング - NATゲートウェイの動作原理

目次

NAT

NAT (Network Address Translation、ネットワーク アドレス変換) は、L3 ネットワーク層の IP アドレス変換技術であり、IETF によって定義された標準であり、元々は IPv4 パブリック ネットワーク アドレスの不足を軽減するために使用されていました。現在、パブリック ネットワーク IP (世界で唯一アドレス指定可能な IP アドレス) とプライベート ネットワーク IP (10、172、192 のネットワーク セグメント) 間の変換に広く使用されています。

NAT テクノロジーは、パブリック ネットワーク IP アドレスの不足を解決するだけでなく、次のネットワーク機能をサポートするためにも一般的に使用されます。

  1. データ セキュリティ カモフラージュ: プライベート ネットワークの IP アドレス情報をパブリック ネットワークの IP アドレスに均一に変換し、プライベート ネットワークのホストがパブリック ネットワークに直接公開されるのを防ぎ、ネットワーク セキュリティを提供します。
  2. 負荷分散: srcIP、dstIP、および dstPort を変更することにより、データ パケットは処理のためにバックエンドの Real Server に転送されます。詳細については、LVS-NAT テクノロジーの実装を参照してください。
  3. 透過プロキシ: HTTP リクエストを指定された HTTP プロキシ サーバーにリダイレクトします。

ここに画像の説明を挿入

NAT GW 実装原則

NAT テクノロジーの種類

NAT GW の基本原理は、IP データ パケットを転送するときに、IP データ パケットの srcIP/dstIP、さらには srcPort/dstPort を編集および変換することです。

IP マッピング関係から、次のように細分化できます。

  • 静的 NAT テクノロジー (静的 NAT) : 静的アドレス マッピング テーブル、パブリック ネットワーク IP とプライベート ネットワーク IP の 1 対 1 マッピングを手動で確立および維持します。公衆網のIP不足問題を有効に解決できないため、基本的には利用されない。
  • ダイナミック NAT テクノロジー (プール NAT) : ダイナミック アドレス マッピング テーブルを自動的に確立および維持します。パブリック ネットワーク IP とプライベート ネットワーク IP は 1 対多の関係になります。パブリックネットワークIPプールを持ち、プライベートネットワークIPはこのプールからパブリックネットワークIPアドレスを動的に取得し、外部との接続を確立します。接続が切断されると、その接続が占有していたパブリック IP が解放され、他のプライベート IP が使用できるようになります。このプロセスは動的に実行されます。

ここに画像の説明を挿入

IP の編集と変換のタイプに関しては、次のように細分化できます。

  • SNAT テクノロジー: srcIP の NAT を変更して、プライベート ネットワーク IP がパブリック ネットワークにアクセスする問題を解決します。
  • DNAT テクノロジー: dstIP の NAT を変更して、パブリック ネットワーク IP がプライベート ネットワークにアクセスする問題を解決します。
  • NAPT テクノロジー (ポート レベル NAT) : dstPort の NAT を変更して、1 つのパブリック ネットワーク IP を複数のプライベート ネットワーク IP にマッピングする必要があるという問題を解決します。

NAT テクノロジーの基礎

ここに画像の説明を挿入

上の図に示すように、NAT GW には 2 種類の外部ネットワーク ポートと内部ネットワーク ポートがあります。

  • パブリックIP: 202.20.65.5
  • プライベート ネットワーク セグメント: 192.168.1.0/24、IP アドレス 192.168.1.1 のプライベート ネットワークの NAT GW としても機能します。

この時点で NAT GW がプライベート ネットワーク セグメントとパブリック ネットワークの IP アドレスの間に動的 NAT ルールを構成している場合、プライベート ネットワークの ClientA 192.168.1.2 がパブリック ネットワークの Web サーバー 202.20.65.4 に IP パケットを送信すると ( srcIP=192.168.1.2、dstIP=202.20.65.4) は、次の NAT 動作を実行します。

  • パケット送信時の SNAT : NAT GW は、IP パケットの srcIP をパブリック ネットワーク IP に変換し、Web サーバーに送信します。
  • パケット受信時の DNAT : NAT GW は、IP パケットの dstIP をプライベート ネットワーク IP に変換し、ClientA に送信します。

ここに画像の説明を挿入

NAT技術による接続追跡機能

動的 NAT テクノロジは、接続トラック (接続追跡) 機能に依存して動的アドレス マッピング テーブルを維持する必要があります。これにより、「返信パケット」はどのプライベート ネットワーク IP アドレスに転送すべきかを認識できるようになります。以下に示すように:

ここに画像の説明を挿入

NAPT テクノロジーの基礎

NAPT (ネットワーク アドレス ポート変換) は、1 つのパブリック IP アドレスを複数のプライベート IP にマッピングするために使用されます。以下に示すように。

ここに画像の説明を挿入

NAPTテクノロジーの接続追跡機能

NAT GW の接続トラックは、NAPT テクノロジーをサポートするためにも使用されます。

ここに画像の説明を挿入

NATサーバー

NAT サーバーは、名前が示すように、パブリック ネットワーク クライアントからの要求をアクティブに受け入れ、バックエンドのプライベート ネットワークの IP アドレスに転送できるサーバーの役割です。実装原理は上記と同じですが、アプリケーション シナリオが異なるため、NAT テーブル エントリを作成するタイミングが異なる点が異なります。

  • NAT GW : 出力トラフィックが通過するときにエントリを作成します。
  • NAT サーバー: 入力トラフィックが入る前にエンティを作成します。

NAT の侵入

NAT トラバーサルは特殊なアプリケーション シナリオであり、その名前が示すように、「NAT GW をバイパス」して 2 つのネットワーク間の P2P (ポイントツーポイント) 直接通信を実現します。NAT トラバーサルは、次のようなさまざまなシナリオで役立ちます。

  • オンライン ゲーム: NAT トラバーサル テクノロジーを使用することで、プレーヤーは直接 P2P 接続を確立し、データ転送のための中間サーバーを必要とせずに、低遅延のゲーム エクスペリエンスを実現できます。
  • ファイル共有: NAT トラバーサル テクノロジを使用することで、ユーザーはファイル転送接続を直接確立し、ファイルを簡単かつ迅速に共有できます。
  • ビデオ会議、音声通話、リアルタイム チャットなどのリアルタイム通信アプリケーションでは、通常、リアルタイム データ送信を実現するために高速で安定した接続が必要です。NAT トラバーサル テクノロジーを使用すると、通信に関与するユーザーはポイントツーポイント接続を直接確立でき、より良い通信品質とユーザー エクスペリエンスを提供できます。
  • リモート アクセス: リモート アクセス シナリオでは、ユーザーは外部ネットワークから内部ネットワーク上のデバイスまたはリソースにアクセスする必要があります。NAT トラバーサル テクノロジーを使用すると、ユーザーは複雑なポート マッピングや VPN 設定に頼ることなく、リモート デスクトップ、Web カメラ、ホーム オートメーション デバイスなどの内部ネットワーク上のデバイスに直接アクセスできます。
  • IoT デバイス通信: モノのインターネット (IoT) デバイスの急速な発展により、多数のデバイスがネットワークに接続されるようになり、これらのデバイスは異なる NAT ネットワークに配置される場合があります。NAT ペネトレーション テクノロジを使用すると、これらのデバイスが直接通信し、デバイス間のデータ交換と相互運用性を実現し、IoT アプリケーションの柔軟性と拡張性を高めることができます。

Linux iptables NAT

Linux iptables NAT 転送操作は、フィルター テーブルの FORWARD チェーンで許可される必要があり、Kernel ip_forwarding 転送機能が有効になっている必要があります。

さらに、iptables は NAT テーブルをアクティブに維持するため、多くの場合、iptables 構成を使用する場合は、データ フローに対して 2 つのルールを同時に作成することなく、SNAT または DNAT を「パケットを返す」ように構成するだけで済みます。同時に、Linux iptables はカーネル内で Netfilter と ConnTrack を組み合わせてセッション追跡機能をサポートします。

SNAT

SNAT は出力トラフィックに作用するため、iptables の POSTROUTING チェーンで有効になります。アウトバウンド パスは、APP => TCP/IP スタック ルーティング サブシステム => filter:OUTPUT => nat:POSTROUTING => アウトバウンドです。

$ iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to 198.51.100.3 

動的 NAT シナリオでは、IP アドレス マスカレード モード (MASQUERADE) を使用することも必要です。これは、通常、ホーム ネットワークやモバイル ネットワークで使用される動的 SNAT テクノロジです。

$ iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

ここに画像の説明を挿入

DNAT

DNAT は Ingress トラフィックに作用するため、PREROUTING チェーンで有効になります。

$ iptables -t nat -I PREROUTING -p tcp -d 198.51.100.3 --dport 80 -j DNAT --to 192.168.0.2

ここに画像の説明を挿入

NPT

NAPT は通常、DNAT とともに使用されます。たとえば、ローカル マシンのパブリック ネットワーク IP のポート 2222 を仮想マシンの内部ネットワーク IP のポート 22 にマッピングします。

$ iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22

# 测试。
$ ssh [email protected] -p 2222

おすすめ

転載: blog.csdn.net/Jmilk/article/details/131905708