如何使用 DNS/主机名或其他方式解析特定 IP:端口

如何使用 DNS/主机名或其他方式解析特定 IP:端口

这是一个典型问题关于 DNS/主机名解析到 IP/端口

示例 1

我在端口 80 上运行一个 Web 服务器,在端口 87 上运行另一个 Web 服务器。我想使用 DNS,以便 www.example.com 转到端口 87。如何仅使用 DNS 来实现此目的?

示例 2

我在服务器上的非标准端口上运行服务。如何让客户端自动连接到这个非标准端口?我可以使用 DNS 吗?是否有一些应用程序特定的支持,其中 DNS 可以指示 IP 和端口?

示例 3

某些应用程序协议是否专门支持主机名感知,并允许根据此信息采取特殊操作?Server Fault 上还有其他问题涵盖这些内容吗?

Commandeering:这个问题原本是问在同一台服务器上运行 IIS 和 Apache,但同样的概念可以应用于任何接收客户端连接的服务器软件。以下答案描述了使用 DNS 和应用程序协议支持为客户端分配连接端口号的技术问题和解决方案。

答案1

您不能使用 DNS 指向端口(除非客户端支持 SRV 记录,但大多数不支持)。

具有主机标头的网站和协议

您必须采用一些前端方法来执行此操作。通常,您会使用前端 Web 服务器或专用代理软件根据标头中请求的服务器名称将连接从端口 80 转发到端口 !80。某些防火墙也可以根据主机标头进行转发。

SRV 记录

一些客户端支持查找 SRV 记录,这些记录指示指定服务的服务器主机名和端口号(即,用户指定“example.com”,客户端查找 SRV 记录并在端口“255”上获取“server101.example.com”;然后连接到该端口)。一些客户端还会在不需要时实现此功能(例如,我的上一部智能手机会在设置新电子邮件帐户时查找 SRV 记录)。

不幸的是,对 SRV 记录的支持非常少见。只有少数几个著名协议要求支持它(Jabber/XMPP、Kerberos、LDAP、SIP),而且即使要求,也不是每个客户端都支持它。

答案2

当你输入http://www.domain.com进入您的浏览器,就会明白 HTTP 端口在 80。因此,如果您已经在 IIS 中的该端口上运行服务,则无法直接将 www.domain.com 指向端口 87。

话虽如此,还是有一些“解决方法”。

  • 只需使用http://www.domain.com:87/- 这将连接到您服务器上的端口 87(apache)。
  • 您可以设置重定向,以便http://www.domain.com/apache将转发(或者代理,如果你想要更花哨的话)到 www.domain.com:87。
  • 您可以设置“VirtualHost”,这样 www.domain2.com 仍将位于端口 80 上,与 www.domain.com 共享。如果不修改 IIS,则无法设置此功能。

Sam 是对的,DNS 与端口无关。任何类型的端口重定向都由在该端口上运行的服务进行。因此,如果您别无选择,只能将其保留在端口 80 上,则需要对 IIS 进行一些操作来实现这一点。

我也通过在 Apache 上使用 mod_proxy 解决了您的情况,不确定是否有办法使用 IIS 来做到这一点。

答案3

从技术上讲,你可以使用SRV 记录在 DNS 服务器上定义RFC 2782 告诉浏览器哪些服务器在哪个端口上处理(子)域的 http:

_http._tcp.www.example.com.  IN      SRV 0    5      80   www.example.com.
_http._tcp.www2.example.com. IN      SRV 0    5      87   www.example.com.

这对于许多协议/服务都很有效,特别是在协议规范中已经定义了 SRV 记录的使用。

然而,正如这个“耻辱堂“指出,大多数 Web 浏览器/客户端不支持此功能(对于 HTTP)。另请参阅为什么浏览器不使用 SRV 记录

基本上,SRV 不是必须包含在 http 协议中的,因此每个实现它的浏览器解析 URL 的方式与没有实现它的浏览器不同。

因此,您只能将其用作一些可选的负载平衡,而内容方面选择哪个服务器并不重要。“可选”是因为如果只有少数客户端实现此功能,它不会平衡太多负载。

答案4

DNS 没有重定向到特定端口的能力,DNS 所关心的只是名称的 IP 地址解析,反之亦然。

某些服务(例如动态 IP DNS 提供商)例如无IP提供一种服务,可以帮助您做类似的事情来绕过家庭 DNS 服务上的 IP 阻止。

相关内容