Como implementar GeoDNS usando o Bind

Ontem a noite um colega de lista de discussão me perguntou se eu conhecia uma forma simples de implementar a funcionalidade de GeoDNS no Bind, isto é, se eu sabia como fazer o Bind resolver um mesmo nome de host com um endereço IP diferente dependendo do pais de origem do usuário que está consultando o servidor de DNS.

Essa funcionalidade quando implementada adequadamente permite ao administrador distribuir o trafego dos seus usuários entre vários servidores e mesmo entre mais de um data center, usando como critério de segmentação o pais ou até mesmo a cidade do usuário final, é fácil de imaginar o que se pode fazer com essa “flexibilidade” 🙂

Como achei que o assunto poderia interessar a outras pessoas estou colocando aqui a dica que dei a ele de um site http://phix.me/geodns no qual está disponível um tutorial bem detalhado de como implementar essa funcionalidade no Bind através do uso de ACLs.

Para o caso do site acima sair do ar no futuro, eu coloquei uma cópia do script disponibilizado no tutorial e que é responsável pela geração das ACLs a partir do banco de dados gratuito da Maxmind disponível para download neste link, a diferença entre o banco de dados pago e o gratuito é basicamente a frequência de atualização.

O script em questão gera ACLs para GeoDNS por pais, se precisar fazer por cidade você vai precisar fazer alguns pequenos ajustes, mas não é nada do outro mundo se você está acostumado com scripts em awk.

O processo em si de configuração do bind depois de gerado o arquivo com as ACLs é simples, basta incluir o arquivo na configuração do Bind inserindo no named.conf a linha abaixo:

include "/path/to/GeoIP.acl";

E depois seguir o exemplo la do tutorial para criar um view no named.conf para cada grupo geográfico que você quiser segmentar, no exemplo ele cria uma view para a América do Norte, uma view para a América do Sul, e uma view para o resto do mundo:

view "north_america" {
  match-clients { US; CA; MX; };
  recursion no;
  zone "example555.com" {
    type master;
    file "pri/example555-north-america.db";
  };
};

view "south_america" {
  match-clients { AR; CL; BR; PY; PE; EC; CO; VE; BO; UY; };
  recursion no;
  zone "example555.com" {
    type master;
    file "pri/example555-south-america.db";
  };
};

view "other" {
  match-clients { any; };
  recursion no;
  zone "example555.com" {
    type master;
    file "pri/example555-other.db";
  };
};

Como podem perceber a configuração do Bind em si é simples depois que o script disponibilizado pelo Mark automatiza a geração de um arquivo de ACL contendo as classes IP de cada pais 🙂

Bom divertimento

[]´s Edson

PS. Se preferir pegar o arquivo de ACL pronto, eu coloquei uma cópia do arquivo gerado hoje 06 de maio de 2010, disponível para download neste link.

Comments are closed.