我试图设置一个简单的端口转发防火墙,我不能使基本的非防火墙configuration工作。 我已经设置了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
这个脚本不会阻塞任何东西,但它应该将网关机器上的端口80redirect到我的内部机器192.168.1.96。 这不起作用。 问题是我无法从外面进入机器内部。 我甚至不知道如何开始debugging。 任何提示在哪里看?
更改:
# 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
仔细检查iptables -L -n -v -line和-t nat。 你做了什么看起来对我。 还运行tcpdump来查看是否可以看到外部(eth0)和内部(eth1)上的TCP SYN,以确保它在哪里消失。
“这不起作用”不是一个好的描述。 什么不工作? 你是否超时或连接被拒绝?
我不知道你正在运行的是什么版本的iptables,但是在v1.3.5下,你需要有–to-destination而不是–to。
我认为你的最后一行应该是
# masquerade iptables -t nat -A POSTROUTING -o $LAN -j MASQUERADE
注意LAN,而不是WAN。
我通常使用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当然。