Dnat

DNAT 一般?

  • February 3, 2013

您將如何設置 iptables 以將某個埠的數據包(例如 tcp 埠 80)發送到正確的機器(它們並不都在同一個子網中)?

例如:

`iptables -t nat -A PREROUTING -s 0.0.0.0//0 -p tcp -d $NATIP -j DNAT –to-destination $machineIP

iptables -t nat -A POSTROUTING -s $machineIP -p tcp -d 0.0.0.0//0 -j SNAT –to-source $NATIP`

以上將正確地向單台機器發送數據包和從單台機器發送數據包,但是您將如何為 n 台機器執行此操作。因為我不相信像 192.168.1.0/25 這樣的通用目的地會起作用。

您是否以某種方式標記數據包,以便當它們返回時您可以將它們發送到正確的 IP?

這是用其他命令完成的嗎?

先考慮一些。如果您0.0.0.0/0有源或目標,則不必在規則中指定它。

現在考慮您的問題,如果每台機器都有一個NATIP,那麼這只是為每台機器製定一對規則的問題。如果你想對NATIP多台機器使用相同的東西,你需要一些東西來區分,如果不是埠,那就是源 IP。否則 iptables 本身無法選擇將包發送到哪裡。(將回到這個問題)

要製作輸出 NAT,您可以為每台機器製定一個規則,或者創建一個表並在那裡設置您希望轉換的所有 IP 和子網。

iptables -t nat -N addrTranslate
iptables -t nat -A OUTPUT -s x.x.x.x -j addrTranslate
iptables -t nat -A OUTPUT -s y.y.y.y/24 -j addrTranslate
iptables -t nat -A addrTranslate -j SNAT --to z.z.z.z

使用單個 IP 地址的多機 NAT 的一種替代方法是使用 apache 設置代理。

引用自:https://serverfault.com/questions/474984