使用 iptables 将流量重定向到不同的 IP

使用 iptables 将流量重定向到不同的 IP

我有一个 debian linux 防火墙/网关,它使用 iptables 连接我的 wan 和 lan。我的eth1wan通过 DYNDNS190.200.229.102连接到动态地址, lan 的地址为。一切正常。除了使用 ACCEPT 指定的端口外,所有端口的传入流量都会被拒绝,端口转发按预期工作,将流量重定向到内部机器。somehost.comeht0192.168.128.2

问题是,当我尝试somehost.com从内部网络连接到时,并没有像我预期的那样重定向到内部机器。我的防火墙端口重定向规则附加到 wan 接口 ( eth1)。我假设当我尝试连接到时,somehost.com我来自 lan 连接,这就是重定向不起作用的原因。我尝试过 REDIRECT、DNAT、INPUT 和其他标签,但没有成功。有什么关于如何实现这一点的提示吗?

答案1

我不知道你的问题的答案。但是作为一种解决方法,为什么不在内部为 somehost.com 设置一个指向 LAN IP 的虚假 DNS 条目呢?

答案2

你必须伪装转发的数据包,使它们看起来好像来自防火墙

iptables -t nat -A POSTROUTING -s 192.168.128.0/24 -o eth0 -j MASQUERADE

否则,返回数据包将来自内部主机本身,这些主机可以看到内部地址并直接将数据包发回。因此,您正在向 190.200.229.102 发送请求,但收到来自 192.168.128.x 的回复,您的机器不知道如何处理它们,这很正常 :)

答案3

您应该尝试添加本地 DSN 条目,如 Joel Mansford 先生所述,在 Debian 中编辑文件:

/etc/hosts

添加以下格式的条目:

10.10.10.10 dyndns.com 11.11.11.11 someother.com other.sameline.com

;)

答案4

我猜测问题在于你对数据包进行了 IP 伪装(SNAT)和 DNAT。

假设您从内部主机 192.168.128.3 连接。

原始数据包如下:

192.168.128.3 -> somehost.com (190.200.229.102)

然后由于 DNAT,它将被翻译成:

190.200.229.102 -> somehost.com (190.200.229.102)

我猜问题就在这里:发件人和收件人地址相同。

您应该在连接机器、防火墙的每个接口和接收机器上运行 tcpdump 或 tshark。然后尝试连接并尝试查看数据包在哪个接口丢失以及数据包被转换时的发件人和收件人地址。

一旦您理解了它,您就可以创建一个过滤器以在正确的界面中解决该特定问题。

否则,您可以使用 joelmansford 提出的 DNS 解决方案,这可能是一个更干净的解决方案。

相关内容