iptables snat 和dnat說明


iptables中的snat和dnat是非常有用的,感覺他們二個比較特別,所以單獨拿出來說一下.

dnat是用來做目的網絡地址轉換的,就是重寫包的目的IP地址。如果一個包被匹配了,那么和它屬於同一個流的所有的包都會被自動轉換,然后就可以被路由到正確的主機或網絡。比如,你的Web服務器在LAN內部,而且沒有可在Internet上使用的真實IP地址,那就可以使用這個dnat讓防火牆把所有到它自己HTTP端口的包轉發給LAN內部真正的Web服務器。目的地址也可以是一個范圍,這樣的話,DNAT會為每次請求隨機分配一個機器,這樣我們可以用這個dnat做負載平衡。


[root@linux ~]# 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功能更強大.

[root@linux ~]# 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這台機器上.

snat可以讓本地ip地址偽裝成其他機器的ip地址,或者是公網IP,
假如我有三台機器,一台能上外網,另外二台卻不可以.不能上網的機器可以偽裝成可上網的那機器的IP

[root@linux ~]# 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這台機器是可以上網的.

 

 

 

 

DNAT(Destination Network Address Translation,目的地址轉換) 通常被叫做目的映謝。而SNAT(Source Network Address Translation,源地址轉換)通常被叫做源映謝。

這是我們在設置Linux網關或者防火牆時經常要用來的兩種方式。以前對這兩個都解釋得不太清楚,現在我在這里解釋一下。

首先,我們要了解一下IP包的結構,如下圖所示:

在任何一個IP數據包中,都會有Source IP Address與Destination IP Address這兩個字段,數據包所經過的路由器也是根據這兩個字段是判定數據包是由什么地方發過來的,它要將數據包發到什么地方去。而iptables的DNAT與SNAT就是根據這個原理,對Source IP Address與Destination IP Address進行修改。

然后,我們再看看數據包在iptables中要經過的鏈(chain):

 

圖中正菱形的區域是對數據包進行判定轉發的地方。在這里,系統會根據IP數據包中的destination ip address中的IP地址對數據包進行分發。如果destination ip adress是本機地址,數據將會被轉交給INPUT鏈。如果不是本機地址,則交給FORWARD鏈檢測。
這也就是說,我們要做的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
這個轉換過程當中,其實就是將已經達到這台Linux網關(防火牆)上的數據包上的destination ip address從202.103.96.112修改為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
這個語句就是告訴系統把即將要流出本機的數據的source ip address修改成為58.20.51.66。這樣,數據包在達到目的機器以后,目的機器會將包返回到58.20.51.66也就是本機。如果不做這個操作,那么你的數據包在傳遞的過程中,reply的包肯定會丟失。
---------------------
作者:tycoon1988
來源:CSDN
原文:https://blog.csdn.net/tycoon1988/article/details/38373313
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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