这是一个理论问题:假设我有多个服务,它们都有一个公共 IP 地址和一个私有 IP 地址(192.xxx 范围)。这两个地址用于不同的服务。我不想在内部(对于私有 LAN)使用 IP 地址,也不想使用主机名,因为它们更容易记住:
例如:foobar.myhost.com => 公有 IP 222.xxx 和私有 IP 192.xxx
我知道我可以使用 /etc/network/hosts 文件来定义所有“专用局域网”主机名,但这非常麻烦且容易出错。因为我必须保持所有这些文件同步。
使用标准公共 DNS 记录(我的域的)列出私有名称的最佳实践/选项是什么?这有意义吗?但是,这确实重新评估了我的私有 LAN 的结构,这样好吗?然后公共 DNS 记录还将列出私有 IP(这是我从未见过的)。
最大的问题是:实际上我想要一个主机名,但这个主机名同时拥有公共和私有 IP 地址。是否有可能在 DNS 记录中定义这两个地址(使用相同的名称 foobar.myhost.com),但稍后区分私有和公共 IP 地址?
非常感谢任何好的博客帖子/最佳实践/文章/意见。
谢谢 jens
答案1
有多种不同的方法可以实现这一点。显然,您不想为公共和私有 IP 地址创建 A 记录并发布这些记录供公众使用,因为这样用户就会尝试通过私有 IP 进行访问。如果为一个名称列出了多个 A 记录,它们将以循环方式使用,导致用户有时无法连接。
以下是我用过的几个解决方案:
我最喜欢的解决方案是为这些服务器创建一个 DNS 子区域,可能称为“private.example.com”。然后,我将“example.com”中具有私有 IP 地址的服务器列在“private.example.com”区域中。然后配置您的 /etc/resolv.conf(可能通过 DHCP),以便当您连接到私有网络时,您的 DNS 搜索路径为“private.example.com example.com”。现在,如果您尝试访问“hostname”,它将首先尝试查找“hostname.private.example.com”,然后查找“hostname.example.com”。因此,您不必在多个位置列出该域中没有私有 IP 的任何主机。您还可以通过说“hostname.example.com”明确引用公共 IP,对于私有 IP 也是如此。但如果您只说“hostname”,它会搜索匹配项。
注意:如果第三方意识到存在“private.example.com”区域,他们可能能够查询或“挖掘”它并查看 IP 地址。根据您的具体要求,披露此信息可能会让您担心,但就我的需求而言,披露一些私有 IP 地址从来都不是问题。
您可以配置 BIND 所称的“视图”。 这是另一个问题的链接,显示了视图的示例配置。基本上,您可以配置访问控制列表,根据请求的 IP 地址指定使用哪个区域文件来响应请求。因此,如果您收到来自专用网络的请求,则可以使用专用 IP 进行响应。但是,视图可能难以配置和维护。还存在在不同的视图中保留记录的重复副本的问题,请参阅我的下一个建议以了解更多详细信息。
如果您的专用网络有一台主机,您可以在该主机上运行 DHCP 和 DNS,该主机与您的公共 DNS 服务器是分开的,您可能希望在此主机上将 DNS 设置为专用网络中计算机的默认 DNS 服务器,然后设置 DNS 服务器以使用专用 IP 来回答这些计算机的查询。但是,如果您感兴趣的 DNS 区域中并非所有计算机都具有专用 IP,这可能会导致记录重复,您现在必须在两个 DNS 服务器中列出服务器的 IP 地址。与上面的视图类似,但从概念上讲,设置和测试起来稍微简单一些,因为您有完全独立的 DNS 服务器。
答案2
答案3
如果您不想为少量记录而弄乱 BIND 视图(或者正在运行没有此功能的 DNS 服务器,例如 Microsoft DNS),您可以在内部 DNS 服务器上创建与仅包含 @ A 记录的内部主机的 FQDN 相对应的区域。您域中的其余记录将通过您的 Internet DNS 进行解析。对于使用内部 DNS 服务器的 LAN 上的客户端,将返回具有指定 LAN IP 的 FQDN 区域(因为 LAN DNS 服务器对这些名称具有权威性)。
答案4
将全局不可路由的 IP 范围添加到 DNS 可能会导致在不同的 LAN 中进行访问时出现混乱,因为可能存在具有该 IP 范围的其他服务器,当诱骗用户访问 LAN 外的 LAN 系统时,可能会允许网络钓鱼攻击。
在 LAN 中设置具有递归的 DNS 服务器,如果您还没有,请在那里添加相关区域/记录,并将 LAN DHCP/计算机指向那里,或者使用 BIND 视图或 DNS 服务器的相应功能,以显示来自 LAN 的不同区域