iptables snat 和dnat說明
1.dnat是用來做目的網絡位址轉換的,就是重寫包的目的IP位址。比如,你的Web伺服器在LAN内部,而且沒有可在Internet上使用的真實IP位址,那就可以使用這個dnat讓防火牆把所有到它自己HTTP端口的包轉發給LAN内部真正的Web伺服器。目的位址也可以是一個範圍,這樣的話,DNAT會為每次請求随機配置設定一個機器,這樣我們可以用這個dnat做負載平衡。
[[email protected] ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp\
--dst 122.225.97.111 --dport 80 -j DNAT --to-destination 192.168.1.130:80
上面的例子是把所有通過eth0這個網卡發往位址122.225.97.111的包都轉發到區域網路的中192.168.1.130這台機器上.它也可以配全--string功能更強大.
[[email protected] ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80\
-m string --string "img.51yip.com" --algo bm -j DNAT --to-destination 192.168.1.136:80
将比對到img.51yip.com的請求轉到區域網路的192.168.1.136這台機器上.
2.snat就是把源位址轉換成(僞裝成)其他位址,可以讓本地ip位址僞裝成其他機器的ip位址,或者是公網IP,
假如我有三台機器,一台能上外網,另外二台卻不可以.不能上網的機器可以僞裝成可上網的那機器的IP
[[email protected] ~]# iptables -t nat -I POSTROUTING 1 -j SNAT -s 192.168.10.0/24 --to-destination 192.168.1.108
192.168.10.0/24這個IP段是不可以上網的,108這台機器是可以上網的.
3.然後,我們再看看資料包在iptables中要經過的鍊(chain):
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iYmNjNiVGZlRjM5gTZzQ2YyMDNkRjMxUWNkJWN4UTMh9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
我們要做的DNAT是在PREROUTING鍊中做,比如我們要把通路202.103.96.112的通路轉發到192.168.0.112上:
iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112
而SNAT自然是要在資料包流出這台機器之前的最後一個鍊也就是POSTROUTING鍊來進行操作
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 58.20.51.66
這個語句就是告訴系統把即将要流出本機的資料的源位址修改成為58.20.51.66。這樣,資料包在達到目的機器以後,目的機器會将包傳回到58.20.51.66也就是本機。如果不做這個操作,那麼你的資料包在傳遞的過程中,reply的包肯定會丢失。