iptables- 同一Subnet下的NAT問題 (簡易教學)
在iptables,在沒加Rules的情況下,如果以外部IP形式去訪問同一內網的Server,可能會出現問題,如圖1:

因為服務器可以在收到Request後,直接對客戶端作回應訪問,但對客戶端來說,這個訪問會被誤認為NEW的Connection,所以會被擋下來,或客戶端根本無法對服務器端反回如圖的PORT 1027的請求....
所以我們要在iptables裡的Postrouting著手,將Request偽裝成Firewall的請求,而不是上圖的Client。我們想做到如下圖:

加入這句
iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.0/24 -d 192.168.1.200 -j SNAT --to-source 192.168.1.1:80
或許稍為解釋上方的規則,原理是,當所有從192.168.1.x出去的封包,目的地要去訪問192.168.1.200的80端口的話,將封包的源頭偽裝成192.168.1.1。使得192.168.1.200網頁服務器將請求返回192.168.1.1。

因為服務器可以在收到Request後,直接對客戶端作回應訪問,但對客戶端來說,這個訪問會被誤認為NEW的Connection,所以會被擋下來,或客戶端根本無法對服務器端反回如圖的PORT 1027的請求....
所以我們要在iptables裡的Postrouting著手,將Request偽裝成Firewall的請求,而不是上圖的Client。我們想做到如下圖:

加入這句
或許稍為解釋上方的規則,原理是,當所有從192.168.1.x出去的封包,目的地要去訪問192.168.1.200的80端口的話,將封包的源頭偽裝成192.168.1.1。使得192.168.1.200網頁服務器將請求返回192.168.1.1。
留言