Linux prerouting和postrouting的區別

Dus發表於2015-02-21
我大概清楚一點就是從內網出去的時候用POSTROUTING進來的時候用PREROUTING,可是做透明代理的時候確是用PREROUTING。這是為什麼呢?
回覆: sunnygg
pre還是post是根據資料包的流向來確定的。

通常內網到外網是post,外望到內網是pre,但是外還是內只是個相對概念,在一定條件下是可以轉換的。落實到網路卡上,對於每個網路卡資料流入的時候必然經過pre,數量流出必然經過post。

透明代理的原理是將內網到外網的網頁訪問請求進行重定向,將內網的請求轉發回內網的代理伺服器,代理服務與閘道器又是一體,如果使用post進行處理,那麼資料就流出了,透明代理設定也就失敗了,因此必須在資料流入的時候改寫規則,才能及時響應處理請求。
回覆:
POSTROUTING是源地址轉換,要把你的內網地址轉換成公網地址才能讓你上網。

PREROUTING是目的地址轉換,要把別人的公網IP換成你們內部的IP,才讓訪問到你們內部受防火牆保護的機器。
回覆:
1,你首先要明白什麼是"PREROUTING" ,什麼是"POSTROUTING",我們可以簡單的用下面的關係來表示:

源地址傳送資料--> {PREROUTING-->路由規則-->POSTROUTING} -->目的地址接收到資料

當你使用:iptables -t nat -A PREROUTING -i eth1 -d 1.2.3.4 -j DNAT --to 192.168.1.40
時,你訪問1.2.3.4,linux路由器會在“路由規則”之前將目的地址改為192.168.1.40,並且Linux路由器(iptables)會同時記錄下這個連線,並在資料從192.168.1.40返回時,經過linux路由器將資料傳送到那臺發出請求的機器。所以你的"POSTROUTING"規則沒有起作用。

而"POSTROUTING"是“路由規則”之後的動作。

2,你最好能有個詳細的網路拓撲圖,這樣我可以更好的給你解釋。

3,我可以具一個簡單的例子說明"PREROUTING"和"POSTROUTING"的不同應用環境:

3.1 PREROUTING的應用,
一般情況下,PREROUTING應用在普通的NAT中(也就是SNAT),如:你用ADSL上網,這樣你的網路中只有一個公網IP地址(如:61.129.66.5),但你的區域網中的使用者還要上網(區域網IP地址為:192.168.1.0/24),這時你可以使用PREROUTING(SNAT)來將區域網中使用者的IP地址轉換成61.129.66.5,使他們也可以上網:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j SNAT 61.129.66.5

3.2 POSTROUTING的應用,
POSTROUTING用於將你的伺服器放在防火牆之後,作為保護伺服器使用,例如:
A.你的伺服器IP地址為:192.168.1.2;
B.你的防火牆(Linux & iptables)地址為192.168.1.1和202.96.129.5

Internet上的使用者可以正常的訪問202.96.129.5,但他們無法訪問192.168.1.2,這時在Linux防火牆裡可以做這樣的設定:
iptables -t nat -A POSTROUTING -d 202.96.129.5 -j DNAT 192.168.1.2

結:最要緊的是我們要記住PREROUTING是“路由規則”之前的動作,POSTROUTING是“路由規則”之後的動作!
 
本文: 總結、整理來自網際網路

相關文章