NAT (網絡地址轉換) 技術在平時是很多見的,如家庭中在使用路由器共享上網時,一般用的就是 NAT 技術,它可以實現衆多內網 IP 共享一個公網 IP 上網。NAT 的原理 簡單的說就是當內網主機訪問外網時,當內網主機的數據包要通過路由器時,路由器將數據包中的源內網 IP 地址改爲路由器上的公網 IP 地址,同時記錄下該數據包的消息;當外網服務器響應這次由內而外發出的請求或數據交換時,當外網服務器發出的數據包經過路由器時,原本是路由器上的公網
IP 地址被路由器改爲內網 IP 。工作原理如下圖所示:
SNAT 和
DNAT 是 iptables 中使用 NAT 規則相關的的兩個重要概念。如上圖所示,如果內網主機訪問外網而經過路由時,源 IP 會發生改變,這種變更行爲就是 SNAT;反之,當外網的數據經過路由發往內網主機時,數據包中的目的 IP (路由器上的公網 IP) 將修改爲內網 IP,這種變更行爲就是 DNAT 。
與
SNAT 和
DNAT所對應的兩個鏈分別是
POSTROUTING和
PREROUTING 。
說明:(個人理解)prerouting 和postrouting指的是數據包的流向,如上圖所示postrouting一般指的是發往公網的數據包;prerouting一般指來自公網的數據包!
通常內網到外網是pre,外網到內網是post,但是外還是內只是個相對概念,在一定條件下是可以轉換的。落實到網卡上,對於每個網卡數據流入的時候必然經過pre,數量流出必然經過post
POSTROUTING是源地址轉換,要把你的內網地址轉換成公網地址才能讓你上網。
PREROUTING是目的地址轉換,要把別人的公網IP換成你們內部的IP,才讓訪問到你們內部受防火牆保護的機器
PREROUTING
當外網的數據包進入到內網時,我們需要修改數據包中的公網 IP 爲內網的主機 IP,這種 DNAT
的行爲規則就要在 PREROUTING 鏈裏添加。
POSTROUTING
和 PREROUTING 不同,在執行 SNAT
任務時的行爲規則就添加在 POSTROUTING 鏈中。