NAT(Network Address Translation網絡地址翻譯)將內部網絡私有地址翻譯成Internet上合法的IP地址。NAT可以節省IP地址資源(主要節省IPv4地址)。還可以將內部網絡的IP地址隱藏起來不被外界發現,有效地確保內部網絡的安全(但網絡內主機比較多時,安全性方面更推薦防火牆,因爲用NAT路由佔用的CPU資源比較多)。還可以爲內部網絡提供一致性的編址方案。
NAT術語:
內部本地Inside Local:私有IP,不能直接用於互聯網,如10.0.0.1
內部全局Inside Global:經由NAT路由器將內部本地IP地址轉換成互聯網上的合法地址,如172.2.2.2
外部全局Outside Global:外部網絡中的主機的IP地址,通常來自全局可路由的地址空間,如22.2.2.2。多數情況下該地址與外部全局地址相同。
外部本地Outside Local:內部網絡中看到Internet上外部主機的IP,如22.2.2.2
NAT路由器一邊連接內網,一邊連接外網的話,兩邊就分別是Inside/Outside。Inside這邊的是local地址。Outside這邊的是Global地址。從Inside進來到Outside出去,是先路由再做NAT轉換。從Outside進來到Inside出去,是先做NAT轉換再路由。
NAT類型:
靜態NAT:手動建立內部IP到外部IP的映射。例如企業內部設備(如企業內部E-mail服務器或FTP服務器等)需要被外部訪問時
動態NAT:將一個內部IP轉成一組外部IP池中的一個IP地址。當PC有一個向外的連接請求時,從地址池中取出一個IP,當連接斷開時將IP重新放回池中。但外部用戶不能訪問內部特定地址。例如企業內部共用多個公網IP供員工訪問外網
超載NAT:動態NAT的一種特殊形式,也稱爲PAT,NAPT,或端口複用NAT。用不同端口號將多個內部IP轉成一個外部IP。例如整個企業共用一個公網IP時。局域網共享上網。超載NAT對於節省IP地址是最爲有效的。
(可以這樣理解映射關係:靜態1對1,動態多對多,超載多對1)
配置靜態NAT:
PC要去訪問外部Server。配置一條靜態NAT,使得PC訪問外網時,PC的IP地址(3.3.3.1)不直接暴露給外網,而是經由NAT轉換成12.1.1.1去訪問外網。同樣外網想訪問PC時,外網只知道12.1.1.1這個IP地址,經NAT轉換成內網PC的IP地址後,才能訪問PC。
配置好靜態NAT的1對1映射關係後,查看NAT映射表項:
NAT路由器上打開debug,讓PC去ping 2.2.2.2 source 3.3.3.1,觀察NAT轉換過程:
反過來,外部Server去ping 12.1.1.1 source 2.2.2.2訪問PC,NAT轉換過程是上面的逆過程:
配置動態NAT:
拓撲圖上就一臺PC,假設有多臺PC連接NAT路由器訪問外網,可以在NAT路由器上配一個地址池,範圍是12.1.1.16-12.1.1.31。Inside端多臺PC訪問外網時,由NAT路由器從地址池中分配一個IP供PC使用:
假設有4臺PC分別去訪問外網:ping 2.2.2.2 source 3.3.0.1 / 3.3.1.1 / 3.3.2.1 / 3.3.3.1。打開NAT路由器的debug,觀察地址分配及地址轉換過程:
可以看到不同的PC(不同的源IP地址)被從地址池中分配了不同的公網IP地址。查看動態NAT的轉換列表:
被動態分配的外網IP地址是有timeout時間的,超時地址將回到地址池。
最後,如果動態NAT地址池中沒有足夠的地址,會出現提示NAT轉換失敗,並丟棄數據包。
配置超載NAT / PAT / NAPT / 端口複用NAT:
是一種特殊的動態NAT,地址池中只有一個地址,靠端口號來區分源地址:
假設有2臺PC分別去訪問外網:ping 2.2.2.2 source 3.3.0.1 / 3.3.1.1。打開NAT路由器的debug,觀察地址分配及地址轉換過程:
發現2臺PC的IP地址都被轉換成同一個外網IP地址12.1.1.16。查看NAT表項,發現轉換的地址都一樣的,但端口號不同: