我正在努力通过 转发端口iptables
。我在 Google 上搜索了很多,但尝试过的所有解决方案都不起作用。
同一局域网中的三台计算机的设置非常简单
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
启用了 yes。
浏览到192.168.0.2:80/443
应该会返回来自 的内容192.168.0.1
,不是吗?有什么想法吗?
答案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 即可。