NATネットワークアドレス変換技術の紹介から詳細解説まで

この記事では、NAT の概要から始めて、NAT 技術自体を詳しく説明し、NAT、SNAT、DNAT、PAT、NAPT、フル NAT の定義、それらの違いと関連性を明確に理解することができます。最後に、複数のネットワーク カードを備えた Linux ホストを NAT ルーターに構成する方法について詳しく説明します。NAT の定義をすでに知っている場合は、ここに直接ジャンプして、NAT テーブルを介して Linux ホストをソフト ルーターに構成する方法を
確認できます。

1. NAT の概要

NAT は Network Address Translation の略で、ネットワーク アドレス変換の技術、つまり、ある IP アドレスを別の IP アドレスに変換する技術を指します。内部ネットワーク上の一部のホストにローカル IP アドレス (つまり、プライベート IP アドレス) が割り当てられているが、インターネット上のホストと通信する必要がある場合 (IP プロトコルおよびルーティング プロトコルに従って、ルーターは送信されたレポートのみを転送します)パブリック IP アドレスを持つホスト).テキスト)、NAT テクノロジを通じて実行できます。

パブリック ネットワーク IP アドレスが不足しているため、インターネットにアクセスする必要がある各ホストにパブリック ネットワーク IP アドレスを割り当てることが不可能です。そのため、複数のホストがパブリック ネットワーク IP アドレスを共有して外部ネットワークにアクセスできるようにするために、NAT テクノロジーが導入されています。このような機能を備えた装置をNATルータと呼び、NATルータはルータの管理下でプライベートネットワーク内の各ホストのIPパケットの宛先IPアドレスと送信元IPアドレスを変換することができる。このような NAT ルーターを市販で購入するだけでなく、複数のネットワーク ポートを備えた Linux ホストでもこの機能を実行できます。

ここに画像の説明を挿入
上の図に示すように、ホスト「Linux Router」があります。このホストはパブリック ネットワーク IP アドレス 1.1.1.1 を介してパブリック ネットワークに接続されており、そのもう 1 つのネットワーク カードは内部プライベート ネットワーク 192.168.1.0/ に接続されています。 24. 192.168.1.0/24 にはプライベート ネットワーク セグメントがあることは誰もが知っています。このネットワーク セグメントの下にあるすべての IP アドレスはプライベート IP アドレスです。ルーターはプライベート IP アドレスを持つデータ パケットを転送しないため、パブリック ネットワーク上のホストは転送することは不可能です。プライベート ネットワーク内のホストにアクセスします (したがって、プライベート IP アドレスを使用すると、ホストのネットワーク セキュリティ保護も提供されます)。
プライベート ネットワーク内のホストが外部ネットワーク内のホストと通信できるようにするために、NAT ルーター (Linux ルーター ホスト) は、プライベート ネットワーク内のホストのプライベート IP アドレスを独自のパブリック IP (つまり、1.1.1.1) に変換します。ここで、外部ネットワーク上のホストは Linux ルーターのパブリック IP アドレスと通信するため、どのパケットが自分自身宛てであり、どのパケットがその下のプライベート ネットワーク内の他のホスト宛てであるかを知る必要があります。ホスト Linux ルーターは、それを経由するすべての TCP/IP 接続のデータベースを維持することで、この区別を完了します。この機能を接続追跡と呼びます。Linux ホストは、メモリ内に TCP/UDP 接続の状態テーブルを作成および維持することによって、この接続追跡機能を実装します。これらすべての接続の状態情報は /proc/net/ip_conntrack ディレクトリに保存され、この状態テーブルには主に IP アドレス、ポート番号、プロトコル タイプ、接続状態、タイムアウト状態が含まれます。次のように:

tcp 6 262872 ESTABLISHED src=2.2.2.2 dst=1.1.1.1 sport=80 dport=65000 [UNREPLIED] src=192.168.1.2 dst=2.2.2.2 sport=65000 dport=80 use=1
udp 17 174 src=1.1.1.1 dst=1.1.1.11 sport=40997 dport=161 src=1.1.1.11 dst=1.1.1.1 sport=161 dport=40997 [ASSURED] use=1

Linux ルーターは、接続追跡機能を通じて、応答メッセージ (192.168.1.2 によって開始された要求に応答するために使用される) が 1.1.1.1 に到着すると、このメッセージをラップトップ コンピューター 192.168.1.2 に転送する必要があることを認識します。応答を送信 パケットの宛先 IP アドレスが 1.1.1.1 から 192.168.1.2 に書き換えられ、192.168.1.2 に転送されます。注: 接続追跡機能に基づくファイアウォールは、ステートフル ファイアウォールと呼ばれます。

