在具有不同子网的第二个 eth 接口上运行 iptables NAT 预路由

在具有不同子网的第二个 eth 接口上运行 iptables NAT 预路由

情况:我需要客户端能够访问在 Linux 机器的 eth1 接口上的 8080 端口上运行的 HTTP 服务器。我不希望客户端执行任何特殊操作,也不想让 HTTP 服务器访问特权端口。

我很清楚如何在 Linux iptables 上设置一个简单的 NAT 预路由规则来重定向端口。例如,要将到达端口 80 的数据包重定向到 8080,您可以执行以下操作:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080

这在运行 eth0 的简单 Linux 机器上效果很好。但是,我试图在具有两个以太网接口(eth0 和 eth1)的 Linux 机器上实现这一点,每个接口运行不同的子网。例如:

eth0 10.10.20.0/24 eth1 10.10.30.0/24

我已经设置了 iptables nat 预路由规则,但客户端无法按预期访问应用程序。我假设这与该盒子运行两个以太网接口有关,但我无法确定问题所在。事实上,我的规则足够具体,但我仍然无法让它工作。任何人都可以了解我如何排除此故障:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 8080

需要注意的是,客户端来自与 eth1 相同的子网,并且由于 iptables 规则的存在,客户端无法连接到端口 80。我的目标是允许 HTTP 服务器在端口 8080 上运行,这样我就不必允许 root 访问特权端口,因此客户端不必进入端口 8080。

提前致谢!

答案1

通过查看以下数据包计数器来检查您的规则是否被命中 -

iptables -t nat -v -L -n

如果您的规则被命中,您确定您的服务器知道返回通过 eth1 连接到它的客户端的路由吗?

相关内容