# NAT網路位址轉換 (Network Address Translation) NAT是用來解決IPv4位址不足的一個方法,**當IP封包通過路由器或防火牆時,建立一個Private IP與Public IP的對應表格(NAT table),並且重寫封包內的傳送端 IP 位址與接收端 IP 位址。** 這種技術被普遍使用在有多台主機但只通過一個公有IP位址訪問網際網路的私有網路中。 ### NAT 伺服器運作方式: ![](https://i.imgur.com/MIo2lwH.jpg) 圖(a)傳送封包:假設私有網路(內部網路)的電腦 A 要傳送封包到網際網路(外部網路),所以**將封包表頭內的傳送端 IP 位址設定為 192.168.1.1**。 圖(b)轉送封包:**NAT 伺服器將封包表頭的傳送端 IP 位址改成 140.112.66.88 再傳送到網際網路(外部網路),並且記錄這個封包來自電腦 A**。 圖(c)接收封包:**網際網路(外部網路)要傳送封包到電腦 A,但是封包表頭的接收端 IP 位址設定為 140.112.66.88**,因此先由 NAT 伺服器接收進來。 圖(d)轉送封包:**NAT 伺服器將封包表頭的接收端 IP 位址改成 192.168.1.1 再傳送到私有網路(內部網路)的電腦 A**。 ------------------------ ### NAT 伺服器功能 **封包偽裝(IP masquerade):** 可以私有 IP(內部IP)改成真實 IP(外部 IP)再傳送到網際網路,使網路上的人無法得知私有網路的 IP 分配情形增加網路安全性。 **封包過濾:** 攔截網際網路進入私有網路的封包阻擋攻擊,NAT伺服器是防火牆成員,也是一種「封包過濾器(Packet filter)」。 **平衡負載:** 通常使用在網頁伺服器(Web server),一般網頁伺服器同時可能會有數千人連線,如果只用一台主機負荷會過重,因此在入口處加裝一台 NAT 伺服器,改變外部網路進入內部網路的封包表頭接收端 IP 位址,讓進入的封包分散到不同的主機上,減輕單一主機的負擔,也可以增加網路安全性。 ![](https://i.imgur.com/8KjeVEJ.jpg) ------------------------ ### NAT 封包修改方式(Linux): **來源 NAT (Source NAT, SNAT) :** 修改封包表頭的『來源』項目,透過 NAT 表格的 POSTROUTING 來處理。 **SNAT 送出封包:** ![](https://i.imgur.com/8P3KfNW.png) 1.用戶端所發出的封包表頭來源是 192.168.1.100,傳送到 NAT 這部主機; 2.NAT主機的內部介面 (192.168.1.2) 接收到封包後主動分析表頭資料,因為表頭資料顯示目的並非本機,所以經過路由將此封包轉到可以連接到 Internet 的 Public IP 處; 3.由於 private IP 與 public IP 不互通,所以主機透過 iptables 的 NAT table 內的 Postrouting 鏈將封包表頭的來源偽裝成為 Linux 的 Public IP ,並且將兩個不同來源 (192.168.1.100 及 public IP) 的封包對應寫入暫存記憶體當中, 然後將此封包傳送出去; **Internet 回傳封包:** ![](https://i.imgur.com/gpqfbza.png) 4.在 Internet 上的主機接到封包時,會將回應資料傳送給 Public IP 的主機; 5.當 NAT 伺服器收到來自 Internet 的回應封包後,會分析該封包的序號,並比對剛剛記錄到記憶體當中的資料,發現該封包為後端主機之前傳送出去的,因此在 NAT Prerouting 鏈中,會將目標 IP 修改成為後端主機(192.168.1.100),然後發現目標已經不是本機 (public IP),所以透過路由分析封包流向; 6.封包會傳送到 192.168.1.2 這個內部介面,然後再傳送到最終目標 192.168.1.100 機器上。 **目標 NAT (Destination NAT, DNAT)** DNAT 主要用在內部主機架設讓 Internet 可存取的伺服器。 假設內部主機 192.168.1.210 啟動了 WWW 服務,這個服務的 port 開在 port 80 , 那 Internet 上面的主機 (61.xx.xx.xx) 需透過 NAT 伺服器才能與WWW服務連線,所以 Internet 上面的機器必須要連接到我們的 NAT 的 public IP 才行。 ![](https://i.imgur.com/RRrfKid.png) 1.外部主機想要連接到目的端的 WWW 服務,必須要連接到我們的 NAT 伺服器上; 2.NAT 伺服器已經設定好要分析出 port 80 的封包,所以當 NAT 伺服器接到這個封包後, 會將目標 IP 由 public IP 改成 192.168.1.210 ,且將該封包相關資訊記錄下來,等待內部伺服器的回應; 3.上述的封包在經過路由後,來到 private 介面處,然後透過內部的 LAN 傳送到 192.168.1.210 上 4.192.186.1.210 會回應資料給 61.xx.xx.xx ,這個會傳送到 192.168.1.2 上頭去; 5.經過路由判斷後,來到 NAT Postrouting 的鏈,然後透過剛剛第二步驟的記錄,將來源 IP 由 192.168.1.210 改為 public IP 後,就可以傳送出去。 ------------------------ ### NAT 三種類型: **1.靜態NAT :** 私有IP與公有IP進行一對一轉換,需要手動設定,通常用於SERVER服務,因SERVER需使用固定IP來提通服務,如FTP。 ![](https://i.imgur.com/e8wTW50.png) **2.動態NAT :** 與靜態NAT相同需一對一轉換,私有IP隨機配對公有IP,不需手動設定。 ![](https://i.imgur.com/MpT0DZb.png) **3.超載NAT(Overloading)或稱PAT(Port Address Translation) :** 多個私有IP對應一個公有IP+port number,常見的NAT類型,當多私有IP配對到一個公有IP時,公有IP會各產生一組port number。 ![](https://i.imgur.com/w5jCHy1.png) ------------------------------- ### 公有IP(Public address) & 私有IP(Private address) **公有IP(Public address):** 由網際網路服務供應商(ISP)分配,使用者向ISP申請網路後會給一組IP,若沒額外申請固定IP會是以浮動IP來發送,變更週期(大約3天左右)或重開機會重新配發一組IP,由最近的ISP網路伺服器配發。 A class公有IP: 1.0.0.0~9.255.255.255 11.0.0.0~126.255.255.255 B class公有IP: 128.0.0.0~172.15.255.255 172.32.0.0~191.255.255.255 C class公有IP: 192.0.0.0~192.168.255.255 192.169.0.0~223.255.255.255 **私有IP(Private address):** 依照RFC1918(IPv4)規範,定義出私人可使用的範圍IP,主要用於區域網路(LAN),由Router或Switch配發,可使用DHCP(Dynamic Host Configuration Protocol)或固定IP管理,外部網際網路無法直接連線,如果要上網必須使用網路位址轉換(NAT)讓私有IP轉換成公有IP。 私有IP地址範圍: A: 10.0.0.0~10.255.255.255 即10.0.0.0/8 B: 172.16.0.0~172.31.255.255 即172.16.0.0/12 C: 192.168.0.0~192.168.255.255 即192.168.0.0/16