NAT 機能は、シナリオに応じて次のカテゴリに分類できます。

  • 1 対 1 NAT (1:1):
    上の図に示すように、プライベート IP アドレスをパブリック IP アドレスに直接変換します。プライベート ネットワーク内にホスト コンピューターが 1 台しかない場合は、1 対 1 NAT を使用できます。 -NAT 1 つ。
  • 1 対多 NAT (1:N):
    1 つのプライベート IP アドレスが複数のパブリック IP アドレスに変換されます。つまり、プライベート ネットワーク上のホストからパブリック ネットワーク上のホストへの TCP/UDP 接続が開始されるたびに、NAT ルーターはパブリック IP ライブラリからパブリック IP を選択し、プライベート IP を選択した IP に変換する必要があります。パブリックIP。上に示したように、プライベート ネットワークにホスト コンピューターが 1 台しかなく、複数のパブリック IP がある場合は、1 対多の NAT を選択できます。
  • 多対 1 NAT (N:1):
    上の図に示すように、複数のプライベート IP がありますが、パブリック IP は 1 つだけであるため、NAT ルーターは複数のプライベート IP を同じプライベート IP アドレスに変換する必要があります (この場合、パブリック IP はこのルータに属しており、これを IP マスカレード マスカレードと呼びます)。
  • 多対多 NAT (N:N):
    複数のプライベート IP と複数のパブリック IP があります。複数のプライベート IP を指定された複数のパブリック IP に変換する必要があります。ここでは多対多 NAT を使用する必要があります。

1.1、SNAT および IP マスカレード (マスカレード)

SNAT (Source Network Address Translation) は、送信元 IP アドレス変換の略称です。SNAT では送信元 IP アドレスのみが変換されるためです。NAT デバイスは、NAT デバイスが伝送するすべてのデバイスによって送信された IP パケットのソース IP アドレスを、NAT デバイスの出口デバイスの IP アドレスに変換します。データ パケットの送信元 IP アドレスは、外部ネットワークへのアクセスが必要な場合にのみ変換されますが、外部ネットワーク上のパブリック ネットワーク サーバーから開始された要求された IP パケットの送信元 IP アドレスは変換されないことに注意してください。プライベート ネットワーク内の任意のサーバーに転送します (つまり、すべてのアクセス接続はプライベート ネットワーク内のホストによって開始される必要があります)。これにより、プライベート ネットワーク内のサーバーのアクセスが保護され、パブリック ネットワークの IP アドレスも大幅に節約されます。SNAT は静的 SNAT と動的 SNAT に分けられます。静的 SNAT は、NAT の背後にある 1 つまたは複数のホストの IP アドレスが同じパブリック IP アドレスに変換されることを意味します。動的 SNAT は、NAT の背後にある 1 つまたは複数のホストの IP アドレスが変換されることを意味します。アドレスは一連のパブリック ネットワーク IP アドレスに変換されます。動的 NAT では、NAT ルーターは接続ごとにパブリック ネットワーク IP プールから IP アドレスを選択するため、同じホストへの複数の接続は異なるパブリック ネットワーク ソース IP アドレスに変換される可能性があります。通常、動的 SNAT、iptables は、各接続が初期化されるときに、この接続に対して最も使用されていないパブリック ネットワーク IP アドレスを選択します。IP プール内に一度も使用されていない IP が複数ある場合、iptables はそのうちの 1 つをランダムに選択します。IP マスカレード マスカレード (MASQ) は静的 SNAT モードで動作します。IP を指定できない場合 (たとえば、パブリック ネットワーク インターフェイスが自動的に IP を取得する場合)、IP マスカレード機能は、外部ネットワークに接続されている NAT ルーターのネットワーク カードを自動的に使用できます。ネットワークIPアドレス。

注意:SNAT是被iptables在linux内核2.4中由Netfilter引入的,而IP伪装则被iptables保留下来,以支持如PPP接口这一类动态配置
     IP地址的接口,它用IP伪装MASQ去代替先找到动态分配的IP再做SNAT这样的过程。

SNAT またはマスカレードをサポートするには、NAT ルーターが接続追跡機能をサポートしている必要があります。これにより、プライベート ネットワーク内のどのサーバーが現在の接続データを開始したかを知ることができ、SNAT を実行してデータを転送する方法を知ることができます。

次の図は、SNAT、MASQ、および接続追跡がどのように機能するかを示しています。
ここに画像の説明を挿入

