NAT服務器的設定
NAT的全名:Network Address Translation;即網絡地址的轉換;
iptables指令就能夠修改IP封包的表頭數據,IP的目標地址,源地址都可以修改。
甚至連TCP封包表頭的port number 也能修改過。
簡單理解,稱他為內部LAN主機的[
IP分享器]。
來源 NAT,SNAT:
修改封包表頭的
來源項目:


如上圖所示,在客戶端 192.168.1.100 這部主機要聯機到http://tw.yahoo.com 去時,他的封包表頭會如何變化?
- 客戶端所發出的封包表頭中,來源會是 192.168.1.100 ,然后傳送到 NAT 這部主機;
- NAT 這部主機的內部接口 (192.168.1.2) 接收到這個封包后,會主動分析表頭數據, 因為表頭數據顯示目的並非 Linux 本機,所以開始經過路由, 將此封包轉到可以連接到 Internet 的 Public IP 處;
- 由於 private IP 與 public IP 不能互通,所以 Linux 主機透過iptables 的 NAT table 內的 Postrouting 鏈將封包表頭的來源偽裝成為 Linux 的 Public IP ,並且將兩個不同來源 (192.168.1.100 及public IP) 的封包對應寫入暫存內存當中, 然后將此封包傳送出去了;
此時 Internet 上面看到這個封包時,都只會知道這個封包來自那個 Public IP而不知道其實是來自內部啦。
簡單來講就是:
內部ip,修改成外部ip;然后再傳送出去;
internet回傳:


- 在 Internet 上面的主機接到這個封包時,會將響應數據傳送給那個Public IP 的主機;
- 當 Linux NAT 服務器收到來自 Internet 的回應封包后,會分析該封包的序號,並比對剛剛記錄到內存當中的數據, 由於發現該封包為后端主機之前傳送出去的,因此在 NAT Prerouting 鏈中,會將目標 IP 修改成為后端主機,亦即那部 192.168.1.100,然后發現目標已經不是本機(public IP), 所以開始透過路由分析封包流向;
- 封包會傳送到 192.168.1.2 這個內部接口,然后再傳送到最終目標192.168.1.100 機器上去!
經過這個流程,你就可以發現到,所有內部 LAN 的主機都可以透過這部 NAT 服務器聯機出去, 而大家在 Internet 上面看到的都是同一個 IP (就是 NAT 那部主機的 public IP 啦!), 所以,如果內部 LAN 主機沒有連上不明網站的話,那么內部主機其實是具有一定程度的安全性的啦! 因為 Internet 上的其他主機沒有辦法主動攻擊你的 LAN 內的 PC 嘛!所以我們才會說, NAT 最簡單的功能就是類似 IP 分享器啦!那也是 SNAT 的一種。
NAT 服務器與路由器有啥不同?
基本上,NAT 服務器一定是路由器,
不過, NAT 服務器由於會修改 IP 表頭數據, 因此與單純轉遞封包的路由器不同。
最常見的 IP 分享器就是一個路由器,但是這個IP 分享器一定會有一個 Public IP 與一個 Private IP,讓 LAN 內的 Private IP 可以透過 IP 分享器的 Public IP 傳送出去喔! 至於路由器通常兩邊都是 Public IP 或同時為 Private IP。
簡單來講:
- NAT服務器一定是路由器,而路由器不一定是NAT服務器;
- NAT服務器端口兩邊分別是public ip 和 private IP,路由器兩邊通常兩邊都是public ip 或者兩邊都是 private ip;
目標 NAT,DNAT
修改封包表頭的目標項目
SNAT 主要是應付內部 LAN 連接到 Internet 的使用方式,至於 DNAT 則主要用在內部主機想要架設可以讓 Internet 存取的服務器啦

如上圖所示,假設我的內部主機 192.168.1.210 啟動了 WWW 服務,這個服務的port 開啟在 port 80 , 那么 Internet 上面的主機 (61.xx.xx.xx) 要如何連接到我的內部服務器呢?當然啦, 還是得要透過 Linux NAT 服務器嘛!所以這部 Internet 上面的機器必須要連接到我們的 NAT 的 public IP 才行。
- 外部主機想要連接到目的端的 WWW 服務,則必須要連接到我們的 NAT 服務器上頭;
- 我們的 NAT 服務器已經設定好要分析出 port 80 的封包,所以當 NAT 服務器接到這個封包后, 會將目標 IP 由 public IP 改成 192.168.1.210 ,且將該封包相關信息記錄下來,等待內部服務器的響應;
- 上述的封包在經過路由后,來到 private 接口處,然后透過內部的 LAN 傳送到 192.168.1.210 上頭!
- 192.186.1.210 會響應數據給 61.xx.xx.xx ,這個回應當然會傳送到192.168.1.2 上頭去;
- 經過路由判斷后,來到 NAT Postrouting 的鏈,然后透過剛剛第二步驟的記錄,將來源 IP 由 192.168.1.210 改為 public IP后,就可以傳送出去了。