iptables實現SNAT及DNAT


實現SNAT

此實驗內網服務器訪問外網服務器的80端口,因為內網與外網不在同一個網段,所以內網服務器網關需要指向防火牆內網IP,防火牆公網IP與外網服務器在同一個網段,他們兩個之間是直連,所以外網服務器不需要配置網關;

防火牆配置iptables規則

情景一:源地址轉換為防火牆固定公網IP
地址轉換的規則需要添加在nat表

1、iptables -A FORWARD -j REJECT   
#添加此規則,拒絕內網訪問外網,外網訪問內網
2、iptables -I FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT #允許已經建立連接的報文通過防火牆 3、iptables -I FORWARD 2 -p tcp --dport 80 -j ACCEPT #允許內網服務器訪問公網服務器80端口的報文通過防火牆 4、iptables -t nat -A POSTROUTING -s 192.168.39.0/24 -j SNAT --to-source 192.168.1.101 #源地址轉換的規則需要添加在nat表的postrouting鏈上,指定內網192.168.39.0/24網段的地址訪問公網IP,把源地址轉換為192.168.1.101防火牆公網IP地址,指定目標為SNAT;不管是局域網內服務器報文出去,還是防火牆本機報文出去,都需要匯總到postrouting鏈才可以把報文發送出去
情景二:家庭撥號上網,每次撥號上網的IP地址都不同
1、iptables -t nat -A POSTROUTING -s 192.168.39.0/24 -j MASQUERADE
#通過MASQUERADE動作,把與互聯網相連的撥號網絡的公有IP地址偽裝出去,即把每次撥號獲取到的公網IP都一直偽裝成一個撥號獲取到的IP

實現DNAT

公網IP訪問防火牆公網IP的80端口時,防火牆進行目標地址轉換,把訪問防火牆公網IP地址的請求轉換成內網IP地址;

1、iptables -A FORWARD -j REJECT   
#添加此規則,拒絕內網訪問外網,外網訪問內網
2、iptables -I FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT #允許已經建立連接的報文通過防火牆 3、iptables -I FORWARD 2 -p tcp --dport 8080 -j ACCEPT #防火牆可以做端口映射,把訪問防火牆公網IP80端口的請求轉換成內網IP的8080端口,防火牆需要允許轉發8080端口的請求 4、iptables -t nat -A PREROUTING -d 192.168.1.101 -p tcp --dport 80 -j DNAT --to-destination 192.168.39.100:8080 #在防火牆的nat表的prerouting鏈上添加規則,當訪問防火牆公網IP的192.168.1.101:80端口時,把目標地址做轉換,轉換成內網地址192.168.39.100:8080端口,防火牆可以做端口映射;此規則必須添加在prerouting鏈,客戶端訪問的是防火牆本機的公網IP,如果不添加在prerouting,則報文經過路由表檢查,發現是發給本機的,報文會通過input鏈到應用程序,但是本機並沒有監聽80端口的應用,會造成訪問拒絕,所以規則需要添加在prerouting鏈上

擴展:端口重定向

端口重定向規則只能用於重定向本機的不同端口,不能跨主機重定向端口;

1、iptables -t nat -A PREROUTING -d 192.168.39.100 -p tcp --dport 80 -j REDIRECT --to-ports 8080
#此規則也需要添加在nat表的prerouting鏈,本機並沒有監聽80端口的應用,所以需要設置在prerouting鏈;把訪問本機192.168.39.100的80端口的請求重定向到本機的8080端口(會在內核中進行端口轉換)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM