1 NAT 產生背景
互聯網中主要依靠IP進行尋址,IPv4地址使用32個比特位進行標記,一般使用點分十進制形式書寫。有類IP分類如表1-1所示:
表 1-1 有類IP分類
網絡類型
|
特征地址位
|
起始地址
|
結束地址
|
默認子網掩碼
|
---|---|---|---|---|
A | 0 | 1.0.0.0 | 126.255.255.255 | 255.0.0.0 |
B | 10 | 128.0.0.0 | 191.255.255.255 | 255.255.0.0 |
C | 110 | 192.0.0.0 | 233.255.255.255 | 255.255.255.0 |
D | 1110 | 224.0.0.0 | 239.255.255.255 | ---- |
E | 1111 | 240.0.0.0 | 255.255.255.255 | ---- |
注:a 由於歷史原因0.0.0.0被保留
b 127.0.0.0 - 127.255.255.255 被用作特殊用途,如127.0.0.1 用於本地回環地址lo
互聯網中的IP地址分配以及TCP/UDP公共服務端口號有專門的機構進行統籌和分配——IANA(Internet Assigned Numbers Authority)。
在互聯網初期,IP地址分配策略使得IP地址浪費嚴重,因此當互聯網以超乎想象的速度發展,終端接入網絡的速度爆炸式增長時,IPv4地址資源很快便被耗盡。2011年2月3日,IANA對外宣布,IPv4地址空間最后5個地址塊被分配完;童年4月15日,亞太區委員會宣布,除了個別保留地址外,本區域所有的IPv4地址基本被耗盡。
不過,早期網絡通信協議和標准的組織已經意識到了IPv4地址馬上被耗盡的危機,因此制定了長期措施和短期措施。長期措施:制定下一代互聯網協議IPv6(Internet Protocol Version 6);短期措施:NAT(Network Address Translation, 網絡地址轉換)和CIDR(Classless Inter-Domain Routing, 無類別域間路由)。
NAT的功能是:將一個IP地址轉換為另一個IP地址。通常一個局域網由於申請不到足夠的IP地址,或者為了編址方便,在局域網內部采用私有IP地址為設備編址,當設備訪問外部網絡時,再通過NAT將私有地址翻譯成合法的共有地址,如圖1-1所示。
圖1-1 NAT示意圖
公網IP地址可以在Internet上使用,且全球唯一,而私有IP地址則是用來在局域網中使用。私有地址范圍如表1-2所示。
表1-2 私有地址范圍
IP地址范圍
|
網絡類型
|
網絡個數
|
---|---|---|
10.0.0.0 ~ 10.255.255.255 | A | 1 |
172.16.0.0 ~ 172.31.255.255 | B | 16 |
192.168.0.0 ~ 192.168.255.255 | C | 256 |
2 NAT 模型
2.1 靜態NAT
手動設置全局IP地址和私有IP地址之間的映射關系,是一一映射,如圖2-1所示。
圖2-1 靜態NAT
該模型一般用於:沒有IP資源緊缺的情況。
2.2 動態NAT
NAT設備維護一個公網IP地址池,內網設備訪問外網時,會從IP地址池內部找到一個空閑公網IP地址進行映射,是一(多)對多映射,如圖2-2所示。
圖2-2 動態NAT
該模型一般用於:可用IP稍微少於需求IP的情況。
2.3 PAT(復用NAT池)
當可用IP大量少於需求IP數量時,動態NAT模型中的NAT池中的地址耗盡,會導致部分內網設備無法訪問網絡。復用NAT池解決了上述問題,其通過端口對NAT池中的公網IP地址進行復用。理論上,一個IP地址可以映射約65000個回話,但實際路由器只支持幾千個會話。
按照端口轉換工作方式不同,又可以進一步對模型進行划分,具體取決於外部主機是如何通過映射公共地址和端口來發送分組的,NAT實現可以分為四類:完全圓錐型(full cone), 受限圓錐型(restricted cone), 端口受限圓錐型(port restricted cone)和對稱型(symmetric),其中完全圓錐形是市場上最常見的實現。
2.3.1 完全圓錐型
一旦內部主機端口對(iAddr:iPort)被NAT網關映射到(eAddr:ePort),所有后續的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);任何一個外部主機發送到(eAddr:ePort)的報文將會被轉換后發到(iAddr:iPort)。也就是說,NAT服務器將不檢驗進入分組的源IP和Port,如圖2-3所示。
圖2-3 完全圓錐型
2.3.2 受限圓錐型
一旦內部主機端口對(iAddr:iPort)被映射到(eAddr:ePort),所有后續的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);只有(iAddr:iPort)向特定的外部主機hAddr發送過數據,主機hAddr從任意端口發送到(eAddr:ePort)的報文將會被轉發到(iAddr:iPort)。也就是說,NAT服務器只檢查源IP,如圖2-4所示。
圖2-4 受限圓錐型
2.3.3 端口受限圓錐型
一旦內部主機端口對(iAddr:iPort)被映射到(eAddr:ePort),所有后續的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);只有(iAddr:iPort)向特定的外部主機端口對(hAddr:hPort)發送過數據,由 (hAddr:hPort)發送到(eAddr:ePort)的報文將會被轉發到(iAddr:iPort)。也就是說,NAT服務器會檢查源IP和Port,如圖2-5所示。
圖2-5端口受限圓錐型
2.3.4 對稱型
NAT網關會把內部主機“地址端口對”和外部主機“地址端口對”完全相同的報文看作一個連接,在網關上創建一個公網“地址端口對”映射進行轉換,只有收到報文的外部主機從對應的端口對發送回應的報文,才能被轉換。即使內部主機使用之前用過的地址端口對去連接不同外部主機(或端口)時,NAT網關也會建立新的映射關系,如2-6所示。
圖2-6對稱型
3 NAT 支持的設備
3.1 路由器
a 例如家中上網用的路由器。家中路由器一般會提供DHCP服務,一般分配給上網設備的是私有地址,例如我家中上網給我分配的ip地址如圖2-7所示,而接入Internet的地址則是ISP(Internet Service Provider,網絡服務提供商)分配給我們的,僅一個公網地址(由於無法連接路由,因此無法抓包展示NAT轉換后的IP)。使用家用路由器組建的網絡拓撲圖如圖2-8所示。
圖2-7 家中分配的局域網私有IP示例
圖2-8 家庭組件的私有網接入公有網示意圖
(圖中家用路由器使用了交換機圖標示意,是因為家用路由器並非工業用路由器,功能簡單,因此使用交換機圖標表示更貼切)
b 除此之外,NAT也可以對流量進行負載均衡。如果一個服務器的訪問量非常大,通常會通過建立多台映像服務器對訪問進行分流。從外部看,這些服務器的IP地址相同,NAT設備會把多個服務器的訪問映射到不同的服務器上,實現負載均衡。負載均衡與其他NAT的主要區別是,他將來自外網的統一合法IP翻譯成不同的內網IP,如圖2-9所示。
圖2-9 流量負載均衡
3.2 防火牆
3.3 代理服務器:一般用於提供局域網接入功能。
4 NAT簡單仿真(NAT池模型)
眾所周知,常見的PING命令使用的是ICMP包發送的數據,接下來將公司私有網絡與公網網絡簡化,簡化后的拓撲圖如圖4-1。
圖4-1 公司私網與公網簡化后的網絡拓撲圖
配置如下:
PC0: 192.168.1.1/24
PC1: 192.168.1.2/24
R2: f0/0 192.168.1.254/24 f0/1 202.96.1.1/24
NAT pool: 202.96.1.3/24 – 202.96.1.3/24
access-list: permit 192.168.1.0
R4: f0/1 202.96.1.2/24 lo 2.2.2.2/24
模擬實驗:
PC0: ping 2.2.2.2
抓包結果(IP包 ICMP包):
R2:
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:255 |
PRO:0x1 |
CHKSUM |
|||
SRC IP:192.168.1.1 |
|||||
DST IP:202.96.1.2 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x8 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:254 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.3 |
|||||
DST IP:202.96.1.2 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x8 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
R4:
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:254 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.3 |
|||||
DST IP:202.96.1.2 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x8 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:255 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.2 |
|||||
DST IP:202.96.1.3 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x0 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
R2:
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:255 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.2 |
|||||
DST IP:202.96.1.3 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x0 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
4 |
IHL |
DSCP:0x0 |
TL |
||
ID:0X0 |
0x0 |
FRAG OFFSET:0x0 |
|||
TTL:254 |
PRO:0X1 |
CHKSUM |
|||
SRC IP:202.96.1.2 |
|||||
DST IP:192.168.1.1 |
|||||
OPT:0x0 |
0x0 |
||||
DATA |
TYPE:0x0 |
CODE:0x0 |
CHECKSUM |
ID: |
SEQ NUMBER:34 |
5 NAT 帶來的問題
NAT帶來便利的同時也破壞了網絡傳輸的平等性,下面羅列了常見的問題。
4.1 會話意外中斷
NAT使IP會話的保持時效變短。因為一個會話建立后會在NAT設備上建立一個關聯表,在會話靜默的這段時間,NAT網關會進行老化操作。這是任何一個NAT網關必須做的事情,因為IP和端口資源有限,通信的需求無限,所以必須在會話結束后回收資源。因為網關回收相關轉換表資源以后,新的數據到達時就找不到相關的轉換信息,必須建立新的連接。當這個新數據是由公網側向私網側發送時,就會發生無法觸發新連接建立,也不能通知到私網側的主機去重建連接的情況。這時候通信就會中斷,不能自動恢復。即使新數據是從私網側發向公網側,因為重建的會話表往往使用不同於之前的公網IP和端口地址,公網側主機也無法對應到之前的通信上,導致用戶可感知的連接中斷。NAT網關要把回收空閑連接的時間設置到不發生持續的資源流失,又維持大部分連接不被意外中斷,是一件比較有難度的事情。
目前一般應用應用層會設置保活機制來解決。
4.2 IP追蹤機制失效
NAT在實現上將多個內部主機發出的連接復用到一個IP上,這就使依賴IP進行主機跟蹤的機制都失效了。如網絡管理中需要的基於網絡流量分析的應用無法跟蹤到終端用戶與流量的具體行為的關系。基於用戶行為的日志分析也變得困難,因為一個IP被很多用戶共享,如果存在惡意的用戶行為,很難定位到發起連接的那個主機。
有些服務器設置有連接限制,同一時刻只接納來自一個IP的有限訪問(有時是僅一個訪問),這會造成不同用戶之間的服務搶占和排隊。有時服務器端這樣做是出於DOS攻擊防護的考慮,因為一個用戶正常情況下不應該建立大量的連接請求,過度使用服務資源被理解為攻擊行為。但是這在NAT存在時不能簡單按照連接數判斷。
4.3 同一應用多會話失敗
當一個應用需要保持多個雙向連接時,麻煩就很大。NAT不能理解多個會話之間的關聯性,無法保證轉換符合應用需要的規則。當NAT網關擁有多個公有IP地址時,一組關聯會話可能被分配到不同的公網地址,這通常是服務器端無法接受的。更為嚴重的是,當公網側的主機要主動向私網側發送數據時,NAT網關沒有轉換這個連接需要的關聯表,這個數據包無法到達私網側的主機。這些反方向發送數據的連接總有應用協議的約定或在初始建立的會話中進行過協商。但是因為NAT工作在網絡層和傳輸層,無法理解應用層協議的行為,對這些信息是無知的。
4.4 IP分片傳輸失敗
4.5 ICMP包的映射
6 NAT的未來
在IPv4時代,NAT技術延緩了IPv4地址的耗盡,成功應對了網絡終端爆炸性發展所帶來的問題。
而IPv6必將在不遠的未來取代IPv4,現階段正直IPv4向IPv6過渡階段。該階段,在NAT技術基礎上發展起來的NAT-PT技術也會作跨網訪問不可或缺的網絡技術。
即便是在不必擔心IP地址耗盡的IPv6時代,NAT技術作為屏蔽內部網絡、增加內網安全的重要技術也必將繼續作為網絡重要的技術之一存在下去。