IPTABLES 中 DNAT 和 REDIRECT 之間的區別

IPTABLES 中 DNAT 和 REDIRECT 之間的區別

好吧,這可能是因為我很密集,或者可能只是沒有找到正確的來源,但我無法理解為什麼這些 IPTABLES 設定之一會比另一個更好。

這是我的設定:

我有一個盒子,用作透明代理和路由器或其他類型。它有兩個接口,ETH0 和 ETH1,以及以下地址方案:

ETH0 = DHCP ETH1 = 192.168.5.1/24 為 LAN 中其後面的客戶端提供 192.168.5.0/24 網路的 DHCP

我安裝了 privoxy,並作為透明代理監聽端口 8080。我透過此設定完成的任務是能夠以最少的配置將此盒子放入現有網路中並將客戶端附加到代理程式。

這是我原來的 IPTABLES 文件

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

此配置工作正常,流量來回流動沒有問題。我在 privoxy 日誌檔案中取得了原始客戶端 IP 位址,一切順利。

當我開始查看其他人的配置並發現他們使用 DNAT 而不是 REDIRECT 時,我感到困惑,我試圖了解其中一種配置相對於另一種配置的真正好處。這是一個範例配置:

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.5.1:8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

同樣,這個配置也有效,並且從日誌記錄的角度為我提供了我需要的一切...

哪一個是正確的,或比另一個更正確?

感謝您花時間閱讀本文......

答案1

REDIRECT變更傳送到機器本身的目標 IP 位址。換句話說,本地產生的資料包被映射到 127.0.0.1 位址。它用於重定向本地資料包。如果您只想重定向本機上的服務之間的流量,那麼它將是一個不錯的選擇。

DNAT是實際的網路位址解讀。如果您希望目的地是本機系統以外的資料包的目的地發生變化,那麼這是兩者中更好的選擇,因為這是REDIRECT行不通的。

答案2

REDIRECT確實會更改發送到機器本身的目標 IP 位址,如 Warner@ 所回答。但我想說這個答案並不完全正確,或者有點誤導。

REDIRECT不僅僅用於重定向本地資料包。實際上DNAT,要使用的目標 IP 位址是隱式的,如果是本機封包,則為 127.0.0.1,否則為機器介面的 IP 位址;如果是 OP,則為 192.168.5.1。

所以在這個問題中,無論最終目的地是什麼,資料包都應該首先到達代理,所以REDIRECT非常適合。

由於REDIRECT您不需要指定 IP 位址,它只會採用正確的 IP 位址,因此它具有以下優點DNAT

  • 如果電腦的 IP 位址因任何原因而變化,您無需修改規則,特別是DNAT不適用於 DHCP 控制的介面。

  • 您可以為多個系統(例如多個代理實例)編寫和維護相同的規則,而無需因為特定的 IP 位址而保留略有不同的版本。

答案3

如果您想將流量傳送到本機計算機,則 DNAT 和 REDIRECT 完全相同。

文件中是這樣描述的:“[重定向] 是目標 NAT 的一種特殊情況,稱為重定向:它是一種簡單的便利,與對傳入介面的位址進行 DNAT 完全相同。”

https://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html#ss6.2

相關內容