iptables NAT規則


nat表需要的三個鏈:

  1.PREROUTING:可以在這里定義進行目的NAT的規則,因為路由器進行路由時只檢查數據包的目的ip地址,所以為了使數據包得以正確路由,我們必須在路由之前就進行目的NAT;
  2.POSTROUTING:可以在這里定義進行源NAT的規則,系統在決定了數據包的路由以后在執行該鏈中的規則。
  3.OUTPUT:定義對本地產生的數據包的目的NAT規則。

需要用到的幾個動作選項:(真實環境中用大寫)

 redirect  將數據包重定向到另一台主機的某個端口,通常用實現透明代理和對外開放內網某些服務。
snat 源地址轉換,改變數據包的源地址
dnat 目的地址轉換,改變數據包的目的地址
masquerade IP偽裝,只適用於ADSL等動態撥號上網的IP偽裝,如果主機IP是靜態分配的,就用snat

PRERROUTING:DNAT 、REDIRECT   (路由之前)只支持-i,不支持-o。在作出路由之前,對目的地址進行修改

 POSTROUTING:SNAT、MASQUERADE (路由之后)只支持-o,不支持-i。在作出路由之后,對源地址進行修改

 OUTPUT:DNAT 、REDIRECT   (本機)DNAT和REDIRECT規則用來處理來自NAT主機本身生成的出站數據包.

一、打開內核的路由功能。

   要實現nat,要將文件/proc/sys/net/ipv4/ip_forward內的值改為1,(默認是0)。

 

二、nat不同動作的配置

 1)MASQUERADE:是動態分配ip時用的IP偽裝:在nat表的POSTROUTING鏈加入一條規則:所有從ppp0口送出的包會被偽裝(MASQUERADE)

 [root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

要想系統啟動時自動實現nat,在/etc/rc.d/rc.local文件的末尾添加

   [root@localhost]# echo "1">/proc/sys/net/ipv4/ip_forward

   [root@localhost]# /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

 2) SNAT:一般正常共享上網都用的這個。

 所有從eth0(外網卡)出來的數據包的源地址改成61.99.28.1(這里指定了一個網段,一般可以不指定)

 [root@localhost]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 61.99.28.1

3)DNAT:目的nat 做智能DNS時會用到

 智能DNS:就是客戶端在dns項里無論輸入任何ip,都會給他定向到服務器指定的一個dnsip上去。

 在路由之前所有從eth0(內網卡)進入的目的端口為53的數據包,都發送到1.2.3.4這台服務器解析。

 [root@localhost]# iptables -t nat -I PREROUTING -i eth0 -p udp --dport 53 -j DNAT --to-destination 1.2.3.4:53

 [root@localhost]# iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 53 -j DNAT --to-destination 1.2.3.4:53

4)REDIRECT:重定向,這個在squid透明代理時肯定要用到它

 所有從eth1進入的請求80和82端口的數據,被轉發到80端口,由squid處理。

 [root@localhost]# iptables -t nat -A PREROUTING - -i eth1 -p tcp -m multiport --dports 80,82 -j REDIRECT --to-ports 80


免責聲明!

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



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