Registramos alguns servidores de nomes para resolução de DNS em nosso site, implantado em vários datacenters.
Nossa estratégia atual de resolução de DNS é que, com base nos diferentes endereços IP do cliente, o servidor de nomes retornará endereços IP diferentes para o mesmo domínio. Por exemplo, se o endereço IP do cliente for da América do Norte, o servidor de nomes retornará um endereço IP, que é o endereço IP do nosso data center na América do Norte.
Mas o endereço IP do cliente às vezes não é o endereço IP real dos usuários. Pode ser um endereço IP do DNS que pertence a um ISP ou a um servidor proxy. Por outro lado, se um de nossos datacenters estiver inativo, queremos que nosso servidor de nomes exclua o endereço IP que pertence ao datacenter com falha. Portanto, esperamos poder obter uma estratégia mais dinâmica para nossa resolução de DNS. Existe uma solução para isso?
Respostas:
Parece que você quer anycast. Esse é o tipo de coisa que sites como o Google usam. Você tem um único endereço (resolvido pelo DNS) para todos os seus sites e permite que o BGP direcione os usuários ao site mais próximo (pelo protocolo de roteamento). Se um site for desativado, o próximo site mais próximo será colocado na tabela de roteamento da Internet automaticamente pelo BGP.
O exemplo clássico é
8.8.8.8
para DNS. Ele é resolvido para diferentes locais ao redor do mundo e, se um local ficar inativo, será direcionado para o próximo local mais próximo.A resposta não é DNS, é roteamento.
fonte
O que você precisa é exatamente o que o serviço DNS do Amazon Route53 oferece:
Roteamento baseado em latência - direcione os usuários finais para a região da AWS que fornece a menor latência possível.
DNS geográfico - direcione os usuários finais para um ponto de extremidade específico especificado com base na localização geográfica do usuário final.
Verificações de integridade e failover - O Amazon Route 53 pode monitorar a saúde e o desempenho do seu aplicativo, bem como de seus servidores Web e outros recursos.
... e muitos outros recursos avançados de DNS .
Você não precisa hospedar seu site na AWS para poder usar o Route53; ele funcionará com os serviços implantados em centros de dados privados.
A menos que você seja um preço no Facebook ou no Google, também não deve ser um problema, a partir de US $ 0,40 por milhão de solicitações (consulte os detalhes do preço ).
Espero que ajude :)
fonte
Eu tive essa ideia e comecei a codificá-la, mas nunca terminei, pois a necessidade evaporou primeiro.
O servidor DNS possui os nomes de host e endereços MAC de todas as máquinas em sua LAN e uma maneira de alcançá-los. Quando recebe uma solicitação de uma máquina que conhece, envia um ARP reverso para o endereço IP, dado o endereço MAC e usa a resposta para construir a resposta DNS.
Isso não tem nada a ver com o que você está tentando fazer, mas ilustra o ponto. Um servidor DNS pode, em teoria, ser codificado para executar qualquer esquema novo que você queira resolver nomes para endereços IP.
A questão real parece ser como obter o endereço IP do cliente para decidir para onde enviá-lo. Este é um pequeno problema de XY. O que você realmente deseja é que o ISP do cliente faça a geolocalização, e você pode obtê-lo diretamente do endereço IP que faz a solicitação, supondo que não seja 8.8.4.4 ou algum outro serviço de redirecionamento de DNS. Na minha opinião, a melhor solução para os redirecionadores de DNS é ignorar o problema e fazer uma geolocalização auto-relativa (ou seja, do servidor DNS tentar localizar o endereço IP de chamada) e redirecionar adequadamente. Veja aqui como obter a localização geográfica: /programming/2574542/location-detecting-techniques-for-ip-addresses
Você realmente não quer anycast aqui, mas algo mais são. O Anycast tem a propriedade irritante, pois pode redirecionar pacotes no meio do seu fluxo TCP, causando confusão em massa.
Ron Maupin afirma que o anycast é confiável para o TCP. Aqui está o traceroute mostrando o contrário:
Se você tentar geolocalizar os endereços IP upstream da maneira óbvia, obtém os dois em Wichita. Isso não está correto, pelo qual uma simples demonstração de física será suficiente.
O intervalo para 8.8.4.4 é medido em 30ms, dos quais os primeiros 18ms são a penalidade local (o salto 3 é o roteador local do meu ISP). Minha distância para Wichita é de 1297 milhas. O tempo mínimo de ida e volta é, portanto, (225.000 quilômetros por segundo (velocidade da luz no vidro)), que é de 18,55ms. Portanto, eu não deveria receber resposta mais rápido que 28ms, mas recebi uma resposta em 25ms.
Os pacotes estão chegando ao Google por duas rotas BGP diferentes. BGP não escolheu o mais próximo.
fonte
O que você precisa pode ser alcançado com alguma combinação de DNS anycast e RFC-7871.
fonte