nat表須要的三個鏈:服務器
1.PREROUTING:能夠在這裏定義進行目的NAT的規則,由於路由器進行路由時只檢查數據包的目的ip地址,因此爲了使數據包得以正確路由,咱們必須在路由以前就進行目的NAT;
2.POSTROUTING:能夠在這裏定義進行源NAT的規則,系統在決定了數據包的路由之後在執行該鏈中的規則。
3.OUTPUT:定義對本地產生的數據包的目的NAT規則。tcp
須要用到的幾個動做選項:(真實環境中用大寫)ui
redirect | 將數據包重定向到另外一臺主機的某個端口,一般用實現透明代理和對外開放內網某些服務。 | ||||
snat | 源地址轉換,改變數據包的源地址 | ||||
dnat | 目的地址轉換,改變數據包的目的地址 | ||||
masquerade | IP假裝,只適用於ADSL等動態撥號上網的IP假裝,若是主機IP是靜態分配的,就用snat |
PRERROUTING:DNAT 、REDIRECT (路由以前)只支持-i,不支持-o。在做出路由以前,對目的地址進行修改spa
POSTROUTING:SNAT、MASQUERADE (路由以後)只支持-o,不支持-i。在做出路由以後,對源地址進行修改代理
OUTPUT:DNAT 、REDIRECT (本機)DNAT和REDIRECT規則用來處理來自NAT主機自己生成的出站數據包.dns
1、打開內核的路由功能。ip
要實現nat,要將文件/proc/sys/net/ipv4/ip_forward內的值改成1,(默認是0)。路由
2、nat不一樣動做的配置io
1)MASQUERADE:是動態分配ip時用的IP假裝:在nat表的POSTROUTING鏈加入一條規則:全部從ppp0口送出的包會被假裝(MASQUERADE)table
[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