我正在尝试使用 iptables 设置端口转发。
我已经阅读了几篇文章(包括关于 serverfault 的文章),但我尝试的每个例子都失败了。
我有一台 Debian GNU/Linux 机器,它有一个全局路由 IP 地址,比如 1.2.3.4。我还有一个内部网络 192.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
答案1
有几件事。
首先,由于目标 nat 是在预路由您需要确保在执行地址转换后使用地址在过滤表上构建任何规则。PREROUTING 是在 FILTER 表之前进行的处理。因此,您允许的规则2200
没有任何用处,因为当它到达过滤表时,它没有目标端口 2200,而是被您的 NAT 规则转换为端口 22。
另一部分我不太确定,因为你没有很好地描述你的网络。除非我误解了你的网络设置,否则我相信 192.168.15.2 不是防火墙上的地址。我提出这一点是因为你想向输入链。输入链用于将数据包发送到防火墙系统本身,当数据包在接口之间从一个网络路由到另一个网络时,不会被访问。我怀疑你应该在向前链。