将多个IP地址指向一个主机名


25

在Windows系统中,该文件位于C:\WINDOWS\system32\drivers\etc\hosts。该文件允许我们将特定的IP地址默认为主机名。

现在的问题是我是否可以将多个IP地址设置为一个主机名。例如,我可以做这样的事情:

192.168.244.128   gateway.net
192.168.226.129   gateway.net

并期望浏览器可以同时解决这两种问题,看看哪一种将起作用并因此指向那个?

如果没有,还有其他方法可以实现我想要的行为吗?

注意:我正在自己的局域网中部署此应用程序,因此不需要互联网。

Answers:


25

通常,您不会使用主机来执行此操作,而是使用DNS。如果您将多个A记录分配给该区域中的一个名称,则大多数DNS将提供所谓的“循环”。

然后它将执行的操作是,第一个请求通过将接收192.168.244.128,下一个将接收192.168.226.129,依此类推。但是,根据设计,您的本地计算机将缓存其DNS解析,并且通常会反复使用相同的IP地址,直到过期为止(生存时间,TTL)。


1
编辑:没关系,我会纠正!发表于下方
MagnaVis

17

是的,您可以执行此操作,我已使用它来测试循环DNS方案,而无需实际在DNS中输入主机。

当应用程序调用gethostbyname时,它将获取IP地址的完整列表(可能是随机顺序-取决于库/操作系统)。


2
为实际回答问题而+1
CLF 2015年

您的意思是说它将随机选择一个
。.我

12

我认为您正在以错误的方式进行操作。让我知道我是否在这里做出错误的假设。

场景:

  • 您有两个运行相同Web应用程序的Windows服务器,可能在IIS上。
  • 您希望您的应用程序具有容错能力,以便在其中一台服务器发生故障时,您的应用程序仍然可用。
  • 您希望此容错性对于浏览器是透明的,以便用户可以继续使用相同的主机名(即gateway.net)访问应用程序

您尝试做的事情称为轮询DNS(又称“穷人负载平衡”),但是您尝试从客户端进行此操作。即使我刷新了DNS缓存,这似乎也没有达到预期的效果(至少在我的Windows XP机器上)。Windows将仅解析为文件中的第一个IP。但是,循环DNS不能容错,因此这无法帮助您实现所需的功能。

建议的解决方案:

硬件负载平衡器:一些品牌名称是Alteon,Big-IP,梭子鱼。基本上,这是为您的用户提供一个单一IP进行连接,并将请求转发到Web服务器。如果其中一台服务器不可用,则它将不再向其转发流量。这是昂贵的选择。

网络负载平衡服务:这是Windows服务器上可用的Microsoft技术,它将为您提供单个群集IP。它获得与硬件负载平衡器相同的结果,但是方式不同。您需要做的就是配置它


1
ZEN-LB是一个非常简单易用的负载均衡器。我们有很多与它的成功,喜欢它,因为它的开放源码(免费)
德里克-

2

来自http://www.unc.edu/atn/lsf/docs/7.0.5/lsf_config_ref/index.htm?hosts.5.html~main

IPv4示例

192.168.1.1 hostA hostB 192.168.2.2 hostA hostC host-C

在此示例中,hostA具有2个IP地址和3个别名。别名hostB指定第一个地址,别名hostC和host-C指定第二个地址。LSF使用官方主机名hostA来标识两个IP地址都属于同一主机。


1
“ LSF_CONFDIR / hosts的格式类似于UNIX计算机上的/ etc / hosts文件的格式。” 即:来源与常规主机文件无关。
gertvdijk

1

我的建议是使用具有DNS轮询和TTL = 0的内部DNS服务器。如果在IP /服务器关闭时更新DNS记录(也使用自动ip检查系统),则可以拥有高可用性系统。


这不是高可用性的解决方案。DNS不是为此目的而设计的,只能与其他故障转移方法结合使用。许多解析器也忽略TTL缓存,从而使此方法不可靠。
马克·亨德森

1

我是在家庭网络中完成此操作的,在该网络中,我为笔记本电脑的有线和无线网络接口分配了静态IP,并从另一台计算机的主机文件中将一个主机名指向了这两个IP地址。似乎工作正常。


1

来自 http://www.unc.edu/atn/lsf/docs/7.0.5/lsf_config_ref/index.htm?hosts.5.html~main

IPv4示例

192.168.1.1 hostA hostB 192.168.2.2 hostA hostC host-C

在此示例中,hostA具有2个IP地址和3个别名。别名hostB指定第一个地址,别名hostC和host-C指定第二个地址。LSF使用官方主机名hostA来标识两个IP地址都属于同一主机。

根据此示例,我做了以下10.18.yx 192.168.zx hostA

