Comprobación del DNS desde un servicio externo

De WikiEtl
Saltar a: navegación, buscar

En ocasiones es de utilidad comprobar como se ve la información de nuestro DNS desde un servicio externo. Para ello se puede utilizar el siguiente servicio web www.checkdns.net.

Utilizando este servicio hemos habilitado un script en perl, que hemos llamado checkdns, que realiza una consulta a través del sitio web anterior, recoge el informe generado en formato html, y muestra por el registro del sistema las trazas de los errores del servicio de DNS detectado para un determinado dominio. El código perl para checkdns sería el siguiente:

 1 #!/usr/bin/perl
 2
 3 # goyo 14/12/2009
 4
 5
 6 my $dominio=$ARGV[0];
 7
 8 #my $url = 'http://www.checkdns.net/quickcheck.aspx?domain=it.uc3m.es';
 9 my $url = "http://www.checkdns.net/quickcheck.aspx?domain=$dominio";
10
11
12 use LWP::Simple;
13 use HTML::Parser;
14 use HTML::FormatText;
15
16 use Sys::Syslog qw( :DEFAULT setlogsock);
17
18 #$user = $ENV{'USER'};
19
20 my @timeData = localtime(time);
21
22 my $file = "/tmp/checkdns.$dominio.$timeData[5]$timeData[4]$timeData[3]$timeData[1]$timeData[0].html";
23
24 my $status = getstore($url, $file);
25
26 die "Error $status on $url" unless is_success($status);
27
28 open(IN, "<$file") || die "Can't open $file: $!";
29
30 setlogsock('unix');
31 openlog($0,,'user');
32
33 while (<IN>) {
34
35   if (m/LogError.GIF/) {
36
37
38     ($plain_text = $_) =~ s/<[^>]*>//gs;
39     ($plain_text = $plain_text) =~ s/\&nbsp\;//gs;
40     ($plain_text = $plain_text) =~ s/\r//gs;
41
42     #print "\t$plain_text";
43     syslog('err', "$dominio: $plain_text");
44
45
46   }
47 }
48
49 close(IN);
50 closelog;
51
52 unlink("$file");


El script recibirá como argumento el nombre del dominio cuyo servicio DNS se quiere analizar, y generara las trazas de error a traves del registro /var/log/syslog del sistema. Para automatizar la generación de informes hemos habilitado el fichero /etc/crond.d/checkdns con las siguientes entradas de ejemplo:

*/5 *   * * *   root    if [ -x /usr/local/bin/checkdns ]; then /usr/local/bin/checkdns it.uc3m.es 2>&1 
| tee -a /var/log /checkdns_error.log ; fi
*/5 *   * * *   root    if [ -x /usr/local/bin/checkdns ]; then /usr/local/bin/checkdns lab.it.uc3m.es 2>&1 
| tee -a /var/log/checkdns_error.log ; fi
*/5 *   * * *   root    if [ -x /usr/local/bin/checkdns ]; then /usr/local/bin/checkdns adm.it.uc3m.es 2>&1 
| tee -a /var/log/checkdns_error.log ; fi
*/5 *   * * *   root    if [ -x /usr/local/bin/checkdns ]; then /usr/local/bin/checkdns inv.it.uc3m.es 2>&1 
| tee -a /var/log/checkdns_error.log ; fi

Una línea por cada uno de los dominios que queremos monitorizar. Un ejemplo de salida a través del /var/log/syslog sería el siguiente:

Dec 15 06:36:32 trombon /usr/local/bin/checkdns: it.uc3m.es: Error fetching SOA from dns4.it.uc3m.es [163.117.140.166], ...
Dec 15 06:36:32 trombon /usr/local/bin/checkdns: it.uc3m.es: DNS server dns4.it.uc3m.es failed and will be dropped from ...
Dec 15 06:36:32 trombon /usr/local/bin/checkdns: it.uc3m.es: Zone version on dns2.it.uc3m.es is 2009192107, but on ...
Dec 15 06:36:32 trombon /usr/local/bin/checkdns: it.uc3m.es: Check that your secondaries are set up to load zone from primary.
Dec 15 06:36:32 trombon /usr/local/bin/checkdns: it.uc3m.es: Error connecting to mail server smtp02.uc3m.es ...
Dec 15 06:36:32 trombon /usr/local/bin/checkdns: it.uc3m.es: Error connecting to mail server smtp03.uc3m.es ...
Dec 15 06:36:32 trombon /usr/local/bin/checkdns: it.uc3m.es: Error connecting to mail server smtp01.uc3m.es ...
Dec 15 06:36:32 trombon /usr/local/bin/checkdns: it.uc3m.es: Some of your MX do not work properly