NAT 和 PNAT

核心概念與背景

  • IPv4 地址枯竭: IPv4 地址空間有限(約 42.9 億個),早已分配殆盡。NAT/PNAT 是緩解此問題的最重要、最廣泛部署的技術。
  • 私有 IP 地址空間: IANA 保留了三個 IPv4 地址段專供私有網絡內部使用(RFC 1918):
    • 10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
    • 172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
    • 192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
  • 問題: 私有 IP 地址不能直接在公共互聯網上路由。如果內部網絡使用私有 IP 的設備需要訪問互聯網資源,它們的私有 IP 對公網服務器來說是不可達的,服務器也無法將響應正確地發送回來。
  • 解決方案: NAT/PNAT 網關(通常是路由器、防火墻)充當內部私有網絡和外部公共互聯網之間的“翻譯官”。

1. NAT (Network Address Translation) - 基礎網絡地址轉換

  • 原理:
    • NAT 的基本思想是在網絡層(IP層) 修改 IP 數據包的源 IP 地址目標 IP 地址
    • 最常見的場景是 源 NAT (SNAT):當內部主機(私有 IP)訪問外部服務器(公網 IP)時,NAT 網關將出站數據包的源 IP 地址從內部主機的私有 IP 替換為網關自身的一個公網 IP 地址
    • 當外部服務器響應時,數據包的目標 IP 地址就是這個網關的公網 IP 地址。
    • NAT 網關收到響應包后,根據其維護的NAT 會話表(NAT Table / Connection Tracking Table),查找對應的內部私有 IP,將入站數據包的目標 IP 地址從網關的公網 IP 替換回內部主機的私有 IP,然后將數據包轉發給內部主機。
  • 作用:
    • IP 地址復用: 允許多個內部主機共享一個或少量公網 IP 地址訪問互聯網。這是解決 IPv4 地址短缺的核心機制。
    • 簡化網絡管理: 內部網絡可以使用易于管理的私有地址空間,無需為每臺設備申請公網 IP。
    • 一定程度的安全隱藏: 內部網絡的拓撲結構和主機的真實私有 IP 對外部網絡是隱藏的,外部只能看到 NAT 網關的公網 IP。這增加了攻擊者直接定位和攻擊內部主機的難度(但并非真正的防火墻,仍需配合防火墻規則)。
  • 實現 (以 Linux iptables 為例 - SNAT):
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.5
    
    • -t nat: 操作 nat 表。
    • -A POSTROUTING: 在 POSTROUTING 鏈(數據包離開網關之前)添加規則。
    • -s 192.168.1.0/24: 匹配源 IP 為內部私有網段 (192.168.1.0/24) 的數據包。
    • -o eth0: 匹配從網關的外部接口 (eth0) 出去的數據包。
    • -j SNAT: 執行 SNAT 動作。
    • --to-source 203.0.113.5: 將匹配數據包的源 IP 修改為網關的公網 IP 203.0.113.5
  • 類型 (主要):
    • 靜態 NAT (Static NAT / 1:1 NAT): 將一個內部私有 IP 固定映射到一個外部公網 IP。常用于需要從公網直接訪問的內部服務器(如 Web 服務器)。實現時通常結合 DNAT (Destination NAT)
    • 動態 NAT (Dynamic NAT / Pool NAT): 網關擁有一個公網 IP 地址池。當內部主機發起連接時,網關從池中動態分配一個空閑的公網 IP 映射給該主機的私有 IP(映射關系在連接建立時創建,連接終止后釋放回池)。同一時間,一個公網 IP 只能被一個內部主機使用。如果池中 IP 耗盡,新的連接會被阻塞。
    • 局限性: 無論是靜態還是動態 NAT,一個公網 IP 在同一時間只能供一個內部主機用于訪問互聯網(或提供對外服務)。這極大限制了共享能力。

