Iptables

無法讓 iptables 在 SuSE Linux 上正確轉發

  • August 11, 2017

我正在努力通過iptables. 我做了很多Google搜尋,但我嘗試過的所有解決方案都不起作用。

非常簡單的設置,在同一個 LAN 上使用三台電腦

192.168.0.1 # destination
192.168.0.2 # redirector (only one interface)
192.168.0.3 # source

我的iptables配置也很簡單

# iptables -L -n -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:192.168.0.1
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443 to:192.168.0.1

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0

# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

根據我閱讀的內容,這應該可以。但事實並非如此。我也玩過iptables -t nat -I POSTROUTING 1 -p tcp -d 192.168.0.1 --dport 443 -j SNAT --to-source 192.168.0.1但也不起作用。並且是ip_forward啟用的。

瀏覽到192.168.0.2:80/443應該從 中返回內容192.168.0.1,不是嗎?有任何想法嗎?

我讓它工作了!正確的規則是

iptables -t nat -A PREROUTING -d 192.168.0.2 ! -s 192.168.0.1 -p tcp --dport 80 -j DNAT --to 192.168.0.1:80
iptables -t nat -A POSTROUTING -d 192.168.0.1 -p tcp --dport 80 -j SNAT --to 192.168.0.2.

添加 -d 就可以了。

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