在Windows系统中,在C:\WINDOWS\system32\drivers\etc\hosts
有这个文件。 这个文件允许我们将一个特定的IP地址默认为一个主机名。
现在的问题是我是否可以将多个IP地址设置为主机名。 例如,我可以做这样的事情:
192.168.244.128 gateway.net 192.168.226.129 gateway.net
并期望浏览器可以解决他们两个,看看哪一个将工作,因此指向那一个?
如果没有,是否有其他方法来获得我想要的行为?
注:我在我自己的局域网中部署这个应用程序,所以不需要互联网。
通常情况下,你不会使用主机来做到这一点,但你的DNS。 如果您将多个Alogging分配给区域中的某个名称,则大多数DNS将提供所谓的“循环”。
那么它会做什么,是第一个请求通过将会收到192.168.244.128
,下一个会收到192.168.226.129
,等等。 但是,根据devise,本地计算机将caching其DNSparsing,并且通常会一遍又一遍地使用相同的IP地址,直到它到期(TTL)。
我认为你正在做这个错误的方式。 让我知道,如果我在这里做错误的假设。
场景:
你想要做的是叫做循环法DNS (又名穷人负载均衡),但是你试图从客户端做到这一点。 这似乎并没有达到预期的效果(至less在我的Windows XP中)即使我刷新DNScaching。 Windows将只parsing到文件中的第一个IP。 尽pipe如此,循环的DNS并不是容错的,所以这不会帮助你达到你想要的。
build议解决scheme
硬件负载平衡器:一些品牌名称是Alteon,Big-IP,梭子鱼。 它所做的基本上是为您的用户提供一个IP来连接并将请求转发到Web服务器。 如果其中一台服务器不可用,则不再转发stream量。 这是昂贵的select。
networking负载平衡服务:这是Windows服务器上的一项微软技术,它将为您提供一个单一的群集IP。 它与硬件负载平衡器达到相同的结果,但方式不同。 所有你需要做的就是configuration它 。
是的,您可以这样做,我已经使用它来testing循环DNSscheme,而不必实际inputDNS中的主机。
当应用程序调用gethostbyname时,它将获取IP地址的完整列表(可能以随机顺序 – 取决于库/ OS)。
从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地址属于同一个主机。
我的build议是使用DNS循环和TTL = 0的内部DNS服务器。 如果在IP /服务器closures时更新DNSlogging(也包含自动IP检查系统),则可以使用高可用性系统。
我已经在家庭networking上完成了这项工作,我将静态IP分配给笔记本电脑的有线和无线networking接口,并从另一台机器的主机文件将单个主机名指向这两个IP地址。 它似乎工作正常。
从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是我打算从内部networking(192.168.yx)和VPN(10.8.zx)访问的服务器的主机名。
ping hostA sending 'ping' on 192.168.yx [10.8.zx] Answer from 10.8.zx : bytes=32 time=98 ms TTL=64 Answer from 10.8.zx : bytes=32 time=78 ms TTL=64 Answer from 10.8.zx : bytes=32 time=111 ms TTL=64 Answer from 10.8.zx : bytes=32 time=136 ms TTL=64
所以它运行良好,我可以通过VNP使用主机名来获得Samba的工作,所以在这两种情况下(LAN或VPN连接),我都可以在Windows中连接驱动器。
最好的祝福。
@ Plamen Dimitrov你需要一个设备来处理这种平衡,可能是一个可以在你的FW之前处理BGP的交换机,或者如果它能够使用你的FW。 如果你的Ciscos处理BGP考虑实施。 这样,您可以让您的两个ISP的IP进入Cisco /或交换机,并且目标服务器将具有有效的24位公有IP(与2个ISP IP不同)的IP。 在这一点上(你使用3个不同的公共IP块,你的服务器必须是24位),你需要让每个ISP知道这个解决scheme,他们必须愿意支持他们之间的BGP解决scheme,这将是最重要的。 现在,当您的FQDN解决时,即使1个ISP线路断开,它也会parsing到您的24位IP地址块。 目标是,由于您的ISP同意通过他们的线路发送24位地址,您的24位地址将始终可用。 这也适用于VPN,因为您用于VPN的所有IP地址都是24位地址,而不是来自您插入到Cisco /交换机的ISP的IP地址。 在这一点上,你必须警惕BGP FLAPPING,如果你的线路上下了很多,由于一条线获得DOS,DNS地址将会在互联网上发生很大的变化,DNS服务器将自动删除IP这导致你的24位IP地址块。 这是对BGP解决scheme的DOS攻击。
至less在Windows环境下稍作澄清:在主机文件中,您可以有两个IP地址作为单个名称。 查询时,返回所有地址。 应用程序(即浏览器)将尝试连接到每个轮stream,直到连接。 IOW,它会在超时之前尝试所有的地址。 (这是一个常见的误解,因为很多人认为它只会尝试“第一”的地址。)
您可以通过以下实验来validation这一点:
为主机文件中的主机添加两个或更多地址,其中一个是真实的,另一个是假的。 (使伪造的地址按字母顺序变小)打开浏览器并尝试连接到主机名。 同时运行netstat -no。 你应该看到连接到假地址的尝试。 (卡在SYN_SENT)浏览器将最终到达良好的地址,并将连接。 连接有延迟,但会起作用。
你不能用hosts文件来做到这一点。
你不能用DNS做到这一点:你可以为一个名字提供多个IP地址,但是浏览器只会select多个IP地址中的一个,试一试,如果这个主机当前closures,浏览器将显示连接错误。
一种可能的解决scheme是设置一个代理服务器,并将这两个IPconfiguration为所服务域的父代。 至less在Squid的情况下,代理将尝试一台服务器,如果失败,请尝试第二台服务器。 然后将您的浏览器configuration为使用此代理服务器。