在我工作的大学的数据中心,我们有一个 DNS 系统,用于注册我们的服务器的名称和仅供内部使用的服务的地址。
通常,我们使用以下模式:
server A xxx.xxx.xxx.xxx
service CNAME server
现在我们有一项服务,当通过 HTTP 访问时,我们只想解析到 CNAME 记录,而不是 A 记录。
仅使用 DNS 配置可以吗?
答案1
对于某些协议(例如 http),您可以将服务配置为仅在客户端指定正确的名称时才响应;在这种情况下,您可以将 Web 服务器配置为仅响应包含 CNAME 的 http 请求。根据评论,您已经知道如何执行此操作。
还有一些协议,其中服务器不知道客户端正在使用的名称,在这种情况下无法阻止用户使用 A 记录中的名称。
我不相信你可以在 DNS 层做到这一点。 也就是说,如果没有对应的客户端可见的 A 记录,那么就没有可靠的方法来创建客户端可见的 CNAME,并解析到所需的 IP 地址。
你能要做的(我猜这取决于你使用的 DNS 软件)是拥有两个 A 记录,都指向同一个 IP 地址,即
server A xxx.xxx.xxx.xxx
service A xxx.xxx.xxx.xxx
然后让server
记录只对需要访问它的管理员可见。你不需要有使用 CNAME 作为服务名称。唯一的问题是,您有责任确保两个名称的 IP 地址始终匹配。
答案2
是的,有可能。事实上,无论如何,这都是解决问题的第一步。
不过,要真正做到这一点,您(通常)需要绕过操作系统的本地 DNS 解析方法,因为它们(同样,通常)不能停在 CNAME 记录上而不进行进一步解析。我不知道有任何 DNS 解析器库允许您这样做,但我确实知道一个可以做到这一点的标准工具,如果您明确要求dig
查询CNAME
类型(或ANY
查询类型,尽管可能根据 DNS 服务器返回 A 或 AAAA 记录)。