2. PNAT / PAT / NAPT (Port Network Address Translation / Port Address Translation / Network Address Port Translation)

  • 原理:
    • PNAT (通常稱為 PAT 或 NAPT) 是 NAT 的超集和增強版,也是當今最普遍使用的 NAT 形式(家庭路由器、企業防火墻默認都是這種)。
    • 它不僅在網絡層(IP層) 修改 IP 地址(源或目標),更重要的是在傳輸層(TCP/UDP層) 修改端口號(Port Number)
    • 核心機制: 當多個內部主機(不同私有 IP)使用相同的協議(如 TCP/UDP)訪問外部網絡時,PNAT 網關不僅將它們的源 IP 替換為網關的同一個公網 IP,還會為每個連接動態分配一個唯一的源端口號。這個組合 (公網IP : 唯一端口) 在公網上唯一標識了來自內部特定主機 (私有IP : 原始源端口) 的連接。
    • NAT 會話表是關鍵: 網關維護一個詳細的 NAT 會話表,記錄:
      • 內部私有 IP (Internal IP)
      • 內部源端口 (Internal Port)
      • 協議 (Protocol, e.g., TCP/UDP)
      • 外部目標 IP (External IP)
      • 外部目標端口 (External Port)
      • 轉換后的公網 IP (Translated IP - 通常是網關 WAN 口 IP)
      • 轉換后的源端口 (Translated Port - 由網關動態分配的唯一端口)
    • 過程詳解 (出站 - SNAT with PAT):
      1. 內部主機 192.168.1.100:5000 (TCP) 訪問公網服務器 203.0.113.10:80
      2. 數據包到達 PNAT 網關 (公網 IP 203.0.113.5)。
      3. 網關檢查 NAT 表,若沒有對應會話,則創建新條目:
        • Internal IP:Port = 192.168.1.100:5000
        • External IP:Port = 203.0.113.10:80
        • Protocol = TCP
        • Translated IP:Port = 203.0.113.5:35000 (網關動態選擇一個空閑高端口號,如 35000)
      4. 網關修改數據包:
        • 源 IP: 192.168.1.100 -> 203.0.113.5
        • 源端口: 5000 -> 35000
      5. 修改后的數據包 [Src: 203.0.113.5:35000, Dst: 203.0.113.10:80] 被發送到公網。
      6. 服務器 203.0.113.10 收到請求,處理后將響應發送給 203.0.113.5:35000
      7. PNAT 網關收到響應包 [Src: 203.0.113.10:80, Dst: 203.0.113.5:35000]
      8. 網關查詢 NAT 表,找到匹配條目:目標 IP:Port 203.0.113.5:35000 對應內部主機 192.168.1.100:5000 和外部目標 203.0.113.10:80
      9. 網關修改響應包:
        • 目標 IP: 203.0.113.5 -> 192.168.1.100
        • 目標端口: 35000 -> 5000
      10. 修改后的響應包被轉發給內部主機 192.168.1.100:5000
    • 入站訪問 (端口轉發 - DNAT with PAT): PNAT 也用于將外部訪問網關公網 IP 的特定端口映射到內部服務器的特定端口。
      iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
      
      • 外部訪問 203.0.113.5:8080 -> 網關在 PREROUTING 鏈修改目標為 192.168.1.100:80
  • 作用 (在基礎 NAT 作用之上增強):
    • 超高效率的 IP 復用: 成百上千的內部設備可以同時通過同一個公網 IP 地址訪問互聯網。這是解決 IPv4 地址枯竭問題的終極利器。端口號空間(0-65535,通常使用 1024-65535)提供了巨大的復用能力。
    • 成本效益: 企業或 ISP 只需為網關購買少量甚至一個公網 IP,即可滿足大量用戶上網需求。
    • 保留基礎 NAT 的優點: 簡化管理、隱藏內部網絡拓撲、提供基本安全屏障。
  • 實現 (以 Linux iptables 為例 - MASQUERADE):
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
    
    • -j MASQUERADE: 這是 PNAT/NAPT 在 iptables 中最常用的目標,特別適用于網關 WAN 口 IP 是動態獲取(如 PPPoE)的情況。
    • MASQUERADE 自動使用網關出口接口 (eth0) 的當前公網 IP 作為轉換后的源 IP。
    • 它會自動進行端口轉換 (PAT),為每個連接動態分配唯一的源端口。
    • SNAT --to-source 更靈活,因為不需要指定固定 IP,特別適合動態 IP 環境。

NAT/PNAT 總結對比