其中hostA是我打算从内部网络(192.168.yx)和VPN(10.8.zx)访问的服务器的主机名。

ping hostA
sending 'ping' on 192.168.y.x [10.8.z.x]
Answer from 10.8.z.x : bytes=32 time=98 ms TTL=64
Answer from 10.8.z.x : bytes=32 time=78 ms TTL=64
Answer from 10.8.z.x : bytes=32 time=111 ms TTL=64
Answer from 10.8.z.x : bytes=32 time=136 ms TTL=64

因此它运行良好,并且我可以使用主机名通过VNP来使samba正常工作,因此在两种情况下(连接LAN或VPN)在Windows中连接驱动器对我来说都是很好的。

最好的祝福。


0

@ Plamen Dimitrov您将需要一台设备来处理这种平衡,可能是一台可以在FW之前​​处理BGP的交换机,或者在有能力的情况下使用FW。如果您的Cisco处理BGP,请考虑实施。这样,您就可以使两个ISP IP都进入Cisco /或交换机,并且目标服务器将具有有效的24位公用IP IP(与这两个ISP IP不同)。到那时(您正在使用3个不同的公共IP块,一个用于服务器的MIP必须为24位),您需要让每个ISP都知道此解决方案,并且他们必须愿意支持它们之间的BGP解决方案,大多数都会这样做。现在,当您的FQDN解析后,即使1条ISP线路出现故障,它也将解析为您的24位IP块。目标是 由于您的ISP同意通过其线路路由该24位地址,因此您的24​​位地址将始终可用。这也适用于VPN,因为您用于VPN的全部都是24位地址,而不是插入到Cisco /或交换机的ISP的IP。那时,您必须警惕BGP FLAPPING,如果您的线路上下移动很多,由于线路获取DOS,DNS地址将在Internet上发生很大变化,以至DNS服务器将自动删除IP这导致您的IP的24位块。那是对BGP解决方案的DOS攻击。那时,您必须警惕BGP FLAPPING,如果您的线路上下移动很多,由于线路获取DOS,DNS地址将在Internet上发生很大变化,以至DNS服务器将自动删除IP这导致您的IP的24位块。那是对BGP解决方案的DOS攻击。那时,您必须警惕BGP FLAPPING,如果您的线路上下移动很多,由于线路获取DOS,DNS地址将在Internet上发生很大变化,以至DNS服务器将自动删除IP这导致您的IP的24位块。那是对BGP解决方案的DOS攻击。


0

至少在Windows世界中,这里需要进行一些澄清:在hosts文件中,单个名称可以有两个IP地址。查询时,将返回所有地址。该应用程序(即浏览器)将尝试依次连接到每个应用程序,直到建立连接为止。IOW,它将在超时之前尝试所有地址。(这是一个普遍的误解,因为许多人认为它只会尝试“第一个”地址。)

您可以通过以下实验对此进行验证:

在hosts文件中为一个主机添加两个或多个地址,一个为真实地址,另一个为假地址。(将虚假地址按字母顺序缩小。)打开浏览器,然后尝试连接到主机名。同时运行netstat -no。您应该看到尝试连接到虚假地址的尝试。(卡在SYN_SENT中)浏览器最终将到达正确的地址并连接。连接有延迟,但是它将起作用。


并不是说您错了,但我只是在使用Chrome的Win 10 Pro上尝试了一下,但没有成功。我调整了主机文件(并保存了文件),然后运行ipconfig /flushdns以确保忘记以前的分辨率。尝试在Chrome的隐身窗口中打开网站(对我的计算机而言是本地的)以排除缓存结果。它只是失败了(我等了几分钟看它是否最终会工作)。点击刷新只是为了确定。然后我从主机文件中注释掉了虚假的IP。没有做任何其他事情,我刷新了页面,它正常工作。Firefox也是如此。
安德鲁·斯蒂兹

因此,它可以基于该应用程序工作,但是绝对不能在两种现代浏览器中工作。
安德鲁·斯蒂兹

-1

您无法使用hosts文件执行此操作。

您也无法使用DNS进行此操作:您可以为一个名称提供多个IP,但是浏览器将仅选择多个IP中的一个,然后尝试使用,如果该主机当前处于关闭状态,则浏览器将显示连接错误。

一种可能的解决方案是设置代理服务器,并将这两个IP配置为它们所服务域的父级。至少对于Squid,代理将尝试一台服务器,如果失败,则尝试第二台服务器。然后将浏览器配置为使用此代理服务器。


关于轮询不是正确的:www-archive.mozilla.org/docs/netlib/dns.html 请注意,类似 google的查询会返回多个DNS记录。尽管RFC3484进行了重新排序,它显然有助于返回多个IP作为故障转移策略。
BrianEss

是的,您可以使用主机文件进行操作
沃伦2009年
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.