>>> 此貼的回復 >> iptables -A PREROUTING -t nat -d 192.168.1.234 -p tcp --dport 80 -j DNAT --to 192.168.0.100
dport指定80了後面就沒必要加端口號了 還有個要確定的問題 你的192.168.0.100的Gateway必須是192.168.0.1
>>> 此貼的回復 >> 問題找到了,
是FORWARD的問題,
因為對FORWARD做了很強的控制,所以,默認不讓隨意進出的,
需要iptables -I FORWARD -o eth0 -d 192.168.0.100 -p tcp --dport 80 -j ACCEPT iptables -I FORWARD -i eth0 -s 192.168.0.100 -p tcp --sport 80 -j ACCEPT
>>> 此貼的回復 >> 呵呵,如果我沒有猜錯的話,你應該還有一台SNAT或者MASQUERADM的語句。如果這樣的話,根據網絡原理,數據包的源地址將會返回錯誤,因為數據包是這樣走向的。 假如192.168.0.2(你的一台內網機器)訪問你的WEB服務,在浏覽器輸入:http://192.168.1.234,這個時候,192.168.0.2的機器會用自己的子網掩碼跟192.168.1.234進行運算,發現要訪問的IP不在同一網段。於是把數據包轉發給網關192.168.0.1。網關收到後,把數據包的目的地址改為192.168.0.100(你的WEB服務器)。然後把數據包發給WEB服務器。WEB服務器收到後,會發送響應的數據包,目的IP是192.168.0.2,源IP是192.168.0.100。根據網絡原理,這兩個IP在同一網段,於是直接發送過去,不經過網關。192.168.0.2收到後,發現源地址是192.168.0.100,而不是192.168.1.234,於是把數據包丟棄,繼續等待192.168.1.234的會應,當然,這是永遠也無法等到的。所以,你應該加一條語句進來。如果你學過TCP/IP或者CCNA的課程應該能明白的。 所以應該加一條語句:
iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 -d 192.168.0.100/24 -j SNAT --to 192.168.0.1