1. 程式人生 > >NAT 原理與NAT穿越

NAT 原理與NAT穿越

轉自:https://blog.csdn.net/whoamiyang/article/details/51992208?utm_source=blogxgwz6

最近在看負載均衡方面的東西中很多都提到了NAT穿越,特意在此總結一下:
先做一個約定:
內網A中有:A1(192.168.30.112),A2(192.168.30.114)兩個使用者
閘道器X1(一個NAT裝置)有公網IP222.225.80.51;
內網B中有:B1(192.168.40.112),B2(192.168.40.114)兩個使用者
閘道器Y1(一個NAT裝置)有公網IP222.225.50,34;.


NAT的簡介和原理
簡介

NAT即Network Address Translation,它可以讓那些使用私有地址的內部網路連線到Internet或其它IP網路上.NAT路由在將內部網路的資料包傳送到公用網路時,在IP包的報頭把私有地址轉換成合法的IP地址.
原理:

當內部網路中的一臺主機想傳輸資料到外部網路時,它先將資料包傳輸到NAT路由器上,路由器檢查資料包的報頭,獲取該資料包的源IP資訊,並從它的NAT對映表中找出與該IP匹配的轉換條目,用所選的內部全域性地址(全域性唯一IP地址)來替換內部區域性地址,並轉發資料包.
當外部網路對內部主機進行應答時,資料包被送到NAT路由器上,路由器接收到目的地址為內部全域性地址(外網IP)的資料包,它將用內部全域性地址通過NAT對映表查詢內部區域性地址,然後將資料包的目的地址替換成內部區域性地址(內網私有IP),並將資料包轉發到內部主機.


NAT有什麼優點和缺點?
優點

    對於家庭或小型商業機構,使用NAT可以更便宜,更有效的接入Internet。
    使用NAT可以緩解目前全球IP地址不足的問題.
    NAT能夠隱藏內部網路,保證內部網路的安全性.

缺點

    NAT會增加延遲,因為要轉換的每個資料包包頭的IP地址,增加了延遲.
    導致無法進行端到端IP跟蹤.
    NAT會使某些使用內嵌地址的應用不能正常工作.

NAT的三種類型


靜態NAT (一對一)

靜態轉換:(static Nat):是指將內部網路的私有IP地址轉換為公有IP地址,IP地址對是一對一的,是一成不變的,某個私有IP地址只轉換為某個公有IP地址,藉助靜態轉換,可以實現外部網路對內部網路中某些特定裝置(如伺服器)的訪問.
假設在A網中A1客戶機請求百度具體過程如下:(前提是已經進行過靜態NAT配置.)
首先進行DNS解析得到百度的IP為180.97.33.107:4000.接下來的過程如下:
請求過程:

在客戶機
192.168.30.112:4000 --> 180.97.33.107:4000
在閘道器:
222.225.50.81:4000  --> 180.97.33.107:4000
閘道器上的靜態對映表:
192.168.30.112:4000  -->222.225.80.51:4000
根據公網IP,改請求包的源IP.

迴應過程
百度的應用伺服器收到請求後,處理請求,回覆請求如下:

在百度的應用伺服器上:
180.97.33.107:4000   --->222.25.50.81:4000
在閘道器:
180.97.33.107:4000   --->192.168.30.112:4000
根據閘道器上的靜態對映表,改變目的IP;

總結

在A網中,閘道器中只有一個合法的公網IP,在A網中的內網中,就只能有一臺pc能通過這個閘道器訪問外網,它們之間是一一對應關係,一個內網IP對應閘道器的一個公網IP,再進行配置時就已經指定.如果想讓內網中的其它pc也能訪問外網,那麼閘道器就必須有多個公網IP,並對每臺系想訪問外網的pc進行靜態配置.


動態NAT (多對多)

