圖(1)
一、SNAT策略
應用環境:局域網主機共享單個公網IP地址接入Internet,簡單的說就是企業內部局域網想訪問外部服務器時,網關型防火牆需要開啟的SNAT應用策略。
SNAT策略原理:網關型防火牆把源地址轉換,修改數據包的源地址。
*未作SNAT轉換時內網數據包通信的分析:
圖(2)中局域網以192.168.1.234的IP訪問Web服務,發送數據包時,網絡層會封裝源地址和目標地址,當Web服務器進行HTTP應答時,找不到192.168.1.234的IP地址(私網地址不允許出現在公網),所以通訊中斷。
圖 (2)
*進行SNAT轉換后的數據包通信分析:
圖(3)中網關服務器應用了SNAT策略,當局域網訪問外網的數據到達網關,會先進行路由選擇,若發現數據包需要從外網接口eht0向外轉發,則將其源IP地址修改為網關的外網接口地址218.29.30.31,然后再發送給目標Web服務器,相當於從網關服務器的公網IP地址提交數據訪問請求,因為是公網IP,當Web服務器進行HTTP應答時,也可以正確返回響應數據包。
圖 (3)
*在上述地址轉換的過程中,網關服務器會根據之前建立的SNAT映射,將響應數據包正確返回局域網中的源主機,因此,只要連接的第一個包被SNAT處理了,那么這個連接及對應數據流的其他包也會自動地進行SNAT處理,另一方面,Internet中的服務器並不知道局域網PC的實際IP地址,中間的轉換完全由網關主機完成,一定程度上也起到了保護內部網絡的作用。
二、設置SNAT規則
前提條件:
局域網各主機正確設置IP地址和子網掩碼
局域網各主機正確設置默認網關地址
Linux網關支持IP路由轉發,即/etc/sysctl.conf文件中的net.ipv4.ip_forword = 1
(1)SNAT轉換規則1:固定的外網IP地址
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31
(2)SNAT轉換規則2:非固定外網IP地址或ADSL
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
三、DNAT策略
應用環境:在Internet中發布位於企業局域網內的服務器
DNAT策略原理:目標地址轉換,修改數據包的目標地址
注意:企業所注冊的網站域名必須對應公網IP地址
*進行DNAT轉換后的數據包通信分析:
圖(4)中,外網請求內網服務器時,目的地址是我們的公網IP 218.29.30.31,網關服務器發現你請求的是80端口,就把你的目的地址(我們的公網IP 218.29.30.31)修改為端口號為80端口的Web服務器192.168.1.6;當我們發送應答包的時候就用到了SNAT策略,這樣一去一回,就構成了我們完整的通信過程。
圖 (4)
四、設置DNAT規則
前提條件:
局域網的Web服務器能夠訪問Internet
網關的外網IP地址有正確的DNS解析記錄
Linux網關支持IP路由轉發
(1)DNAT轉換規則1:發內網Web服務
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6
(2)DNAT轉換規則2:發布時修改目標端口
如果我想在外網訪問我們內網服務器的22號端口,連接ssh的話不能直接把 --dport 80改為22,因為網關防火牆本身也有22號端口,我們可以對端口進行轉化,把服務器的22號端口,通過網關防火牆轉化為了250號端口,因此我們訪問250號端口就是訪問了服務器的22號端口。如下語句轉換了IP的同時也轉換了端口。
1 iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 250 -j DNAT --to-destination 192.168.1.6:22 #配置方法 2 ssh 218.29.30.31:250 #訪問方法