天天看點

SNAT與DNAT

SNAT與DNAT

SNAT是轉換源位址,是在postrouting鍊上,相當于是你在一個區域網路内,你的ip是192.168.200.10主機A,你需要通路公網主機B,ip是172.168.89.105,如果不改變你的源位址,走路由将主機A的資料發送給B,接收到A的請求傳回資料給A,但是B無法看到私網的IP,是以B隻能找上一級路由,為了實作資料包的正确發送及傳回,網關必須将A的址轉換為一個合法的公網位址,同時為了以後B主機能将資料包發送給A,這個合法的公網位址必須是網關的外網位址,如果是其它公網位址的話,B會把資料包發送到其它網關,而不是A主機所在的網關,A将收不到B發過來的資料包,是以内網主機要上公網就必須要有合法的公網位址,而得到這個位址的方法就是讓網關進行SNAT(源位址轉換),将内網位址轉換成公網址(一般是網關的外部位址),是以大家經常會看到為了讓内網使用者上公網,我們必須在routeros的firewall中設定snat,俗稱IP位址欺騙或僞裝(masquerade)

内部位址要通路公網上的服務時(如web通路),内部位址會主動發起連接配接,由路由器或者防火牆上的網關對内部位址做個位址轉換,将内部位址的私有IP轉換為公網的公有IP,網關的這個位址轉換稱為SNAT,主要用于内部共享IP通路外部。

DNAT是轉換目的位址:當内部需要提供對外服務時(如對外釋出web網站),外部位址發起主動連接配接,由路由器或者防火牆上的網關接收這個連接配接,然後将連接配接轉換到内部,此過程是由帶有公網IP的網關替代内部服務來接收外部的連接配接,然後在内部做位址轉換,此轉換稱為DNAT,主要用于内部服務對外釋出。

在執行 SNAT 任務時的行為規則就添加在 POSTROUTING 鍊中

在執行DNAT任務時的行為規則是在PREROUTING鍊中

POSTROUTING鍊

我們最後的任務應該是構造網絡位址轉換,對吧?至少對我來說是的。我們在nat表的POSTROUTING裡隻加入了一條規則,它會對所有從Internet接口(對我來說,這是eth0)發出的包進行NAT操作。在所有的例子腳本裡,都有一些變量,它們要給以正确的配置。選項-t指定要在哪個表裡插入規則,這裡是nat表。指令-A說明我們要把規則添加到POSTROUTING鍊末尾。-o$INET_IFACE指定要比對所有從接口INET_IFACE出去的包,這裡我們使用的是eth0。最後,我們把target設定為SNAT。這樣,所有比對此規則的包都會由SNAT target處理之後,它們的源位址就是Internet接口的位址了。不要忘了SNAT可是一定要有IP位址的,用–to-source來設定哦。

PREROUTING鍊

顧名思義,PREROUTING鍊(nat表的)是在路由之前做網絡位址轉換工作的。然後,包再經過路由,就會被送到filter表的INPUT或FORWARD鍊。我們在這裡讨論這個鍊的唯一原因是,我們覺得有責任再次指出你不應該在此鍊中做任何過濾。PREROUTING鍊隻會比對流的第一個包,也就是說,這個流的所有其他包都不會被此鍊檢查。事實上,在這個腳本中,我們根本沒有用到PREROUTING鍊。如果你想對一些包做DNAT操作,例如,你把web service放在了區域網路内,這裡就是你放置規則的地方,有關PREROUTING鍊的詳細資訊在章節表和鍊中。

iptables -L指令還可以檢視nat表和mangle表的内容哦

iptables -L -t nat

cat /proc/net/ip_conntrack | less

iptables -F -t nat (清除NAT表)

iptables --list 檢視過濾表

新的規則存盤

./iptables save

在/proc/net/ip_conntrack檔案裡也有包的流向

繼續閱讀