Debian 上的 iptables 端口转发

Debian 上的 iptables 端口转发

我正在尝试设置一个简单的端口转发防火墙,但无法使基本的非防火墙配置正常工作。我已按如下方式设置了 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当然。

相关内容