特性NAT (基礎/動態/靜態)PNAT/PAT/NAPT
核心修改IP 地址 (網絡層 - L3)IP 地址 + 端口號 (網絡層 L3 + 傳輸層 L4)
地址映射1 個私有 IP <-> 1 個公網 IP (或動態池中 1 個)多個私有 IP <-> 1 個公網 IP
端口映射不修改端口動態修改源端口 (出站) / 重定向目標端口 (入站)
復用能力低 (1 公網 IP 同時只能服務 1 個內部主機連接)極高 (1 公網 IP 可同時服務數萬個連接)
主要類型靜態 NAT (1:1), 動態 NAT (M: N, N 較小)動態 PAT/NAPT (M: 1, M 很大)
典型應用服務器映射 (靜態), 小型固定 IP 池共享 (動態)家庭寬帶路由, 企業員工上網, 移動網絡
iptables 目標SNAT --to-source, DNAT --to-destinationMASQUERADE (動態 SNAT+ PAT), DNAT --to-destination[:port] (端口轉發)
解決 IPv4 短缺效率中等極高 (主流方案)

重要補充與注意事項

  1. NAT 不是防火墻: 雖然 NAT 隱藏了內部 IP,提供了一定的安全好處(模糊安全),但它本身不具備狀態檢測或基于策略的包過濾功能。必須配合狀態防火墻(如 Linux 的 iptables/nftables filter 表)才能提供真正的網絡安全防護。默認的 NAT 行為通常是“允許內部發起連接的返回流量”,這本身依賴狀態跟蹤,但主動入站連接控制需要防火墻規則。
  2. NAT 穿透 (NAT Traversal / Hole Punching): NAT/PAT 破壞了 IP 端到端通信模型,給 P2P 應用(如 BitTorrent, VoIP, 視頻通話)帶來了挑戰。需要 STUN, TURN, ICE 等技術幫助位于不同 NAT 后的設備建立直接連接。
  3. NAT 類型: 根據 NAT 設備處理入站未映射連接的方式,分為多種類型(完全錐形 NAT, 受限錐形 NAT, 端口受限錐形 NAT, 對稱 NAT)。不同類型的 NAT 穿透難度不同,對稱 NAT 穿透最難。
  4. 應用層網關 (ALG - Application Layer Gateway): 某些協議(如 FTP, SIP, IPsec)在應用層數據包中嵌入了 IP 地址和端口信息。標準的 NAT/PAT 無法修改這些嵌入式信息,會導致協議失效。ALG 是運行在 NAT 設備上的特殊模塊,能識別這些協議并修改其載荷中的地址信息。ALG 有時會引入兼容性問題。
  5. 連接追蹤 (Conntrack): NAT/PAT 的核心依賴是連接狀態跟蹤表(conntrack table)。這個表有大小限制,在遭受 DDoS 攻擊或存在大量連接(如 P2P)時可能被填滿,導致新連接無法建立。需要監控和優化 conntrack 設置。
  6. IPv6 的愿景: IPv6 擁有巨大的地址空間(340 萬億億億億個地址),設計目標是恢復真正的端到端通信,理論上不再需要 NAT/PAT 來解決地址短缺問題。然而,出于安全策略(如隱藏內部拓撲)、兼容性、或過渡期考慮,IPv6 環境下仍可能使用 NAT (NAT66) 或更復雜的轉換技術(NAT64/DNS64)。

結論:

NAT 和 PNAT (PAT/NAPT) 是現代互聯網不可或缺的基石技術。基礎 NAT 解決了私有網絡訪問公網的基本需求,而 PNAT 通過引入端口轉換,極大地提升了公網 IP 地址的復用效率,是應對 IPv4 地址枯竭的核心方案,廣泛應用于家庭、企業、移動網絡等各種場景。理解它們的工作原理(尤其是 PNAT 的 IP+Port 映射和狀態跟蹤表)、實現方式(如 Linux MASQUERADE)以及優缺點(解決地址短缺 vs 破壞端到端通信、需要防火墻配合、NAT 穿透問題),對于設計、管理和維護網絡至關重要。盡管 IPv6 旨在消除對 NAT 的依賴,但在可預見的未來,NAT/PAT 仍將繼續扮演重要角色。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918903.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918903.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918903.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows系統創建FTP服務

