NAT
NAT(Network Address Translation,網絡地址轉換) 主要用于在不同網絡(如私有網絡和公共互聯網)之間進行 IP 地址轉換,解決IP 地址短缺問題,并提供一定的安全性。
- IPv4 地址是 32 位(最多
2^32 ≈ 43 億
個地址),但全球設備數量遠超這個范圍。- 私有 IP 地址(如
192.168.1.0/24
)不能直接在公網使用,必須通過 NAT 轉換成公網 IP。
NAT IP轉換過程
當主機A私有IP地址訪問服務器公有IP時,先把數據發給路由器,NAT 路由器將報文的源地址從 10.0.0.10 替換成全局的 IP 202.244.174.37;并在轉換表中建立私有IP和公有IP的映射關系。
當服務器返回報文時,NAT 路由器收到外部的數據時, 再根據轉變表的映射關系,把目標 IP 從 202.244.174.37 替換回10.0.0.10;
當 10.0.0.10 第一次向 163.221.120.9 發送數據時就會生成表中的映射關系;
NAPT
那么問題來了, 如果局域網內, 有多個主機都訪問同一個外網服務器, 那么對于服務器返
回的數據中, 目的 IP 都是相同的. 那么 NAT 路由器如何判定將這個數據包轉發給哪個
局域網的主機?這時候就不能但使用IP建立聯系,要用IP+port。
在同一個子網中每個主機的私有 IP 是唯一的,即使端口號一樣,也能保證唯一性。IP+端口號保證了在同一個子網中,每臺主機以及主機上客戶端的唯一性。
NAPT,轉換的公網IP一樣,但可以分配不同的端口號,也保證了唯一性。
這樣映射雙方都保證了唯一性。
再來想一下,同一子網中主機的私有IP不同,但不同子網的私有IP可能會相同。如果這兩個子網有同一個路由器,在不同子網的兩個主機私有IP相同,端口號也相同,訪問同一個服務器,會怎么樣?
即使不同子網的主機 IP + 端口號相同,NAPT 仍然能基于 NAT 端口號 + 子網信息(NAPT 設備用來區分不同子網的標識信息:入接口eth 源子網?VLAN 標識)唯一映射,確保數據包不會錯誤地送達另一臺主機。
子網 A 的 192.168.1.100:5001 → 203.0.113.1:30001
子網 B 的 192.168.1.100:5001 → 203.0.113.1:30002
服務器返回數據時,NAPT 設備根據 NAT 端口號找到正確的原始子網,并正確轉發回去。
其他 NAT 方案:
策略 NAT(Policy-Based NAT)
- 不同子網使用不同的 NAT 端口范圍,確保 NAT 端口不重疊。
- 例如:
- 子網 A:NAT 端口
30000-31000
- 子網 B:NAT 端口
31001-32000
使用多個公網 IP
- 如果 NAT 設備支持多個公網 IP,可以為不同子網分配不同的公網 IP,避免 NAT 端口沖突:
- 子網 A →
203.0.113.1
- 子網 B →
203.0.113.2
?