NAT - 具有不同私有 IP 地址但相同公共 IP 的兩台主機
我正在研究 NAT 過程,但我對定址有疑問。當 NAT 將私有 IP 地址轉換為公共 IP 地址時,如果配置正確,它可以將不同的私有 IP 轉換為相同的公共 IP。兩台主機怎麼可能使用同一個公網IP?我的意思是,如果我 ping 那個 IP,我會得到他們兩個的回應嗎?
有 NAT 的變體,您指的是*RFC 2663,IP 網路地址轉換器 (NAT) 術語和注意事項*中所述的 NAPT(網路地址埠轉換) :
4.1.2. 網路地址埠轉換 (NAPT)
NAPT 通過還翻譯傳輸標識符(例如,TCP 和 UDP 埠號、ICMP 查詢標識符)進一步擴展了翻譯的概念。這允許將多個私有主機的傳輸標識符復用到單個外部地址的傳輸標識符中。NAPT 允許一組主機共享一個外部地址。請注意,NAPT 可以與基本 NAT 結合使用,以便將外部地址池與埠轉換結合使用。
對於從專用網路出站的數據包,NAPT 將轉換源 IP 地址、源傳輸標識符和相關欄位,例如 IP、TCP、UDP 和 ICMP 標頭校驗和。傳輸標識符可以是 TCP/UDP 埠或 ICMP 查詢 ID 之一。對於入站數據包,將轉換目標 IP 地址、目標傳輸標識符以及 IP 和傳輸標頭校驗和。
基本上,IPv4 和傳輸協議地址(TCP/UDP 埠或 ICMP 查詢 ID)都被轉換,而不僅僅是 IPv4 地址。這意味著您轉換為單個 IPv4 地址,但也轉換為各種傳輸地址,因此它不僅僅依賴於 IPv4 地址。這產生了一個限制,這意味著您只能將 NAPT 與 TCP、UDP 和 ICMP 一起使用。其他現有或未來的傳輸協議被 NAPT 破壞,一些使用 TCP 或 UDP 的應用程序或應用層協議也是如此。
這在*RFC 3022,傳統 IP 網路地址轉換器(傳統 NAT)*中有進一步解釋:
2.2. NAPT 概述
比如說,一個組織有一個私有 IP 網路和一個到服務提供商的 WAN 連結。專用網路的存根路由器在 WAN 鏈路上分配了一個全球有效的地址,組織中的其餘節點具有僅具有本地意義的 IP 地址。在這種情況下,可以允許專用網路上的節點在 NAPT 的幫助下使用單個註冊的 IP 地址同時訪問外部網路。NAPT 將允許將類型(本地 IP 地址、本地 TU 埠號)的元組映射到類型(註冊的 IP 地址、分配的 TU 埠號)的元組。
此模型適合大多數小型家庭辦公室 (SOHO) 組使用單個服務提供商分配的 IP 地址訪問外部網路的要求。該模型可以通過靜態映射每個已註冊 IP 地址的服務 TU 埠的本地節點來擴展以允許入站訪問。
在下圖 3 的範例中,存根 A 在內部使用 A 類地址塊 10.0.0.0/8。服務提供商為存根路由器的 WAN 介面分配了一個 IP 地址 138.76.28.4。
\ | / +-----------------------+ |Service Provider Router| +-----------------------+ WAN | | Stub A .............|.... | ^{s=138.76.28.4,sport=1024, | v{s=138.76.29.7, sport = 23, ^ d=138.76.29.7,dport=23} | v d=138.76.28.4, dport = 1024} +------------------+ |Stub Router w/NAPT| +------------------+ | | LAN -------------------------------------------- | ^{s=10.0.0.10,sport=3017, | v{s=138.76.29.7, sport=23, | ^ d=138.76.29.7,dport=23} | v d=10.0.0.10, dport=3017} | | +--+ +--+ +--+ |--| |--| |--| /____\ /____\ /____\ 10.0.0.1 10.0.0.2 ..... 10.0.0.10 Figure 3: Network Address Port Translation (NAPT) Operation
當 stub A 主機 10.0.0.10 向主機 138.76.29.7 發送 telnet 數據包時,它使用全域唯一地址 138.76.29.7 作為目標,並將數據包發送到它的主路由器。存根路由器具有子網 138.76.0.0/16 的靜態路由,因此數據包被轉發到 WAN 鏈路。但是,在轉發數據包之前,NAPT 會將 IP 和 TCP 標頭中的源地址 10.0.0.10 和源 TCP 埠 3017 的元組轉換為全域唯一的 138.76.28.4 和唯一分配的 TCP 埠,例如 1024。返迴路徑上的數據包通過目標 IP 地址和目標 TCP 埠的類似地址和 TCP 埠轉換。再次注意,這不需要更改主機或路由器。翻譯是完全透明的。
在此設置中,僅允許 TCP/UDP 會話並且必須源自本地網路。但是,有些服務(例如 DNS)需要入站訪問。可能存在組織希望允許入站會話訪問的其他服務。可以靜態配置一個眾所周知的 TU 埠服務
$$ RFC 1700 $$在存根路由器上被定向到專用網路中的特定節點。 除了 TCP/UDP 會話之外,ICMP 消息(REDIRECT 消息類型除外)也可能被 NAPT 路由器監控。ICMP查詢類型報文的翻譯與TCP/UDP報文類似,ICMP報文頭中的標識符欄位將唯一映射到註冊IP地址的查詢標識符。ICMP 查詢消息中的標識符欄位由查詢發送者設置,並在來自查詢響應者的響應消息中原封不動地返回。因此,(本地 IP 地址,本地 ICMP 查詢標識符)的元組被 NAPT 路由器映射到(註冊的 IP 地址,分配的 ICMP 查詢標識符)的元組,以唯一標識來自任何本地主機的所有類型的 ICMP 查詢。對 ICMP 錯誤消息的修改將在後面的部分中討論,
在 NAPT 設置中,註冊的 IP 地址與存根路由器 WAN 介面的 IP 地址相同,路由器必須確保區分源自自身的 TCP、UDP 或 ICMP 查詢會話與源自上節點的會話本地網路。假設所有入站會話(包括 TCP、UDP 和 ICMP 查詢會話)都定向到作為端節點的 NAT 路由器,除非目標服務埠靜態映射到本地網路中的不同節點。
TCP、UDP 和 ICMP 查詢類型以外的會話根本不允許來自本地節點,由 NAPT 路由器提供服務。