一丶開啟FTP功能 控制面板->程序與功能->啟用或關閉windows功能->Internet Information Services->勾選FTP服務器二丶創建FTP服務 1丶控制面板->windows工具->Internet Information Services (IIS) 管理器2丶網站->添加FTP站點->輸入對應內容3丶點擊新…

DeepSeek補全IBM MQ 9.4 REST API 執行命令的PPT

DeepSeek補全了我在網上找到的PPT的一頁內容&#xff0c;幫了大忙了。人機協同&#xff0c;人工智能可以協助人更好的做事。下面的內容是講解IBM MQ REST API 執行IBM MQ命令的PPT: MQSC for REST Tailored RESTful support for individual MQ objects and actions are in the …

【swift】SwiftUI動畫卡頓全解:GeometryReader濫用檢測與Canvas繪制替代方案

SwiftUI動畫卡頓全解&#xff1a;GeometryReader濫用檢測與Canvas繪制替代方案一、GeometryReader的性能陷阱深度解析1. 布局計算機制2. 動畫中的災難性表現二、GeometryReader濫用檢測系統1. 靜態代碼分析器2. 運行時性能監控三、Canvas繪制優化方案1. 基礎Canvas實現2. 性能優…

悄悄話、合唱層次感:聲網空間音頻解鎖語聊新玩法

作為語聊房主播&#xff0c;我曾覺得線上相聚差點意思。多人開麥時聲音混雜&#xff0c;互動缺真實感&#xff0c;觀眾留不住&#xff0c;自己播著也沒勁。直到平臺接入聲網空間音頻&#xff0c;一切改觀&#xff0c;觀眾說像在真實房間聊天&#xff0c;留存率漲 35%&#xff0…

【工具】多圖裁剪批量處理工具

文章目錄工具核心功能亮點1. 批量上傳與智能管理2. 精準直觀的裁剪控制3. 一鍵應用與批量處理為什么這個工具能提升你的工作效率&#xff1f;統一性與一致性保證節省90%以上的時間專業級功能&#xff0c;零學習成本實際應用場景電子商務攝影工作內容創作教育領域技術優勢完全在…

如何提升需求分析能力

要系統性地提升需求分析能力&#xff0c;核心在于實現從一個被動的“需求記錄員”&#xff0c;向一個主動的、價值驅動的“業務問題解決者”的深刻轉型。要完成這一蛻變&#xff0c;必須在五個關鍵領域進行系統性的修煉與實踐&#xff1a;培養“穿透表象”的系統思維能力、掌握…

另類的pdb恢復方式

cdb中有pdb1,pdb2 需求&#xff1a;希望將在線熱備份pdb1的備份集a&#xff0c;恢復成pdb3&#xff0c;使得cdb中有pdb1,2,3 參考到的&#xff1a;RMAN備份恢復典型案例——跨平臺遷移pdb - 墨天輪 ORA-65122: Pluggable Database GUID Conflicts With The GUID Of An Existi…

HarmonyOS 實戰:用 @Observed + @ObjectLink 玩轉多組件實時數據更新

摘要 在鴻蒙&#xff08;HarmonyOS&#xff09;應用開發中&#xff0c;實時數據更新是一個繞不開的話題&#xff0c;尤其是在你封裝了很多自定義組件、需要多個組件之間共享和同步數據的場景里。過去我們可能會依賴父子組件直接傳參或全局狀態管理&#xff0c;但這樣寫會讓代碼…

云原生俱樂部-雜談2

說實話&#xff0c;雜談系列可能會比較少&#xff0c;因為畢竟大部分時間都是上的線上&#xff0c;迄今為止也是&#xff0c;和雷老師與WH的交流不是很多。這個系列僅僅是我在做其他筆記部分無聊的時候來寫的&#xff0c;內容也沒有規劃過&#xff0c;隨想隨寫。倒不是時間太多…

波浪模型SWAN學習(1)——模型編譯與波浪折射模擬(Test of the refraction formulation)

SWAN模型編譯與波浪折射模擬&#xff08;Test of the refraction formulation&#xff09;編譯過程算例簡介參數文件文件頭&#xff08;HEADING&#xff09;計算區域和網格地形數據邊界條件物理模塊設置輸出設置執行參數模擬結果由于工作原因&#xff0c;最近開始接觸波浪模型&…

