在 Windows 系统中,此文件位于C:\WINDOWS\system32\drivers\etc\hosts
. 该文件允许我们将特定 IP 地址默认为主机名。
现在的问题是我是否可以将多个 IP 地址设置为主机名。例如,我可以这样做:
192.168.244.128 gateway.net
192.168.226.129 gateway.net
并期望浏览器可以同时解析它们,看看哪一个可以工作,然后指向那个?
如果没有,还有其他方法可以获得我想要的行为吗?
注意:我在我自己的局域网中部署这个应用程序,所以不需要互联网。
通常,您不会使用主机来执行此操作,而是使用您的 DNS。如果您将多个 A 记录分配给区域中的一个名称,大多数 DNS 将提供所谓的“循环”。
然后它会做什么,是第一个通过的请求会收到
192.168.244.128
,下一个会收到192.168.226.129
,依此类推。但是,根据设计,您的本地计算机将缓存其 DNS 解析,并且通常会一遍又一遍地使用相同的 IP 地址,直到它过期(生存时间,TTL)。是的,你可以这样做,我用它来测试循环 DNS 场景,而不必实际输入 DNS 中的主机。
当应用程序调用 gethostbyname 时,它会返回完整的 IP 地址列表(可能以随机顺序 - 取决于库/操作系统)。
我认为你正在以错误的方式解决这个问题。如果我在这里做出错误的假设,请告诉我。
设想:
您尝试做的事情称为循环 DNS(又名糟糕的负载平衡),但您尝试从客户端执行此操作。即使我刷新 DNS 缓存,这似乎也没有达到预期的效果(至少在我的 Windows XP 机器上)。Windows 只会解析到文件中的第一个 IP。尽管如此,循环 DNS 不是容错的,所以这不会帮助你实现你想要的。
建议的解决方案:
硬件负载均衡器:一些品牌名称是 Alteon、Big-IP、Barracuda。它所做的基本上是为您的用户提供一个单独的 IP 来连接并将请求转发到 Web 服务器。如果其中一台服务器不可用,则它将不再向其转发流量。这是昂贵的选择。
网络负载平衡服务:这是 Windows 服务器上可用的 Microsoft 技术,它将为您提供单个群集 IP。它实现了与硬件负载均衡器相同的结果,但方式不同。您需要做的就是配置它。
来自http://www.unc.edu/atn/lsf/docs/7.0.5/lsf_config_ref/index.htm?hosts.5.html~main
IPv4 示例
在本例中,hostA 有 2 个 IP 地址和 3 个别名。别名 hostB 指定第一个地址,别名 hostC 和 host-C 指定第二个地址。LSF 使用官方主机名 hostA 来标识两个 IP 地址属于同一主机。
我的建议是使用具有 DNS 循环和 TTL=0 的内部 DNS 服务器。如果您在 IP/服务器关闭时更新 DNS 记录(也使用自动 ip 检查系统),您可以拥有一个高可用性系统。
我在家庭网络上完成了这项工作,我为笔记本电脑的有线和无线网络接口分配了静态 IP,并从另一台机器的主机文件中将单个主机名指向这两个 IP 地址。它似乎工作正常。
基于这个例子我做了以下 10.18.yx 192.168.zx hostA
其中 hostA 是我打算从内部网络 (192.168.yx) 和 VPN (10.8.zx) 访问的服务器的主机名。
所以它运行良好,我可以使用主机名通过 VNP 让 samba 工作,所以在这两种情况下(LAN 或 VPN 连接)我都可以在 Windows 中连接我的驱动器。
此致。
@ Plamen Dimitrov 您需要一个设备来处理这种平衡,可能是一个可以在您的 FW 前面处理 BGP 的交换机,或者如果有能力使用您的 FW。如果您的 Cisco 处理 BGP,请考虑实施。这样,您可以让您的两个 ISP IP 进入 Cisco/或交换机,并且目标服务器将具有 24 位公共 IP 的有效 IP(与 2 个 ISP IP 不同)。此时(您正在使用 3 个不同的公共 IP 块,您的服务器的一个必须是 24 位),您需要让您的每个 ISP 都了解此解决方案,并且他们必须愿意支持他们之间的BGP解决方案,大多数人都会这样做。现在,当您的 FQDN 解析时,它将解析为您的 24 位 IP 块,即使 1 条 ISP 线路出现故障。目标是,由于您的 ISP 同意通过他们的线路路由该 24 位地址,因此您的 24 位地址将始终可用。这也适用于 VPN,因为您用于 VPN 的只是 24 位地址,而不是您插入 cisco/或交换机的 ISP 的任何一个 IP。在这一点上,你必须警惕 BGP FLAPPING,如果你的线路经常上下波动,由于线路得到 DOS,DNS 地址会在互联网上发生很大变化,DNS 服务器将自动删除 IP这导致您的 24 位 IP 块。这是对 BGP 解决方案的 DOS 攻击。在这一点上,你必须警惕 BGP FLAPPING,如果你的线路经常上下波动,由于线路得到 DOS,DNS 地址会在互联网上发生很大变化,DNS 服务器将自动删除 IP这导致您的 24 位 IP 块。这是对 BGP 解决方案的 DOS 攻击。在这一点上,你必须警惕 BGP FLAPPING,如果你的线路经常上下波动,由于线路得到 DOS,DNS 地址会在互联网上发生很大变化,DNS 服务器将自动删除 IP这导致您的 24 位 IP 块。这是对 BGP 解决方案的 DOS 攻击。
在这里稍微澄清一下,至少在 Windows 世界中:您可以在主机文件中为单个名称提供两个 IP 地址。查询时,返回所有地址。应用程序(即浏览器)将依次尝试连接到每个应用程序,直到建立连接。IOW,它将在超时之前尝试所有地址。(这是一个常见的误解,因为许多人认为它只会尝试“第一个”地址。)
您可以通过以下实验验证这一点:
在 hosts 文件中为主机添加两个或多个地址,一个是真实的,另一个是假的。(按字母顺序缩小假地址。)打开浏览器并尝试连接到主机名。同时运行 netstat -no。您应该会看到与虚假地址的连接尝试。(卡在 SYN_SENT 中)浏览器最终会到达正确的地址并连接。连接有延迟,但它会起作用。
您不能使用主机文件执行此操作。
您也不能使用 DNS 执行此操作:您可以为单个名称提供多个 IP,但浏览器只会选择其中一个 IP,尝试一下,如果此主机当前关闭,浏览器将显示连接错误.
一种可能的解决方案是设置代理服务器并将这两个 IP 配置为它们所服务域的父级。至少在 Squid 的情况下,代理将尝试一台服务器,如果失败,则尝试第二台服务器。然后将您的浏览器配置为使用此代理服务器。