動態轉換是指將內部網路的私有IP地址轉換為公用IP地址時,IP地址對並不是一一對應的,而是隨機的。所有被管理員授權訪問外網的私有IP地 址可隨機轉換為任何指定的公有IP地址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作為外部地址時,就可以進行動態轉換。每個地址 的租用時間都有限制。這樣,當ISP提供的合法IP地址略少於網路內部的計算機數量時,可以採用動態轉換的方式。
繼續假設A網中的A1訪問百度.
前提是進行過動態NAT配置. 這裡假設閘道器A上有3個合法的公網IP(222.225.80.51,222.225.80.52,222.225.80.53)
請求過程

在客戶機
192.168.30.112:4000 --> 180.97.33.107:4000
在閘道器:
222.225.80.51:4000  --> 180.97.33.107:4000 //這個公網IP是從配置時指定的公網IP中隨機選擇的.也有可能會是222.225.80.52或222.225.80.53;
閘道器上的靜態對映表:
192.168.30.112:4000  -->222.225.80.51:4000
根據公網IP,改請求包的源IP.

迴應過程

在百度的應用伺服器上:
180.97.33.107:4000   --->222.25.50.81:4000
在閘道器:
180.97.33.107:4000   --->192.168.30.112:4000
根據閘道器上的靜態對映表,改變目的IP;

埠多路複用(多對一,目前使用最多的)

通過使用埠多路複用,可以達到一個公網地址對應多個私有地址的一對多轉換。在這種工作方式下,內部網路的所有主機均可共享一個合法外部IP地 址實現對Internet的訪問,來自不同內部主機的流量用不同的隨機埠進行標示,從而可以最大限度地節約IP地址資源。同時,又可隱藏網路內部的所有 主機,有效避免來自internet的攻擊。因此,目前網路中應用最多的就是埠多路複用方式。

    1

A網中的A1,A2同時訪問百度
請求過程

在客戶機
192.168.30.112:4000  ---> 180.97.33.107:4000
192.168.30.114:4000  ---> 180.97.33.107:4000
在閘道器
222.225.80.51:2223   ---> 180.97.33.107:4000
222.225.80.51:2345   --->180.97.33.107:4000
閘道器的對映:
192.168.30.112:4000  ---> 222.225.80.51:2223
192.168.30.114:4000  ---> 222.225.80.51:2345

回覆過程和上面的相同,先由百度應用伺服器發給閘道器,查詢對映表,發給對應的pc;
不同NAT 閘道器後的內部主機如何互訪?(P2P如何穿越NAT)?
場景

A網中的A1(192.168.30.112)想訪問B網中的B1(192.168.40.112);
假設1:假設A網中A1首先訪問B網的閘道器(222.225.50.34),那麼A1又怎麼能知道B1的閘道器是222.225.50.34.好,暫且假設A1知道B1的閘道器為222.225.50.34,現在請求到了B1的閘道器,那麼它又怎麼知道發給A網中的哪個主機pc呢.
向外部固定的伺服器註冊外部地址和埠號.

    首先,A1和B1都要向伺服器發起註冊,連線中攜帶使用者名稱,這樣伺服器收到連線後就能將註冊資訊中攜帶的IP地址,埠號和使用者名稱關聯,做成一張表:
    eg:A1,B1訪問180.34.56.12進行註冊.

A1 192.168.30.112:4000  -- > 180.34.56.12:5687  
B1 192.168.40.112:4000  -- > 180.34.56.12:5678

A1的閘道器對映表: 192.168.30.112:4000   --> 222.225.80.51:2345
B1的閘道器對映表:192.168.40.112:4000   --> 222.225.50.34:3245

在180.34.56.12儲存一張表

使用者名稱  閘道器IP
A1 222.225.80.51 2345
B1  222.225.50.34 3245


現在假設A1訪問B1,先去180.34.56.12檢索B1的閘道器的IP和埠,檢索到向其傳送連線.

    當資料包到達B1的閘道器時,根據外網IP和埠查詢閘道器的對映表得到內部IP和埠。
    把資料包發給內網對應的pc.
---------------------
作者:楊龍飛的部落格
來源:CSDN
原文:https://blog.csdn.net/whoamiyang/article/details/51992208
版權宣告:本文為博主原創文章,轉載請附上博文連結!