Next Previous Contents

10. 在同一網路上的 Destination NAT

如果您要做 portforwarding 回到同一個網路﹐您要確定前向和回應封包雙方都經過該 NAT 主機(這樣它們才能被修改)。NAT 程式從現在開始(2.4.0-test6以後)﹐會擋掉後面情形所產生的傳出 ICMP 重導向﹕那些已經 NAT 的封包以它所進入的相同界面傳出﹐而接收端伺服器仍嘗試直接回應到客戶端(不認可該回應)。

經典的情形是內部人員嘗試連接到您的 `公有(public)' 網站伺服器﹐實際上是從公有地址(1.2.3.4) DNAT 到一個內部的機器(192.168.1.1)去﹐就像這樣﹕

# iptables -t nat -A PREROUTING -d 1.2.3.4 \
        -p tcp --dport 80 -j DNAT --to 192.168.1.1

一個方法是跑一台內部 DNS 伺服器﹐它知道您的公有網站的真正(內部) IP 地址﹐而將其它請求轉傳給外部的 DNS 伺服器。換而言之﹐關於您網站伺服器的記錄會正確地顯示為內部 IP 地址。

而另一個方法是同時讓這台 NAT 主機將該等連線之來源 IP 地址映對為它自己的地址﹐我們可以像如下那樣做(假設 NAT 主機之內部 IP 地址為 192.168.1.250)﹕

# iptables -t nat -A POSTROUTING -d 192.168.1.1 -s 192.168.1.0/24 \
        -p tcp --dport 80 -j SNAT --to 192.168.1.250

因為 PREROUTING 規則是最先執行的﹐對內部網站伺服器而言﹐封包就已經被定向好了﹕我們可以內定好哪個為來源 IP 地址。


Next Previous Contents