Iptables的端口转发 – 我做错了什么?

我正在尝试使用iptables设置端口转发。

我读过几个东西(包括在这里在serverfault),但我尝试的每个例子都失败了。

我有一个全局路由的IP地址的Debian GNU / Linux机器,比如1.2.3.4。 我也有一个内部networking192.168.15.0/24,其中有一个主机(192.168.15.2)。

我只是想把1.2.3.4上的端口2200转发给192.168.15.2:22,所以这就是我所做的:

iptables -A PREROUTING -t nat -p tcp --dport 2200 -j DNAT --to 192.168.15.2:22 iptables -A INPUT -p tcp -m state --state NEW --dport 2200 -j ACCEPT 

但是,这不起作用。 如果我尝试ssh到1.2.3.4:2200 ,我得到“连接被拒绝”。

现在尝试3个多小时,我觉得我已经尝试了一切,一定有什么错。

IP转发已启用:

 [email protected]:~# cat /proc/sys/net/ipv4/ip_forward 1 

一些事情。

首先,因为在PREROUTING上执行目标nat,所以您需要确保在执行地址转换后,使用地址在筛选表上构build任何规则。 PREROUTING是在FILTER表之前进行的。 所以你规定2200没有做任何有用的事情,因为它没有2200的目标端口,当它到达过滤表时,而是被你的NAT规则转换到端口22。

另一部分我不太确定,因为你没有给出你的networking很好的描述。 除非我错过了解您的networking设置,否则我认为192.168.15.2不是防火墙上的地址。 由于您正在尝试将规则添加到INPUT链中,所以我提出这个问题。 INPUT链用于发送到防火墙系统本身的数据包,并且当数据包在从一个networking到另一个networking的接口之间路由时不被访问。 我怀疑你应该添加一个规则,而不是FORWARD链。