iptables除了最常用的filter表外,偶爾也會用到nat表。nat即網絡地址轉換,它是用來修改源ip地址或目的ip地址的?,F在我們看下簡單的數據包通過iptables到后端主機的表格與鏈的流程。
1.經過NAT表的PREROUTING鏈
2.經過路由判斷該數據包是否要進入本機,若不進入,則執行下一步操作
3.經過Filter的FORWARD鏈
4.經過NAT表的POSTROUTING鏈,最后傳送出去
和NAT相關的是第一步和最后一步,也就是PREROUTING鏈和POSTROUTING鏈。
-
PREROUTING鏈修改的是目的IP,簡稱DNAT
-
POSTROUTING鏈修改的是源IP,簡稱SNAT
DNAT
那么哪些場景需要用到DNAT,對于SNAT常見的應用有哪些呢?對于DNAT,最常見的是將內網的端口映射到外網中,讓其他用戶可以訪問。這樣做內網的安全性大大提升,因為外網是不能直接和內網進行數據傳輸的。
場景:內網有一臺主機A(192.168.1.111)上面架設了一個網站,內網中還有一臺主機B(192.168.1.2)具有公網ip(39.100.92.12),那么如何讓外網的用戶訪問到A上面的網站。
這個時候,就需要對B主機上做DNAT操作,讓目的地址從公網ip39.100.92.12修改為內網地址192.168.1.111。操作如下:
#?iptables?-t?nat?-A?PREROUTING?-i?eth0?-p?tcp?--dport?80? >?-j?DNAT?--to-destination?192.168.1.111:80
PREROUTING鏈中除了能夠對ip做修改,還能對端口進行修改。比如將80端口映射為8080端口,但操作名已經不叫DNAT,而是REDIRECT。
#?iptables?-t?nat?-A?PREROUTING?-i?eth0?-p?tcp?--dport?80? >?-j?REDIRECT?--to-ports?8080
SNAT
對于SNAT,我們最常見的應用是內網機器通過代理服務器上網,內網的主機沒有公網IP,那么內網的主機數據包通過代理服務器后,代理服務器就需要將該數據包的源地址修改為該代理服務器的公網ip。
場景:內網有一臺主機A(192.168.1.111),內網中還有一臺主機B(192.168.1.2)具有公網ip(39.100.92.12),那么對于主機A怎么操作可以連接到公網。
#?iptables?-t?nat?-A?POSTROUTING?-o?eth0?-s?192.168.1.0/24? >?-j?SNAT?--to-source?39.100.92.12
對于DNAT以及SNAT的操作不是很復雜,主要是要理解DNAT以及SNAT的應用場景,剛開始學的時候容易弄混淆,希望大家能主要到它們的區別。
相關推薦:《linux視頻教程》