La solution fut portée sur PowerDNS et le module GeoBackend pour la géolocalisation des internautes.
PowerDNS est actuellement utilisé parmi de nombreux registrars de domaine et également Wikimédia qui utilise GeoBackend.
De plus, PowerDNS fonctionne aussi bien sous Windows que Linux, par contre, il y a plus de documentations sous Linux que sous Windows pour le module GeoBackend. Il faut également penser que le module GeoBackend doit être compilé avec Visual C++ sous Windows alors que sous Linux tout cela est automatique.
La solution est entièrement gratuite, le système d’exploitation est Linux Debian version Etch 4.0, la base de données est MySQL version 5.0, le serveur Internet est basé sur Apache 2.0, le tout administré avec un logiciel gratuit Windows : Putty.
BIND propose également un module de géolocalisation mais il n’a pas été remis à jour depuis 2004 donc cette solution ne fut pas sélectionnée. Il existe d’autres systèmes, par exemple des géo balancers matériels qui se chargent de rediriger les internautes, malheureusement ce type de matériel est très onéreux.
Ce tutorial est issu d’un de mes rapports de stage en 2007. Et à l’époque j’utilisais « nano » au lieu de « vi »
Installation de PowerDNS
En ligne de commande, exécutez sur votre serveur :
apt-get install pdns-backend-geo pdns pdns-backend-mysql cd /etc/powerdns/
Pour connaître la version utilisée, exécutez :
/usr/bin/pdns_control version
Pour démarrer PowerDNS :
/etc/init.d/pdns stop /etc/init.d/pdns monitor
Configuration de PowerDNS
Comme tout programme sous Linux, il faut modifier les fichiers de configuration
nano /etc/powerdns/pdns.conf local-address=0.0.0.0 # répond à toutes les IP qui l’interroge local-port=53 # écoute sur le port 53 recursor=127.0.0.1:5300 # les requêtes récursives sont renvoyés au localhost port 5300 allow-recursion=127.0.0.1 172.20.0.0/16 # autorise seulement le localhost et les adresses IP internes à utiliser les requêtes récursives
PowerDNS doit répondre à tous les IP donc le paramètre « local-address=0.0.0.0 », le port par défaut du DNS est 53 « local-port=53 ». Pour les requêtes récursives, le module recursor écoute sur le port 5300 et les requêtes seront traitées par lui-même. Pour des raisons de sécurité, les requêtes récursives ne sont autorisées que pour les IP locales.
Configuration des requêtes récursives
nano /etc/powerdns/recursor.conf local-address=127.0.0.1 # écoute sur l’IP local local-port=5300 # écoute sur le port 5300 allow-from=127.0.0.0/8 # autorise seulement le localhost à utiliser le serveur recursor
Pour des raisons de sécurité, les requêtes récursives ne sont autorisées que pour les IP locales.
Une fois configuré, il faut démarrer le démon pour charger les fichiers de configuration.
Démarrage de recursor :
/etc/init.d/pdns-recursor start
Démarrage de pdns pour voir l’état de l’application en temps réel (pratique pour déboguer en temps réel dans la console Shell) :
/etc/init.d/pdns monitor
Ces informations sont essentielles pour vérifier le bon fonctionnement de l’application mais également pour la dépanner. Voici un exemple de logs :
Jul 11 10:22:08 This is a standalone pdns Jul 11 10:22:08 It is advised to bind to explicit addresses with the --local-address option Jul 11 10:22:08 UDP server bound to 0.0.0.0:53 Jul 11 10:22:08 TCP server bound to 0.0.0.0:53 Jul 11 10:22:08 PowerDNS 2.9.20 (C) 2001-2006 PowerDNS.COM BV (Mar 10 2007, 00:36:58, gcc 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) starting up Jul 11 10:22:08 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2. Jul 11 10:22:08 Set effective group id to 109 Jul 11 10:22:08 Set effective user id to 108 Jul 11 10:22:08 DNS Proxy launched, local port 48069, remote 127.0.0.1:5300 Jul 11 10:22:09 Creating backend connection for TCP Jul 11 10:22:09 About to create 3 backend threads for UDP % Jul 11 10:22:09 Done launching threads, ready to distribute questions Jul 11 10:22:15 Distributor misses a thread (4
Comme PowerDNS fonctionne sous forme de démon (similaire au « service » sous Windows), il est possible de l’exécuter sans afficher les logs en temps réel :
/etc/init.d/pdns start
Test du bon fonctionnement du serveur PowerDNS
Une fois installé, il faut tester le bon fonctionnement du serveur DNS. Nous allons taper les commandes recommandées dans la documentation (http://doc.powerdns.com/testing.html) :
host www.example.com 127.0.0.1
PowerDNS résout l’URL www.example .com pour nous retourner l’IP du domaine.
dig www.example.com A @127.0.0.1
Le serveur DNS nous retourne l’enregistrement de type A pour le domaine www.example.com qui a pour IP : 208.77.188.166 ce qui est correct.
Activation des logs
Les logs sont très importants et permettent de résoudre pas mal de problèmes de configuration mais également de bien vérifier que tout fonctionne correctement.
Il faut décommenter les lignes « logfile » et « loglevel » :
nano /etc/powerdns/pdns.conf
Attention, le « loglevel=7 » retourne un très grand nombre de ligne et ne doit servir que pour les tests ! Une fois les tests réussis, il faut remettre « loglevel=3 ».
Ensuite, il faut modifier le fichier « recursor.conf » avec « nano /etc/powerdns/recursor.conf » et rajouter la partie LOG :
L’argument « logging-facility=0 » permet de spécifier le format de sortie pour SYSLOG du système d’exploitation.
Pour récupérer les logs et remplir le fichier dédié à PowerDNS, il faut configurer syslog :
nano /etc/syslog.conf
On rajoute cela dans le fichier :
Puis on redémarre le démon syslog :
/etc/init.d/sysklogd restart
ainsi que les démons de PowerDNS
/etc/init.d/pdns-recursor restart
et
/etc/init.d/pdns restart
Pour visualiser les logs, il faudra faire :
tail -f /var/log/pdns.log
Installation de la Base de données
La base de données MySQL va contenir les domaines, les IP, c’est-à-dire toutes les informations nécessaires qui servent à définir un nom de domaine. Il est possible d’utiliser une autre base de données tel qu’Oracle ou SQL Server mais le choix de MySQL fut adopté : éprouvé et gratuit.
Installation de MySQL
On commence donc par installer le module mysql de PowerDNS :
apt-get install pdns-backend-mysql
Il faut créer un utilisateur, spécifier un mot de passe (pdnstest dans notre exemple) et lui donner les droits pour qu’il puisse se connecter à la base.
mysql -u root –p CREATE USER ‘u_pdnstest’@’localhost’ IDENTIFIED BY 'pdnstest' #CREATE USER ‘u_pdnstest’@’localhost’; CREATE DATABASE pdnstest; GRANT ALL PRIVILEGES ON pdnstest.* TO 'u_pdnstest'@'localhost'; exit
On vérifie la bonne connexion de l’utilisateur :
mysql –u u_pdnstest -p
On rentre le mot de passe « pdnstest ». Il faut obtenir cela :
On quitte toujours en tapant « exit ; ».
Pour que PowerDNS puisse utiliser la base MySQL, il faut rajouter cela dans le fichier « pdns.conf » :
launch=gmysql gmysql-host=127.0.0.1 gmysql-user=u_pdnstest gmysql-dbname=pdnstest gmysql-password=pdnstest
On commente la partie de tests d’avant : « launch=bind » et « bind-example-zones » pour que PowerDNS charge le module MySQL.
Création des tables MySQL
PowerDNS utilise une base de données (MySQL dans notre cas mais cela peut être Oracle, DB2, etc.) pour stocker les noms de domaines, les zones, etc. Pour cela, il faut tout d’abord créer la structure de la base de données, car lors de l’installation, les tables ne sont pas installées ce qui nous permet de choisir notre SGBDR.
Voici ce qu’il faut exécuter sur le serveur MySQL pour créer les tables :
create table domains ( id INT auto_increment, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INT DEFAULT NULL, account VARCHAR(40) DEFAULT NULL, primary key (id) )type=InnoDB; CREATE UNIQUE INDEX name_index ON domains(name); CREATE TABLE records ( id INT auto_increment, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(6) DEFAULT NULL, content VARCHAR(255) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, change_date INT DEFAULT NULL, primary key(id) )type=InnoDB; CREATE INDEX rec_name_index ON records(name); CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); create table supermasters ( ip VARCHAR(25) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) DEFAULT NULL );
On relance PowerDNS pour vérifier la bonne connexion du serveur DNS à la base de données MySQL :
/etc/init.d/pdns monitor
Voici le résultat de la commande :
debian:~# /etc/init.d/pdns monitor Jul 12 17:46:32 This is module gmysqlbackend.so reporting Jul 12 17:46:32 This is a standalone pdns Jul 12 17:46:32 It is advised to bind to explicit addresses with the --local-address option Jul 12 17:46:32 UDP server bound to 0.0.0.0:53 Jul 12 17:46:32 TCP server bound to 0.0.0.0:53 Jul 12 17:46:32 PowerDNS 2.9.20 (C) 2001-2006 PowerDNS.COM BV (Mar 10 2007, 00:36:58, gcc 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) starting up Jul 12 17:46:32 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2. Jul 12 17:46:32 Set effective group id to 109 Jul 12 17:46:32 Set effective user id to 108 Jul 12 17:46:32 DNS Proxy launched, local port 42771, remote 127.0.0.1:5300 Jul 12 17:46:32 Creating backend connection for TCP % Jul 12 17:46:32 gmysql Connection succesful Jul 12 17:46:32 About to create 3 backend threads for UDP Jul 12 17:46:32 Launched webserver on 0.0.0.0:8081 Jul 12 17:46:32 gmysql Connection succesful Jul 12 17:46:32 gmysql Connection succesful Jul 12 17:46:32 gmysql Connection succesful Jul 12 17:46:32 Done launching threads, ready to distribute questions Jul 12 17:46:48 Distributor misses a thread (4
La partie « gmysql Connection succesful » nous confirme la bonne connexion entre les deux.
Résolution de quelques noms de domaines
Pour tester le bon fonctionnement du serveur DNS, il suffit de rajouter l’IP du serveur et d’exécuter quelques pings vers example.com, perdu.com, etc. pour générer du trafic et des résolutions de requêtes.
Voici une vue des logs, après les pings :
tail -f /var/log/pdns.log Jul 16 11:49:31 Query: select content,ttl,prio,type,domain_id,name from records where name='perdu.com' Jul 16 11:49:31 Query: select content,ttl,prio,type,domain_id,name from records where name='*.com' Jul 16 11:49:31 gmysql Connection succesful Jul 16 11:50:04 Distributor misses a thread (4
Activation du serveur WEB de PowerDNS
PowerDNS contient un serveur Internet intégré pour afficher les requêtes que le serveur a traitées et permet de faire des statistiques.
Tout d’abord, il faut modifier le fichier de configuration pdns.conf pour l’activer. Voici mes paramètres :
Quelques explications sur les paramètres :
- « webserver=yes » -> activation du serveur Internet
- « webserver-address=0.0.0.0 » -> permet d’accéder au serveur à partir de toutes les IP. Attention ! Il vaut mieux mettre l’IP de la machine qui doit accéder aux statistiques pour la sécurité
- « webserver-port=8081 » -> sélection du port pour accéder au serveur Internet
Ainsi, pour accéder au serveur Internet, il faut taper : http://IP_serveur_DNS:8081
Une fois les pings effectués, il est possible de se connecter au serveur Web activé pour visualiser les diverses requêtes :
On remarque les résolutions inversées « .in-addr.arpa » des divers noms de domaine. Ainsi, lors d’un ping sur le domaine example.com : « PING example.com (208.77.188.166) 56(84) bytes of data » possède comme IP 208.77.188.166, le serveur DNS retourne l’adresse inversée « 166.188.77.208.in-addr.arpa ».
La liste des IP qui ont demandé des résolutions d’adresses sont loguées et des pourcentages sont visibles ce qui permet de connaître les IP qui sollicitent le plus le serveur DNS.
Test de divers serveurs DNS :
apt-get install zonecheck
Configuration des domaines dans la base de données MySQL
Quelques commandes sont à réaliser d’après la documentation :
« host www.test.com 127.0.0.1 » retourne « www.test.com has address 208.48.34.132 »
Il faut ajouter des enregistrements dans la base de données Mysql en exécutant en ligne de commande les lignes ci-dessous :
mysql -u u_pdnstest -p INSERT INTO domains (name, type) values ('test.com', 'NATIVE'); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'test.com','localhost ahu@ds9a.nl 1','SOA',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'test.com','dns-us1.powerdns.net','NS',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'test.com','dns-eu1.powerdns.net','NS',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'www.test.com','199.198.197.196','A',120,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'mail.test.com','195.194.193.192','A',120,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'localhost.test.com','127.0.0.1','A',120,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'test.com','mail.test.com','MX',120,25); exit;
Maintenant, la requête « host www.test.com 127.0.0.1 » retourne « www.test.com has address 199.198.197.196 » ce qui correspond à l’IP renseigné dans la base de données pour le nom de domaine www.test.com.
Et la requête « host mail.test.com 127.0.0.1 » retourne « mail.test.com has address 195.194.193.192 » ce qui est correct puisqu’issue de la base de données.
Installation et configuration de la Géolocalisation
Sous Debian, l’installation du GeoBackend ne comporte pas de souci particulier :
apt-get install pdns-backend-geo
Le module geobackend permet de connaître le continent de l’internaute suivant son adresse IP. Il sera possible de rediriger cette internaute sur les serveurs choisis.
Il existe plusieurs modules disponibles en tapant : « apt-cache search pdns »
Il faut modifier le fichier de configuration pour intégrer le nouveau backend : « nano /etc/powerdns/pdns.conf »
Pour tester la géolocalisation, le domaine utilisé est « testrepartition.com ».
# The geobackend launch=geo # The zone that your geo-balanced RR is inside of. The whole zone has to #be delegated to the PowerDNS backend, so you will generally want to make #up some subzone of your main zone. geo-zone=geo.testrepartition.com # The only parts of the SOA for "geo.telepulse.net" that apply here are the # master server name and the contact address. geo-soa-values=dns.testrepartition.com, webmaster@testrepartition.com # List of NS records of the PowerDNS servers that are authoritative for #your GLB zone. geo-ns-records=dns.testrepartition.com # The TTL of the CNAME records that geobackend will return. Since the same # resolver will always get the same CNAME (apart from if the director-map # changes) it is safe to return a reasonable TTL, so if you leave this # commented then a sane default will be chosen. #geo-ttl=3600 # The TTL of the NS records that will be returned. Leave this commented if #you don't understand. #geo-ns-ttl=86400 # This is the real guts of the data that drives this backend. This is a #DNS zone file for RBLDNSD, a nameserver specialised for running large DNS #zones typical of DNSBLs and such. We choose it for our data because it is #easier to parse than the BIND-format one. # Anyway, it comes from http://countries.nerd.dk/more.html - there are #details there for how to rsync your own copy. You'll want to do that #regularly, every couple of days maybe. We believe the nerd.dk guys take #the netblock info from Regional Internet Registries (RIRs) like RIPE, #ARIN, APNIC. From that they build a big zonefile of IP/prefixlen -> ISO-#country-pre mappings. geo-ip-map-zonefile=/etc/powerdns/zz.countries.nerd.dk.rbldnsd # And finally this last directive tells the geobackend where to find the #map files that say a) which RR to answer for, and b) what actual resource #record to return for each ISO country pre. The setting here is a comma-#separated list of paths, each of which may either be a single map file or #a directory that will contain map files. If you are only ever going to #serve one RR then a single file is probably better, but if you're going to #serve many then a directory would probably be better. The rest of this #documentation will assume you chose a directory. geo-maps=/etc/powerdns/geo-maps
« geo-ip-map-zonefile » retourne le pre du pays à partir d’une IP et « geo-maps » retourne un nom de pays à partir du pre du pays.
Récupération de la liste :
rsync -va rsync://countries-ns.mdc.dk/zone/zz.countries.nerd.dk.rbldnsd .
Ne pas oublier le « . » à la fin de la commande pour télécharger les données.
Attention à ne pas mettre de fichier tel que « zz.countries.nerd.dk.rbldnsd » dans le dossier geo-maps car le parseur recherche les variables « $RECORD » et « $ORIGIN » dans l’entête du fichier. L’erreur obtenu est : « [geobackend] Error occured while reading director file /etc/powerdns/geo-maps/zz.countries.nerd.dk.rbldnsd: $RECORD line empty or missing, georecord qname unknown ».
Tous les fichiers sont placés dans le dossier « /etc/powerdns ».
Une fois le dossier choisi : « /etc/powerdns/geo-maps » dans notre exemple, il faut respecter un format de fichier. Le début doit contenir « $RECORD », puis « $ORIGIN domaine.com. » puis un domaine par défaut.
$RECORD www # pour www.geo.testrepartition.com. $ORIGIN iso.testrepartition.com. #par défaut 0 geomain.testrepartition.com.
La suite comporte le nom du pays et le pre ISO. Par exemple, dans ce fichier se trouve :
# Belgium 56 eu
Le n°56 est le pre ISO de la Belgique. Le « eu » est nécessaire au module GeoBackend et lui indique la localisation de la Belgique qui se trouve dans l’Europe. Il répond par un enregistrement DNS de type CNAME « eu.iso.testrepartition.com ». Lorsque le module GeoBackend est correctement lancé, le message « 0 failures » apparait.
La suite est disponible à cette adresse : http://www.micro-gravity.com/data/300605/vip
Voici un screenshot :
Configuration des domaines dans la base de données MySQL
La base de données MySQL contient les renseignements sur le domaine tel que l’IP, les noms DNS, etc. Dans notre exemple, le domaine « testrepartition.com » est utilisé. Ainsi, il faut définir les noms DNS tel que « www.testrepartition.com » qui dépendra de « eu.iso.testrepartition.com », « us.iso.testrepartition.com » etc. Puis il faut définir les IP suivant le nom de domaine. Pour effectuer un bon load balancing DNS, il est nécessaire de fournir plusieurs IP pour chaque nom de domaine. Dès lors, la charge des serveurs sera répartie.
Configuration DNS – schema de type BIND
$TTL 38400 @ IN SOA dns.testrepartition.com. webmaster.testrepartition.com. ( 1607200701 ; N° série (yyyymmddnn) 10800 ; Rafraichissement (3 heures) 3600 ; Retry (1 heure) 604800 ; Expiration (1000 heures) 86400 ; Minimum (24 heures) ) ; IN NS dns.testrepartition.com. www IN CNAME www.geo dns IN A 172.20.1.1 geo IN NS dns ;geo IN CNAME us.iso ;pas besoin PowerDNS utilise le module Geo ;geo IN CNAME eu.iso ;pas besoin PowerDNS utilise le module Geo us.iso IN A 172.20.100.10 us.iso IN A 172.20.100.11 eu.iso IN A 172.20.100.20 eu.iso IN A 172.20.100.21 ; accès par défaut geomain IN A 172.20.100.10 geomain IN A 172.20.100.20
Installation dans la base de données (script MySQL)
Voici un exemple de script que j’ai réalisé :
INSERT INTO domains (name, type) values ('testrepartition.com', 'NATIVE'); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'testrepartition.com','dns.testrepartition.com web@testrepartition.com 1607200701 10800 3600 604800 86400','SOA',38400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'www.testrepartition.com','www.geo.testrepartition.com','CNAME',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'dns.testrepartition.com','172.20.1.1','A',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'geo.testrepartition.com','dns.testrepartition.com','NS',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'us.iso.testrepartition.com','172.20.100.10','A',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'us.iso.testrepartition.com','172.20.100.11','A',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'eu.iso.testrepartition.com','172.20.100.20','A',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'eu.iso.testrepartition.com','172.20.100.21','A',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'geomain.testrepartition.com','172.20.100.10','A',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, 'geomain.testrepartition.com','172.20.100.20','A',86400,NULL); exit;
Test de la résolution
Sur la machine où est installé PowerDNS, il est possible d’utiliser l’utilitaire « dig » qui va nous permettre de résoudre « www.testrepartition.com » avec l’IP local :
Si l’on utilise l’outil Windows « nslookup » à partir d’une autre IP, dans les logs de PowerDNS, une ligne apparait :
Jul 17 17:08:21 [geobackend] Serving www.geo.testrepartition.com CNAME geomain.testrepartition.com to 172.20.200.1 (0)
Puisqu’il s’agit d’une IP privée, le serveur DNS retourne l’internaute vers la zone par défaut : « geomain.testreparition.com », car le serveur ne trouve pas cette IP dans la liste d’IP par continent.
Il ne reste plus qu’à tester avec une IP publique.
Modification de la base des IP pour tester une IP privée
Pour l’instant, seul les IP publiques peuvent être testées, mais il est intéressant de modifier la base de données des IP pour faire passer une IP privée, pour une IP venant de l’Europe.
Ajout du masque d’IP privée « 172.20.0.0 » dans le fichier de référence :
nano /etc/powerdns/zz.countries.nerd.dk.rbldnsd
Ajout : 172.20.0.0/16 :127.0.0.250:fr
Dès qu’un test est effectué, par exemple d’une machine virtuelle qui possède l’IP 172.20.200.1 et qui a pour serveur DNS l’IP du serveur où est installé PowerDNS, on effectue un « nslookup » de www.testrepartition.com et dans les logs, la résolution est visible :
[geobackend] Serving www.geo.testrepartition.com CNAME eu.iso.testrepartition.com to 172.20.200.1 (250)
Le chiffre « 250 » signifie qu’il s’agit d’une IP provenant du continent 250 qui a pour nom « eu » :
Dès lors, la demande « www.testrepartition.com » est redirigé sur les serveurs « eu.iso » qui sont les serveurs européens.
Une fois les fichiers modifié, il n’est pas nécessaire de redémarrer le démon PowerDNS, il suffit de taper : « pdns_control rediscover ». Par contre, si vous avez exécuté PowerDNS avec « /etc/init.d/pdns monitor » et que l’on tente « pdns_control rediscover », alors une erreur apparait : « Fatal error: Unable to connect to remote ‘/var/run/pdns.controlsocket’: Connection refused ».
Il faut donc démarrer le démon avec « /etc/init.d/pdns start » puis « pdns_control rediscover » affichera « Ok ».
Configuration de la zone inverse in-addr.arpa
La résolution d’une IP en nom de domaine est possible en configurant la zone inverse in-addr.arpa.
Pour la mettre en place, il faut insérer de nouveaux enregistrements dans la base de données :
INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, '99.1.20.172.in-addr.arpa','dns.testrepartition.com web@testrepartition.com 1607200701 10800 3600 604800 86400','SOA',38400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, '99.1.20.172.in-addr.arpa','us.iso.testrepartition.com','PTR',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, '20.100.20.172.in-addr.arpa','eu.iso.testrepartition.com','PTR',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, '21.100.20.172.in-addr.arpa','eu.iso.testrepartition.com','NS',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, '10.100.20.172.in-addr.arpa','geomain.testrepartition.com','PTR',86400,NULL); INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (2, ' 11.100.20.172.in-addr.arpa','geomain.testrepartition.com','PTR',86400,NULL); exit;
Maintenant, il est possible de résoudre l’IP pour afficher le nom de domaine :
Dans cet exemple, le masque d’IP « 172.20.0.0 » est indiqué comme adresse américaine, dès lors, la résolution de l’adresse « 172.20.1.99 » retourne le nom DNS de la zone américaine, en l’occurrence « us.iso.testrepartition.com »
Test charge DNS
Pour tester la rapidité de résolution du serveur DNS, la création d’un petit script réalisant un nslookup est nécessaire. Deux versions ont été réalisées : l’une sous Linux et l’autre sous Windows.
Script Windows (.bat) :
@echo off :replay nslookup www.testrepartition.com Goto replay :FIN
Sous Debian (.sh) :
#!/bin/sh while true do nslookup www.testrepartition.com done
Bilan : 60 requêtes/sec -> 3% CPU
En extrapolant, il est possible de dire que le serveur DNS supporte 2000 requêtes par seconde sur ce type de test assez théorique.
Il faudra donc effectuer quelques tests réels et surveiller l’utilisation des ressources des divers serveurs.
Conclusion
La géolocalisation avec PowerDNS fonctionne très bien et se configure de manière assez simple sous Linux.
La priorité d’une telle solution est la base de données qui contient les IP et leur provenance classées par continent. En effet, si cette base est erronée ou incomplète, les internautes seront redirigés vers le lieu par défaut rendant la géo localisation inefficace. Ainsi, il faut que cette base soit le plus juste possible.
Il existe des bases effectuant la relation « IP vers continent » en vente sur Internet réalisées par des sociétés spécialisées ce qui permet de garantir un minimum la fiabilité des données.
Il est possible de faire évoluer cette solution en développant un petit module pour configurer simplement les données (nom de domaine, IP, etc.) qui se trouvent dans la base de données MySQL. Actuellement, la configuration est réalisée avec PHPMyAdmin qui permet de modifier la base de données de PowerDNS.
buy phenergan 100/50 phenergan 250/50 no prescription cheap phenergan amoxil price buy amoxil online buy amoxil online no prescription buy amoxicillin in usa there have been a ray of effects who have phased order Hydroxyzine ATARAX (Anxiolytique et antiallergique) : fiche medicament du Vidal de la famille precisant la composition, la posologie, les interactions possibles, les effets ... dapoxetine viagra combo dapoxetine walmart dapoxetine vs tramadol for pe Priligy without prescriptionorder dapoxetine