我正在尝试设置一个简单的端口转发防火墙,但无法使基本的非防火墙配置正常工作。我已按如下方式设置了 iptables 脚本
#!/bin/sh
# interfaces
LAN="eth1"
WAN="eth0"
# enable forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# delete all existing rules to start from scratch
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# accept everything
iptables -A INPUT -j ACCEPT
iptables -A FORWARD -j ACCEPT
iptables -A OUTPUT -j ACCEPT
# port forwarding to local machine
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT --to 192.168.1.96
# masquerade
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
此脚本不会对任何内容设置防火墙,但它应该将网关机器上的端口 80 重定向到我的内部机器 192.168.1.96。这不起作用。问题是我无法从外部进入内部机器。我甚至不知道如何开始调试。有什么提示可以说明在哪里查看吗?
答案1
改变:
# port forwarding to local machine
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT --to 192.168.1.96
到:
# port forwarding to local machine
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT \
--to-destination 192.168.1.96:80
答案2
使用 iptables -L -n -v --line 和 -t nat 进行双重检查。在我看来,你所做的是正确的。另外,运行 tcpdump 看看你是否可以在外部 (eth0) 和内部 (eth1) 看到 TCP SYN,以确保它消失的地方就在这里。
“这不起作用”不是一个好的描述。什么不起作用?您是否遇到超时或连接被拒绝的情况?
答案3
我不知道您正在运行哪个版本的 iptables,但在 v1.3.5 下,您需要使用 --to-destination 而不是 --to。
答案4
我通常使用 IP 而不是接口进行设置。请尝试以下操作:
# port forwarding to local machine
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 80 -j DNAT --to 192.168.1.96
# masquerade
iptables -t nat -A POSTROUTING -s 192.168.1.96 -j MASQUERADE
并设置$EXT_IP
当然。