Iptables
使用 iptables 和 DNAT 更改目標 IP 地址
我正在嘗試在 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 鏈。您將需要從該系統外部發起這些數據包。