两个主机名可以共享相同的IP地址吗?


35

谁能解释两个主机名是否可以共享相同的IP地址?

如果一个主机名代表多个IP地址,那又有可能吗?为什么?


18
想要一个现实世界中发生这种情况的例子吗?Ping serverfault.com和,superuser.com然后查看为两者返回的IP地址。
Scott Chamberlain

1
所有主机名已经共享了127.0.0.1地址,有点...
jlliagre 2013年

Answers:


45

也可以为一个主机名分配多个IP地址:

rr.example.com.        A      192.0.2.12
rr.example.com.        A      192.0.2.23
rr.example.com.        A      192.0.2.34
rr.example.com.        A      192.0.2.45

当查询DNS服务器时,rr.example.com您将获得IP地址列表。然后,您可以选择连接到其中之一。如果第一次尝试进行连接遭到主动拒绝,请尝试下一次。

只要端点主动拒绝TCP连接,大多数浏览器都将遵循此流程。如果端点超时,即使没有尝试所有IP,资源也将被视为不可访问

由于大多数应用程序(包括浏览器)通常一次只对一个IP端点感兴趣,并且仅选择第一个可用的答案,因此您可能会改变目标服务器之间的负载,使第一个服务器获得所有流量,而其他服务器可能处于空闲状态。

为了避免这种情况,大多数DNS服务器都提供了所谓的Round Robin配置,使服务器可以替代返回相等匹配记录的顺序。在负载均衡器普及之前,这是一种有效的负载均衡方法,并且可以在网络系统上实现一定程度的容错。


7
这不是在问相反的问题吗?
mowwwalker

2
有两个问题。@Sirch已经涵盖了相当不错的第一部分
Mathias R. Jessen

哦,我知道了,我跳过了说明。谢谢您的回答!
mowwwalker

1
浏览器/网络堆栈通常是否尝试接收的第一个地址?还是会随机尝试?随机分配DNS服务器返回的IP顺序以尝试平衡负载是否有意义?
2013年

取决于特定的客户端实现。大多数服务器将随机化返回IP地址的顺序(此行为称为“循环”)。实际上有趣的问题,我想我会在答案上
稍作

35

是的,多个主机名可以使用相同的IP地址,最佳做法是使用CNAME记录指向A记录

bar.example.com.        CNAME  foo.example.com.
foo.example.com.        A      192.0.2.23

注意所有句号。

用一个主机名代表多个IP地址要复杂一些。如果我们谈论的是MX记录,则此解决方案已在DNS中使用优先级编号存在,如果您希望它表示多个A记录,则最好使用负载平衡器,例如HAProxy。


6
值得注意的是,我已经在真实的互联网上看到破坏名称解析器的CNAME链。因为一个CNAME可以指向另一个CNAME。甚至CNAME循环都是可能的。
PP。


还需要指出的是,A包含相同IP的记录可以出现在不同的区域,例如x.foo.com. A 1.2.3.4y.bar.com. A 1.2.3.4
Blrfl 2013年

这个答案忘了讲通配符A记录,通配符记录也导致同一IP上有多个主机名。
Izzy 2013年

嘿Sirch,马戏团怎么办?
JonoRR 2014年

6

除了其他建议的CNAME更改外,您还必须处理托管服务器上的逻辑。我使用Apache,并将其配置为:

<VirtualHost 1.2.3.4:80>
    ServerName  www.abc.com
    ServerAlias abc.com
    ...
</VirtualHost>

<VirtualHost 1.2.3.4:80>
    ServerName  www.xyz.com
    ServerAlias xyz.com
    ...
</VirtualHost>

我确定其他http服务器软件也有类似的事情。


2

您需要清楚两个主机名的含义。如果您是指两个具有相同IP地址的物理设备,则答案通常是“否”。如果serverA和serverB作为主动-被动群集工作,那么您将使每个服务器有两个地址。一个是专用于该服务器的IP地址,第二个IP地址是在服务器之间共享的IP地址,但只有活动服务器将监听该共享地址。被动服务器仅在主动服务器出现故障时才开始在共享地址中侦听。


2

还值得注意的是,在IPv6中,您可以将相同的IP分配给两个或多个主机,网络将为您执行负载平衡和故障转移(如果一个无法访问,请尝试另一个)。两者均被视为一个逻辑端点,并且不涉及任何DNS。

此功能称为Anycast


1

同一域的多个IP:

  • 是的,这是可能的并且很常见:如果一台服务器(具有ip A)发生故障,则可以连接到DNS寄存器的下一个IP并访问另一台服务器(具有ip B)以获取服务。

同一IP的多个域:

您需要回答下一个问题:所有域都提供相同的服务吗?

  • 如果是:这也是一种非常常见的配置:许多公司购买了许多具有不同国家/地区顶级域名的域名:xxx.com,xxx.net,xxx.org等,它们都指向同一服务,即,到同一IP列表。
  • 如果否:可能但不常见且不建议使用。一些只允许HTTP服务的托管公司使用NAT /代理来保留IP。但是,当然,这意味着“了解” HTTP以识别目标服务的代理。

0

电信中的许多服务器(例如HSS和PCRF)都使用SCTP传输,因此这些服务器具有多个IP地址。这些地址用于多归属(SCTP支持),为连接提供冗余和故障转移。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.