この図では、

  • ホスト 192.168.1.3 は、2.2.2.2 への接続をアクティブに開始します。この接続要求のデータパケットは Linux ルータに送信されますが、このときの接続要求データパケットの送信元 IP アドレスは 192.168.1.3、宛先 IP アドレスは 2.2.2.2 となります。

  • この時点で 192.168.1.3 の IP に対して SNAT またはマスカレードを設定すると、Linux ルーターは要求メッセージの IP ヘッダーの送信元 IP アドレスを 192.168.1.3 から 1.1.1.1 に変更し、それに応じてパケットを 2.2 に送信します。ルーティング プロトコル .2.2 へ。この接続情報も /proc/net/ip_conntrack に保存します。

  • 2.2.2.2の応答メッセージを受信した場合、Linuxルータに到着する応答メッセージの送信元IPは2.2.2.2、宛先IPは1.1.1.1となります。ここで、Linux ルーターは /proc/net/ip_conntrack で接続情報を検索し、前の手順で確立された接続を見つけます。

  • Linux ルーターは、応答メッセージの IP ヘッダー内のターゲット IP アドレスを 1.1.1.1 から 192.168.1.3 に変更し、ルーティング ルールに従って IP メッセージを 192.168.1.3 ホストに送信します。

      注意:使用SNAT或IP伪装Masquerade时,只有192.168.1.3可以发起到2.2.2.2的连接,
           然而2.2.2.2不能发起到192.168.1.3的连接。因为192.168.1.3是一个私网IP地址。
    

1.2、DNAT

DNAT (宛先ネットワーク アドレス変換) は、パブリック IP アドレスをプライベート IP アドレスに変換します。DNAT の機能は SNAT の機能と逆であるため、SNATを使用してプライベート ネットワーク IP アドレスをパブリック ネットワーク IP アドレスに変換し、DNAT を使用して同じパブリック ネットワーク IP アドレスを同じプライベート ネットワーク IP アドレスに同時に変換すると、の場合、フル NAT が形成されますDNAT は通常、次のシナリオで使用されます。NAT の背後に複数のサーバーがあります。異なるポートまたはプロトコルに従って、同じパブリック IP アドレスを異なるプライベート IP アドレスにマップします。たとえば、HTTP リクエストは HTTP サーバーに転送され、FTP リクエストは送信されますFTPサーバーへ。したがって、この DNAT はポート フォワーディングとも呼ばれます。以下の図に示すように、
ここに画像の説明を挿入
通常の状況では、ホスト 2.2.2.2 はホスト 192.168.1.3 との接続をアクティブに開始できません。これは、192.168.1.3 がプライベート ネットワークの IP アドレスであり、パブリック ネットワーク上のルーターがそのアドレスを転送しないためです。ターゲット アドレス プライベート ネットワーク アドレスを持つ IP パケットの場合。ただし、2.2.2.2 ホストは 1.1.1.1 ホストとの接続要求を開始できます。

  • この時点で、1.1.1.1 ホストで DNAT ルールを設定し、リクエスト メッセージが DNAT ルールをコマンドすると、Linux ルーターはリクエスト メッセージの IP ヘッダーのターゲット IP アドレスを 1.1.1.1 から 192.168.1.3 に変更します。 、このメッセージを 192.168.1.3 に転送し、現在の接続を接続追跡データベースに記録します。

  • 192.168.1.3 が応答メッセージを送り返すと、Linux ルーターはその接続追跡データベースを照会し、この応答メッセージが 2.2.2.2 によって開始された 1.1.1.1 への接続に属していることを確認します。

  • Linux ルーターは、応答メッセージの IP ヘッダーの送信元 IP アドレスを 192.168.1.3 から 1.1.1.1 に変更します。その後、メッセージは 2.2.2.2 に送信されます。

      注意:如果只配置了DNAT,但没有配置SNAT,那么 2.2.2.2可以通过将目标地址设置为1.1.1.1,从而和
           192.168.1.3建立连接。但192.168.1.3不能主动发起连接到2.2.2.2。
    

余談: 多くのホーム SOHO ルーターは、DMZ が提供する DNAT 機能を呼び出します。実際、DNAT を DMZ と呼ぶのは完全に正しいわけではありません。DMZ は Demilitarized Zone の略称で、ネットワーク内のフィルタリング ルールが設定されていない領域を意味します。DMZ は本質的にパブリック IP の集合であり、これらのパブリック ネットワーク IP を使用するサーバーはあらゆる接続を許可します (双方向のすべての接続と通信が許可されます)。実際、家庭用SOHOルーターはLANに対してIPマスカレードMasqueradeを行うため、ルーターのWANポートのパブリックIPを対象となるすべてのIPを受信できるプライベートサーバーをDMZとして使用します。

