Usando entradas de DNS para determinar a localização

4

Estou tentando pensar em uma maneira limpa de determinar a localização das máquinas (principalmente, a que data eles pertencem) com base em suas configurações de rede.

Eu gostaria que fosse dinâmico, e estou pensando em usar registros DNS especiais que seriam específicos para o servidor DNS em cada datacenter.

Por exemplo, você poderia ter:

root@machine1# dig TXT mysite
...
mysite      3600    IN  TXT "DC1"
...
root@machine2# dig TXT mysite
...
mysite      3600    IN  TXT "DC2"
...

etc.

Eu sei que o DNS tem um registro LOC especial para localização, mas é preciso coordenadas, então não ajuda no meu caso. Existe uma maneira padrão de resolver esse problema, outro tipo especial de registro para ele ou algumas entradas padrão em TXT registros?

    
por ℝaphink 20.03.2012 / 21:42

11 respostas

2

(Primeiro, desculpe-me por não concordar com a sua pergunta.) IMHO, aparentemente, o lugar certo para essas informações de configuração do host é DHCP. DHCP pretendido para fornecer a um cliente todas as informações necessárias para usar vários serviços disponíveis em uma sub-rede.

Você pode usar alguma opção DHCP padrão, e eu acho domain-name o mais próximo dos seus propósitos. Você pode usar algo assim em seu servidor DHCP :

   option domain-name DC1;
   option domain-name dc1.example.org;

Como alternativa (e provavelmente ainda melhor), o DHCP permite opções específicas do site , você pode definir um Opção DHCP nomeada, diga a opção site-name do tipo text (também requer algum código de opção numérico) da seguinte forma:

   option site-name code 222 = text;
   option site-name "DC1";

No cliente DHCP, você define esse código de opção, solicita a opção e assa um pouco do script /etc/dhcp/dhclient-enter-hooks onde você realmente o usa.

EDITAR : nas distribuições recentes, dhclient-enter-hooks não é mais chamado, em vez disso, coloque seu script na pasta /etc/NetwokManager/dispatcher.d/ ., assim:

#!/bin/sh
# save me as /etc/NetwokManager/dispatcher.d/02test

printenv >>/tmp/dhcp-env

Quando o DHCP obtiver uma concessão, você verá todas as suas variáveis DHCP lançadas no / tmp / dhcp-env.

Talvez seja melhor definir todos os nomes de impressoras, servidores apt etc., cada um em uma opção DHCP separada, em vez de apenas identificar o datacenter, mas armazenando toda a configuração relevante no cliente.

Se você optar por usar o DNS de qualquer maneira , considero sua TXT uma boa opção, não sei de nada definido para esse fim, exceto talvez para esta opção: server-id em named.conf : O ID que o servidor deve reportar ao receber .... a consulta do nome ID.SERVER com o tipo TXT, classe CHAOS.

ou seja, no seu named.conf você define

server-id DC1; //or DC2 etc.

A Sorta pretendia identificar com qual servidor DNS eu estava conversando, o que é muito parecido com o que você precisa.

    
por 05.04.2012 / 20:26
1

O DNS é um local muito estranho, se você quiser colocá-lo em texto livre.

Da sua descrição, deduzo que há rotinas de configuração automatizadas que diferem de data center para data center (já que usam servidores DNS primários diferentes).

O que estou fazendo - e esta é minha recomendação para você - funciona de forma independente do sistema operacional: defina o SNMP-SysLocation durante a instalação automatizada e ative o SNMPD. Se você tiver servidores multi-homed (ou seja, muitas conexões de rede diferentes), também poderá ter uma rede administrativa separada. Configure o snmpd para escutar nessa rede usando a diretiva "AgentAddress" no snmpd.conf.

    
por 20.03.2012 / 22:30
1

Se você quiser algo mais simples, apenas texto, como "EUA / IL / Chicago / 1060 W Addison St / andar 1 / rack 2", use registros TXT. É para isso que eles são. Script-lo usando DNS dinâmico, se necessário. TXT pode estar em DNS de encaminhamento anexado a nomes de host, ou DNS reverso anexado a endereços IP ou até sub-redes inteiras (o que pode fazer mais sentido para o seu caso).

    
por 06.04.2012 / 16:13
0

Como é a estrutura numérica da sua rede? Contanto que você não esteja compartilhando sub-redes entre locais, você pode usar um arquivo de texto que mapeia uma sub-rede para um datacenter. Poderia até mesmo fazer script simples para procurar o nome e, em seguida, grep o arquivo com o endereço IP da pesquisa. 10.11.0.0 Datacenter1
10.12.0.0 Datacenter1
10.13.0.0 Datacenter1
10.51.0.0 Datacenter2
10.52.0.0 Datacenter2
10.53.0.0 Datacenter2
Agora você diz "principalmente" localização .... se você quiser linhas, racks, caixas, slots ... é uma besta diferente, onde a resposta sobre o SNMP-SysLocation seria melhor.

    
por 26.03.2012 / 23:06
0

Eu pessoalmente não recomendaria o uso do DNS, pois é um serviço gerenciado centralmente, o que significa que, se um servidor muda de local, você precisa atualizar as informações de localização no servidor DNS e não conseguir controlá-lo no sistema sendo movido.

Se, em todos os sistemas que você está gerenciando, você puder executar o SNMP e souber que as configurações SNMP permitem que você armazene um local do sistema (acredito que eles deveriam, como Nils mencionou), você poderia executar o SNMP e ter os sistemas armazene uma entrada de localização lá. Isso seria um pouco melhor, pois você pode controlar a localização do servidor no próprio servidor - se ele se mover, você poderá alterar a localização facilmente e, se o servidor estiver desativado, você não obterá informações desatualizadas. No entanto, existe o problema de que, se o SNMP estiver desativado, você não saberia onde o servidor está, já que não seria possível consultar o SNMP.

