我有一组移动设备,配置为将 UDP 消息发送到其 SRAM 中设置的 IP 地址。它们既不能存储 URL,也不能将 URL 解析为 IP 地址。设备发送到目标 IP 的流量必须通过我控制下的网关路由器。网关路由器运行 OpenWRT Linux。我想将这些 UDP 数据包路由到 Amazon Elastic Load Balancing(AWS 服务)。Elastic Load Balancing 的一个限制是(据我所知)必须使用 DNS 来解析负载均衡器的 IP(因为 AWS 可能随时使用多个负载均衡器,而使用哪个负载均衡器是在 Amazon 控制下的 DNS 上设置的)。这就是故事的长篇大论。
简而言之,“我如何将通过 OpenWRT 路由器路由的 UDP 数据包导向通过该路由器的 DNS 解析的地址?”
我正在寻找通过 IP 链/表、防火墙规则等(或至少具有一些历史记录的“插件”)而不是自定义生成的代码的解决方案。
提前感谢大家的帮助!
答案1
我正在寻找通过 IP 链/表、防火墙规则等(或至少具有一些历史记录的“插件”)而不是自定义生成的代码的解决方案。
抱歉,不会发生这种情况。当策略激活时,防火墙和路由引擎通常会将 DNS 记录解析为 IP 地址,Linux 也不例外。内核不会执行额外的 DNS 查找来查找 DNS 记录更改。
的手册页说iptables
得很清楚,强调一下:
地址可以是网络名称、主机名、网络 IP 地址(带 /mask)或纯 IP 地址。在规则提交给内核之前,主机名只会解析一次。 请注意,指定任何要通过远程查询(例如 DNS)解析的名称是一个非常糟糕的主意。
传统上,DNS 在这些类型的堆栈中不起作用,因为它们试图使操作尽可能具有确定性。忽略实现此代码会给整体情况增加的复杂性,它还存在安全风险,因为您实际上是将对安全策略的控制权委托给控制 DNS 记录的人。即使您 100% 确定您信任远程服务器操作员,基于 UDP 的 DNS 本质上是可伪造的协议(DNSSEC 可防止上游伪造,但不提供客户端和递归器之间的保护,即“最后一英里”),这在各个方面都是一个糟糕的想法。如果您找到支持此功能的产品,您可能不应该支持它们!
您需要从这个等式中移除 DNS。对于您运行的层级而言,它不是合适的工具。