1.3、フル NAT (フル コーン NAT とも呼ばれます)

フル NAT は、1 つの IP アドレスを別の IP アドレスに完全にマッピングすることです。フル NAT が設定されている場合、NAT の背後にプライベート IP アドレス (例: 192.168.1.3) を持つサーバーは、完全にパブリック ネットワーク上の NAT ルーターによって提供されるパブリック ネットワーク IP アドレス (例: 1.1.1.1) とみなされます。これは、192.168.1.3 によって送信された要求メッセージは、パブリック ネットワーク上のホストから見ると、1.1.1.1 (SNAT) から受信したメッセージと完全に同等であることを意味します。パブリック ネットワーク上の他のホストから 1.1.1.1 に送信されるすべてのパケットでは、このメッセージが開始されたいずれのホストにも属していない場合でも、NAT ルーターはターゲット IP アドレスを 192.168.1.3 に変更し、192.168.1.3 ホストに転送します。 192.168.1.3 ホスト接続 (DNAT) による。
つまり、フル NAT = SNAT+DNAT ですLinux ルーターが、プライベート ネットワーク ホストによって開始された接続に属さない IP メッセージをパブリック ネットワークから受信すると、そのメッセージは 192.168.1.3 に転送されるため、ホスト 192.168.1.3 は、次の理由により接続制限の対象になりません。プライベート IP アドレスとセキュリティ保護。

	注意:在上一章的DNAT的例子里,1.1.1.1可以是NAT路由器的公网IP地址,也可以是它能收到目标地址为1.1.1.1的报文就可以(其它路由
	      器会把目标为1.1.1.1的报文转发给NAT路由器)。如果1.1.1.1是NAT路由器的公网IP地址(如上一章图所示), 我产就无法从公网上访问
	      NAT路由器(比如:我们就无法SSH登录到NAT路由器),因为NAT路由器会把所有发给1.1.1.1的报文都转发给192.168.1.3。

1.4、PAT (NAPT とも呼ばれます)

PAT は Port Address Translation の略で、ポート アドレス変換を意味します。NAPT とも呼ばれます。NAPT は、Network Address and Port Translation の略で、アドレスとポートの変換を意味します。PAT は、IP アドレスを分離して隠蔽するだけでなく、特定のサーバーのポート番号も分離して隠蔽します。たとえば、会社の Web サーバーが NAT ルーターの背後に配置されており、Web サーバーの IP アドレスは 192.168.1.100 です。この場合、NAT ルーターにはパブリック ネットワークの IP アドレスが 1 つだけあり、DNS サーバーでは http://www.ourcompanyname.com の IP アドレスを 1.1.1.1 に設定します。パブリック ネットワークからこの Web サーバーにアクセスする場合、NAT ルーターは、宛先ポート番号 80 で 1.1.1.1 に送信されたすべての受信 IP パケットの宛先 IP アドレスを 192.168.1.100 に変更する必要があります。さらに、同社には専用のイントラネット Web サーバー 192.168.1.200 もあり、これもポート 80 で実行されます (プロトコルに従って、Web サーバーはポート 80 で実行する必要があることがわかっています)。オフィスにいるときは、アドレス http://192.168.1.200 を通じてイントラネット Web サーバーにアクセスできます。ただし、外部ネットワークから内部ネットワークの Web サーバーにアクセスできるようにしたい場合は、PAT を介してこの機能を実装する必要があり、サーバーで使用されていないポート番号 (ポート 2143 など) を選択できます。 1.1.1.1 のポート 2143 上のすべての IP パケットの宛先アドレスとポートが 192.168.1.200 とポート 80 に変更されます。

この構成では、外部ネットワーク上で次のようになります。

  • http://www.ourcompanyname.com にアクセスします。つまり、1.1.1.1:80 に送信されたメッセージは 192.168.1.100:80 に送信され、その後、会社のエクストラネット ホームページにアクセスできます。
  • http://www.ourcompanyname.com:2143 にアクセスします。つまり、1.1.1.1:2143 に送信されたメッセージは 192.168.1.200:80 に送信され、その後、会社のイントラネット ホームページにアクセスできます。

企業のイントラネット Web サーバーが外部ネットワークにアクティブにアクセスする必要がある場合、NAT サーバーは、送信元 IP アドレスが 192.168.1.200 である IP パケットのポートを書き換える必要はなく、SNAT またはマスカレードを構成するだけで済みます。

2. iptables を使用して、複数のネットワーク カードを備えたホストを NAT ルーターとして構成する方法

つづく

3. まとめ

つづく

おすすめ

転載: blog.csdn.net/meihualing/article/details/130328786