我大概清楚一點就是從內網出去的時候用POSTROUTING進來的時候用PREROUTING,可是做透明代理的時候確是用PREROUTING。這是為什么呢?
回復: sunnygg
pre還是post是根據數據包的流向來確定的。
通常內網到外網是post,外望到內網是pre,但是外還是內只是個相對概念,在一定條件下是可以轉換的。落實到網卡上,對於每個網卡數據流入的時候必然經過pre,數量流出必然經過post。
透明代理的原理是將內網到外網的網頁訪問請求進行重定向,將內網的請求轉發回內網的代理服務器,代理服務與網關又是一體,如果使用post進行處理,那么數據就流出了,透明代理設置也就失敗了,因此必須在數據流入的時候改寫規則,才能及時響應處理請求。
通常內網到外網是post,外望到內網是pre,但是外還是內只是個相對概念,在一定條件下是可以轉換的。落實到網卡上,對於每個網卡數據流入的時候必然經過pre,數量流出必然經過post。
透明代理的原理是將內網到外網的網頁訪問請求進行重定向,將內網的請求轉發回內網的代理服務器,代理服務與網關又是一體,如果使用post進行處理,那么數據就流出了,透明代理設置也就失敗了,因此必須在數據流入的時候改寫規則,才能及時響應處理請求。
回復:
POSTROUTING是源地址轉換,要把你的內網地址轉換成公網地址才能讓你上網。
PREROUTING是目的地址轉換,要把別人的公網IP換成你們內部的IP,才讓訪問到你們內部受防火牆保護的機器。
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是“路由規則”之后的動作!
源地址發送數據--> {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是“路由規則”之后的動作!
本文: 總結、整理來自互聯網