Iptables

使用 iptables 和 DNAT 更改目標 IP 地址

  • March 26, 2019

我正在嘗試在 PREROUTING 中使用 DNAT。我在這裡找到了一個教程。它包含以下句子:

這是在 PREROUTING 鏈中完成的,就像數據包進來一樣;這意味著 Linux 機器本身上的任何其他東西(路由、數據包過濾)都會看到數據包到達它的“真實”目的地。

我想問作者最後一部分是什麼意思anything else on the Linux box itself will see the packet going to its 'real' destination

我嘗試了一個測試,其中我有一個虛擬設​​備(tap)並將傳入的 ICMP 數據包重定向到該 tap 設備(我的 tap 設備地址是10.0.4.1/24並且有一個程序正在監聽 tap 設備,所以它的狀態是 UP):

# iptables -t nat -A PREROUTING -i eth0 -p icmp -j DNAT --to-destination 10.0.4.2

當我 ping 一個外部 IP 時,這個規則永遠不會被使用(這個規則pkts在 iptables 中的計數保持為 0)。這個觀察與作者所說的有關嗎?

您引用的文字已經回答了您的第一個問題:

這是在 PREROUTING 鏈中完成的,就像數據包進來一樣;這意味著 Linux 機器本身上的任何其他東西(路由、數據包過濾)都會看到數據包到達它的“真實”目的地。

即路由和包過濾。

對於您的第二個問題:您似乎是從系統本身發出的。因此數據包不會進入系統,因此這些數據包不會通過 PREROUTING 鏈。您將需要從該系統外部發起這些數據包。

引用自:https://unix.stackexchange.com/questions/508589