Acredito que sua melhor escolha para gerenciar esse tipo de informação corretamente seria usar um sistema de gerenciamento de ativos de DC - sobre qual deles, isso seria com você (há muito por onde escolher).

    
por 04.04.2012 / 03:25
0

Se tudo que eu tive que trabalhar é DNS, eu provavelmente olharia para a criação de um registro srv para cada servidor DNS para gravar o local que você poderia recuperar, mas algo como o diretório ativo seria uma solução muito melhor

    
por 04.04.2012 / 06:25
0

Apenas uma teoria aqui, e eu não sou um cara de linux. Se fosse o windows, eu simplesmente configuraria a atualização dinâmica do DNS em um único NIC específico que eu sei que estaria sempre conectado à rede "x" e desabilitaria atualizações dinâmicas no outro NIC. Então eu saberia pelo IP como o servidor se move onde está localizado.

No entanto, uma vez que parece que você não tem essa opção, uma coisa que você poderia olhar em um pearl scirpt (como exemplo) que atualiza um arquivo CSV / TXT ou talvez até DNS.

O script básico seria:

  1. Você tem uma lista centralizada de datacenter para mapeamento IP avaialbe para todos os servidores consultarem.
  2. Seu servidor seria configurado com um script local que é executado diariamente e verificar seus IPs de NIC e ver se algum IP corresponde a uma determinada sub-rede.
  3. se corresponder a ele atualiza um CSV / TXT / DNS com seu nome e local do datacenter.

IMO, o que pode ser melhor, é ter um servidor central usando um script para procurar um servidor pelo nome e descobrir seu IP e, em seguida, associá-lo a um datacenter e armazená-lo em um CSV. Execute uma vez por dia e crie um novo CSV diariamente. Portanto, tudo o que você precisa fazer com o DNS é simplesmente certificar-se de que o registro A esteja correto para os servidores que são movidos.

Editar 1:

A outra coisa que eu não acho que você tenha coberto é, como você está planejando lidar com a remoção de um registro depois que um servidor se move? Você vai definir um limite de idade no registro para que seja excluído se não for atualizado em "x" dias? Isso seria outra vantagem de usar apenas um CSV centralizado simples. Você pode até usar esse CSV centralizado para atualizar o DNS diariamente.

    
por 05.04.2012 / 17:58
0

Na verdade, eu configurei isso em nossos datacenters:

  1. todos os servidores têm uma lista de pesquisa padrão, exceto; cada datacenter é atribuído um domínio específico diferente do datacenter; ou seja, www2.example, www3.example
  2. esse domínio é colocado primeiro no lista de pesquisa

advertências:

  1. nenhuma resolução deve estar presente no domínio específico do DC e em qualquer outro domínio; resolução de problemas torna-se um verdadeiro pesadelo
  2. usando esse método, você deve manter vários domínios internos

Isso provou ser um método muito eficaz de permitir que os desenvolvedores criem código idêntico que é tratado de forma diferente com base no local da chamada (servidor). Por exemplo, o link pode ser direcionado para um endereço IP totalmente diferente (no nosso caso

    
por 06.04.2012 / 15:00
0

Existe uma resposta interessante e real no stackoverflow, que descreve como fazer isso:

MaxMind Geolite city is free. If it is not good enough, you can apparently upgrade to a more accurate paid-version. I can't speak for the quality of the paid version, as I have never used it.

If you like your SQL, download the CSV version. Load it into your database of choice, and query away.

The faster and space-efficient option is to download the file binary blob version of the same database, and then use the C# class to query it.

Alternatively, I have found ipinfodb.com to be useful. Query is by simple HTTP GET. For example, to geolocate stackoverflow.com try:

http://ipinfodb.com/ip_query.php?timezone=false&ip=69.59.196.211

link

Basicamente, você pode obter essas informações usando o seguinte comando:

curl http://ipinfodb.com/ip_locator.php?ip=stackoverflow.com

Em seguida, analise a saída da resposta:

 <ul>
    <li>IP address : <strong>64.34.119.12</strong></li>
    <li>Country : US <img src="/img/flags/us.gif"/></li>
    <li>State/Province : CALIFORNIA</li>
    <li>City : SANTA CLARA</li>
    <li>Zip or postal code : 95050</li>
    <li>Latitude : 37.354108</li>
    <li>Longitude : -121.955236</li>
    <li>Timezone : -08:00</li>
    <li>Local time : April 6 13:23:41</li>
    <li>Hostname : stackoverflow.com</li>
</ul>

Aqui, este comando retira os detalhes:

curl http://ipinfodb.com/ip_locator.php?ip=stackoverflow.com|grep "<li>.*: "
    
por 06.04.2012 / 23:20
0

Dê uma olhada no LLDP . Ele deve ser capaz de informar a que switch / roteador está um servidor específico. A partir daí, você pode dizer em que datacenter está (baseado em seu nome ou pode armazenar alguns metadados adicionais sobre ele)

    
por 07.04.2012 / 01:46
0

Você pode encontrar esta patente de interesse. Eu acredito que foi permitido expirar. link No caso de link rot google "Patente Paul Brabban".

ABSTRACT An apparatus and method for tracking physical locations from which a service is provided are disclosed. The apparatus comprises a communication module operable to send and receive messages, a location identifier and a query element operable to request the communication module to send a location request message for a service. The communication module is operable to receive a location response message responsive to said location request message, said location response message comprising location information for the service; and forward the location information of the service to the location identifier. The location identifier is operable to identify the physical location associated with the location information of the service.

    
por 14.06.2017 / 10:25