更換cmd背景圖片

打開cmd 右擊頂部&#xff0c;選擇設置選擇命令提示符&#xff0c;外觀選擇背景圖像路徑更改成自己的圖片&#xff0c;然后右下角保存 設置成功

基于RobustVideoMatting(RVM)進行視頻人像分割(torch、onnx版本)

發表時間&#xff1a;2021年8月25日 項目地址&#xff1a;https://peterl1n.github.io/RobustVideoMatting/ 論文閱讀&#xff1a;https://hpg123.blog.csdn.net/article/details/134409222 RVM是字節團隊開源的一個實時人像分割模型&#xff0c;基于LSTMConv實現&#xff0c;…

強制從不抱怨環境。

警世俗語&#xff1a;強者逆襲心法&#xff08;句句穿心&#xff09;環境是泥潭&#xff1f;那就讓它開出金蓮&#xff01; —— 抱怨是弱者的裹腳布&#xff0c;行動是強者的登天梯。爛泥里也能種出搖錢樹&#xff0c;關鍵看你敢不敢下手挖&#xff01;老天爺發牌爛&#xff1…

MC0439符號統計

碼蹄集OJ-符號統計 MC0439?符號統計 難度&#xff1a;黃金 時間限制&#xff1a;1 秒 占用內存&#xff1a;256 M 收藏 報錯 在華容道放曹的緊張時刻&#xff0c;小碼哥接到了一個看似微不足道卻至關重要的任務&#xff1a;解讀一條僅由小寫英文字母組成的神秘字符串 s&#…

Android Jetpack 系列(五)Room 本地數據庫實戰詳解

1. 簡介 在需要輕量級本地持久化的場景中&#xff0c;DataStore 是一個理想的選擇&#xff08;詳見《Android Jetpack 系列&#xff08;四&#xff09;DataStore 全面解析與實踐》&#xff09;。但當你面臨如下需求時&#xff0c;本地數據庫便顯得尤為重要&#xff1a; 復雜的…

C語言實現類似C#的格式化輸出

在C#中&#xff0c;格式化輸出可以使用索引占位符以及復合格式的占位符&#xff0c;可以不用關心后面參數是什么類型&#xff0c;使用起來非常方便&#xff0c;如下簡單的示例&#xff1a; Console.WriteLine("{2} {1} {0} {{{2}}}", "Hello, World!", 1,…

一人公司方法論

** 一人公司方法論 ** 那什么是一人公司&#xff1f; 字面的理解就是一個人運營的公司&#xff0c;但實際上它指代的是比較少的人運營的小公司&#xff0c;一般來說 1 ~ 3 個人運營的公司&#xff0c;也可以把它放到一人公司的范圍以內。其他一些形式&#xff0c;比如說一個人再…

Ceph CSI 鏡像刪除流程與 Trash 機制失效問題分析文檔

#作者&#xff1a;閆乾苓 文章目錄一、問題背景二、實際行為三、源碼分析四、分析與推論五、期望行為與建議優化六、結論一、問題背景 在生產環境中&#xff0c;為避免因誤操作導致的永久數據丟失&#xff0c;Ceph RBD 提供了 Trash 功能&#xff0c;允許將鏡像“軟刪除”至回…

.NET Framework 3.5 不原生支持PreApplicationStartMethod特性

.NET Framework 3.5 不原生支持PreApplicationStartMethod特性。這個特性是在 .NET Framework 4.0 中引入的&#xff0c;用于在應用程序啟動早期執行初始化邏輯。 在.NET 3.5 中&#xff0c;如果你需要實現類似的 “應用啟動時自動注冊模塊” 功能&#xff0c;需要通過手動配置…

智能巡檢技術淺析

從機載智能硬件到深度學習算法&#xff0c;從實時邊緣計算到數字孿生平臺&#xff0c;無人機AI智能巡檢通過多模態感知、自主決策和持續進化&#xff0c;實現從"被動檢查"到"主動預防"的跨越式發展。機載智能硬件邊緣計算與機載AI芯片當代先進巡檢無人機已…