No sistema Windows, existe este arquivo em C:\WINDOWS\system32\drivers\etc\hosts
. Este arquivo nos permite padronizar um endereço IP específico para um nome de host.
O problema agora é se posso definir vários endereços IP para um nome de host. Por exemplo, posso fazer algo assim:
192.168.244.128 gateway.net
192.168.226.129 gateway.net
E esperar que o navegador possa resolver os dois, ver qual funcionará e, assim, apontar para aquele?
Se não, existe alguma outra maneira de obter o comportamento que eu quero?
Observação: estou implantando este aplicativo em minha própria rede local, portanto, não há necessidade de internet.
Normalmente você não usaria hosts para fazer isso, mas seu DNS. A maioria dos DNS fornecerá o que é chamado de "Round Robin" se você atribuir vários registros A a um nome na zona.
O que faria então, é que o primeiro pedido que chegasse receberia
192.168.244.128
, o próximo receberia192.168.226.129
, e assim por diante. No entanto, por design, sua máquina local armazenará em cache sua resolução DNS e geralmente usará o mesmo endereço IP repetidamente, até que expire (Time To Live, TTL).Sim, você pode fazer isso, eu o usei para testar cenários de DNS round-robin sem precisar inserir os hosts em um DNS.
Quando um aplicativo chama gethostbyname, ele recebe de volta a lista completa de endereços IP (possivelmente em ordem aleatória - dependendo das bibliotecas/SO).
Acho que você está fazendo isso da maneira errada. Deixe-me saber se estou fazendo as suposições erradas aqui.
Cenário:
O que você está tentando fazer é chamado de DNS round-robin (também conhecido como balanceamento de carga de pobre), mas você está tentando fazer isso do lado do cliente. Isso não parece ter o efeito desejado (pelo menos na minha caixa do Windows XP), mesmo se eu liberar o cache DNS. O Windows resolverá apenas para o primeiro IP no arquivo. No entanto, o DNS round-robin não é tolerante a falhas, portanto, isso não o ajudará a alcançar o que deseja.
Solução sugerida:
Balanceador de carga de hardware: Algumas marcas são Alteon, Big-IP, Barracuda. O que isso faz é basicamente apresentar um único IP para seus usuários se conectarem e encaminhar as solicitações para os servidores da web. Se um dos servidores ficar indisponível, ele não encaminhará mais tráfego para ele. Esta é a opção cara.
Serviços de balanceamento de carga de rede: Esta é uma tecnologia da Microsoft disponível no servidor Windows, que fornecerá um único IP clusterizado. Ele alcança o mesmo resultado que um balanceador de carga de hardware, mas de uma maneira diferente. Tudo que você precisa fazer é configurá-lo .
De http://www.unc.edu/atn/lsf/docs/7.0.5/lsf_config_ref/index.htm?hosts.5.html~main
Exemplo IPv4
Neste exemplo, hostA tem 2 endereços IP e 3 aliases. O alias hostB especifica o primeiro endereço e os aliases hostC e host-C especificam o segundo endereço. O LSF usa o nome oficial do host, hostA, para identificar que ambos os endereços IP pertencem ao mesmo host.
Minha sugestão é usar um servidor DNS interno com DNS round-robin e TTL=0. Se você atualizar o registro DNS (também com sistema automático de verificação de ip) quando um IP/servidor estiver inativo, você poderá ter um sistema de alta disponibilidade.
Eu fiz isso em uma rede doméstica onde atribuo IPs estáticos às interfaces de rede com e sem fio de um laptop e, no arquivo de hosts de outra máquina, aponte um único nome de host para esses dois endereços IP. Parece funcionar bem.
Com base neste exemplo, fiz o seguinte 10.18.yx 192.168.zx hostA
Onde hostA é o nome do host de um servidor que pretendo acessar tanto da rede interna (192.168.yx) quanto da VPN (10.8.zx).
Portanto, funciona bem e consigo fazer o samba funcionar através do VNP usando o nome do host, por isso não há problema em ter minhas unidades conectadas no Windows em ambos os casos (LAN ou VPN conectada).
Atenciosamente.
@ Plamen Dimitrov Você precisará de um dispositivo para lidar com esse tipo de equilíbrio, possivelmente um switch que possa lidar com BGP na frente de seu FW- ou use seu FW se for capaz. Se seus Ciscos lidam com BGP, procure implementá-lo. Dessa forma, você pode ter o IP de ambos os ISPs entrando no Cisco/ou switch e os servidores de destino teriam IPs válidos de IPs públicos de 24 bits (diferente dos 2 IPs de ISP). Nesse ponto (você está usando 3 blocos de IP públicos diferentes, aquele para seus servidores DEVE SER 24 BIT), você precisaria que cada um de seus ISPs conhecesse esta solução e eles teriam que estar dispostos a suportar o solução BGP entre eles, o que a maioria fará. Agora, quando seu FQDN for resolvido, ele será resolvido para seu bloco de IPs de 24 bits, mesmo que 1 linha de ISP fique inativa. O objetivo é, seus endereços de 24 bits estarão sempre disponíveis devido ao fato de seus ISPs concordarem em rotear esse endereço de 24 bits por meio de suas linhas. Isso também funciona para VPN, pois tudo o que você está usando para VPN são os endereços de 24 bits, não os IPs do ISP que você conectou ao seu Cisco/ou switch. Nesse ponto você tem que ter cuidado com o BGP FLAPPING, onde se suas linhas subirem e descerem muito, devido a uma linha ficar DOS, os endereços DNS mudarão tanto, na internet, que os servidores DNS REMOVERÃO AUTOMATICAMENTE OS IPs QUE LEVAM AO SEU BLOCO DE IPs DE 24 BITS. Isso é um ataque DOS em soluções BGP. Nesse ponto você tem que ter cuidado com o BGP FLAPPING, onde se suas linhas subirem e descerem muito, devido a uma linha ficar DOS, os endereços DNS mudarão tanto, na internet, que os servidores DNS REMOVERÃO AUTOMATICAMENTE OS IPs QUE LEVAM AO SEU BLOCO DE IPs DE 24 BITS. Isso é um ataque DOS em soluções BGP. Nesse ponto você tem que ter cuidado com o BGP FLAPPING, onde se suas linhas subirem e descerem muito, devido a uma linha ficar DOS, os endereços DNS mudarão tanto, na internet, que os servidores DNS REMOVERÃO AUTOMATICAMENTE OS IPs QUE LEVAM AO SEU BLOCO DE IPs DE 24 BITS. Isso é um ataque DOS em soluções BGP.
Um pequeno esclarecimento aqui, pelo menos no mundo Windows: Você PODE ter dois endereços IP para um único nome em um arquivo hosts. Quando consultados, todos os endereços são retornados. O aplicativo (ou seja, o navegador) tentará se conectar a cada um deles até que uma conexão seja feita. IOW, ele tentará todos os endereços antes de expirar. (Este é um mal-entendido comum, pois muitas pessoas acreditam que ele tentará apenas o "primeiro" endereço.)
Você pode verificar isso com o seguinte experimento:
Adicione dois ou mais endereços para um host no arquivo hosts, um real e os outros falsos. (Faça os endereços falsos menores em ordem alfabética.) Abra um navegador e tente se conectar ao nome do host. Execute netstat -no ao mesmo tempo. Você deve ver tentativas de conexão com o endereço falso. (preso em SYN_SENT) O navegador eventualmente chegará ao endereço correto e se conectará. Há um atraso na conexão, mas vai funcionar.
Você não pode fazer isso com o arquivo hosts.
Você também não pode fazer isso com o DNS: você pode servir vários IPs para um único nome, mas o navegador escolherá apenas um desses vários IPs, tente e, se esse host estiver inativo, o navegador exibirá um erro de conexão .
Uma solução possível é configurar um servidor proxy e configurar esses dois IPs como os pais do domínio que eles atendem. Pelo menos no caso do Squid, o proxy tentará um servidor e, se falhar, tentará o segundo servidor. Em seguida, configure seu navegador para usar este servidor proxy.