题 iptables端口转发debian


我正在尝试设置一个简单的端口转发防火墙,我无法使基本的非防火墙配置工作。我已经设置了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。这不起作用。问题是我无法从外部进入内部机器。我甚至不知道如何开始调试。任何关于在哪里看的提示?


5
2018-06-17 13:06






答案:


更改:

# 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

1
2018-06-17 13:33



它不需要在“192.168.1.96:80”中包含“:80”;它只需要包含“192.168.1.96”,因为端口没有变化。 - Kevin M
非常正确,但它是完整的.. :) - rkthkr
实际上, - to - > --to-destination也没有添加任何内容。这是同一个命令。 - Thomas


用iptables -L -n -v -line和-t nat仔细检查。你做的对我来说是对的。还运行tcpdump以查看是否可以在外部(eth0)和内部(eth1)上看到TCP SYN och以确保它消失的位置。

“这不起作用”不是一个很好的描述。什么不起作用?你有超时或连接被拒绝吗?


1
2018-06-17 14:05



你是对的。这就是hapenning。我可以从外部到内部,并在我的内部网络服务器(tomcat)中浏览前两页。一旦我需要输入登录名和密码,它就会停止响应。我可以毫无问题地从内部页面浏览。 - Ricardo Marimon
顺便说一句,登录超时后的页面。 - Ricardo Marimon
可能是因为登录后您被重定向到https(端口443)或网络服务器的本地(内部)IP地址? - Thomas
另一个症状。如果我让我的内部机器使用网关机器来移出流量,我可以从192.168.128.96跟踪到www.google.com但我无法浏览谷歌,因为它只是挂起等待响应。 - Ricardo Marimon
至于重定向,当我使用linksys无线路由器(我很绝望)使用它作为端口路由器复制此设置时,它可以工作。这就是让我相信我的安装脚本有问题的原因。 - Ricardo Marimon


我不知道你正在运行什么版本的iptables,但是在v1.3.5下,你需要使用--to-destination而不是--to。


0
2018-06-17 13:20





我想你的最后一行应该是

# masquerade
iptables -t nat -A POSTROUTING -o $LAN -j MASQUERADE

注意LAN,而不是WAN。


0
2018-06-17 13:22



包裹需要在外出时“伪装”... - rkthkr
不,如果Web服务器看到实际的IP并且内部网络上有公共IP,那就可以了。但公共互联网上的远程计算机需要查看公共IP,而不是私有IP。 - Kevin M
我想你们都知道的更好。 :) - Neobyte


我通常使用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 当然。


0
2018-03-22 22:37