Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

DesarrolloEmuladoresInternetJuegosMultimediaSistema

Gestores de Descargas - XDMLectores de Noticias - Pan

Instalar Pdnsd desde cero




Instalar Pdnsd desde cero




Copyright

Copyright © José Luis Lara Carrascal  2010-2018   http://manualinux.eu



Sumario

Introducción
Preliminares
Instalación
Configuración
Configurar el inicio de Pdnsd
Pdnsd-ctl
Probar el rendimiento de Pdnsd con DNS Benchmark
Enlaces




Introducción  

Pdnsd es un servidor proxy caché de DNS permanente (el contenido de la caché se escribe en el disco duro al terminar el programa) que está diseñado para hacer frente a la caída de los servidores DNS proporcionados por el proveedor de acceso a internet, o en su lugar, los servidores DNS que tenga configurados el usuario en su sistema.

Al almacenar las direcciones IP de las páginas que visitamos de forma habitual en una caché ubicada en el disco duro, acelera de forma considerable el tiempo de respuesta en la solicitud de la página en cuestión, siendo éste prácticamente instantáneo. La mejor forma de probar todo esto, es comparar un sistema con Pdnsd y otro sin el mismo, puedo asegurar por experiencia propia que las diferencias son notorias.



Preliminares  

1) Comprobar que la ruta de instalación de los binarios del programa la tenemos en nuestro PATH


Abrimos una ventana de terminal y ejecutamos el siguiente comando:

[jose@Fedora-16 ~]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jose/bin

Si no aparece entre las rutas mostradas el directorio /usr/local/sbin, abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

export PATH=/usr/local/sbin:$PATH

Lo guardamos con el nombre variables.sh y lo instalamos en /etc/profile.d.

$ su -c "install -m755 variables.sh /etc/profile.d"

Tenemos que cerrar el emulador de terminal y volverlo a abrir para que la variable de entorno aplicada sea efectiva. Es conveniente guardar una copia de este script para posteriores instalaciones de nuestro sistema, teniendo en cuenta que es el que se va a utilizar a partir de ahora en todos los manuales de esta web, para establecer variables de entorno globales, excepto en aquellas que sólo afectan al usuario, en las que se utilizará el archivo de configuración personal, ~/.bashrc.

La ventaja de utilizar el directorio /etc/profile.d es que es común a todas las distribuciones y nos evita tener que editar otros archivos del sistema como por ejemplo, /etc/profile.

2) Desinstalar versiones anteriores del programa ubicadas en el directorio /usr

Aún en el caso de que la versión a compilar la vayamos a instalar en el mismo directorio que la que proporciona la distribución, siempre se debe desinstalar previamente la versión antigua, para evitar conflictos innecesarios.



Instalación  

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado Pdnsd para la elaboración de este documento.

* GCC - (8.1.0) o Clang - (6.0.0)
* Gawk - (4.2.1)
* M4 - (1.4.16)
* Make - (4.2.1)
* Automake - (1.16.1)
* Autoconf - (2.69)



Descarga

pdnsd-1.2.9a-par.tar.gz  |  pdnsd_rc.diff

Optimizaciones

$ export {C,CXX}FLAGS='-O3 -march=amdfam10 -mtune=amdfam10'

Donde pone amdfam10 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla:
Nota informativa sobre las optimizaciones para GCC
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Nota informativa sobre las optimizaciones para Clang
* La opción '-mtune=' está soportada a partir de la versión 3.4 de Clang.

* Los valores de color azul no son compatibles con Clang.

* Las filas con el fondo de color amarillo son valores exclusivos de Clang, y por lo tanto, no son aplicables con GCC.
Valores CPU
Genéricos
Intel
AMD
VIA
IDT

Optimizaciones adicionales

Optimizaciones adicionales
GCC
Graphite
$ export {C,CXX}FLAGS+=' -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block'
LTO
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=2'
Donde pone 2 se indica el número de núcleos de nuestro procesador, si sólo tiene uno, utilizar el parámetro -flto

Clang
Polly
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
LTO
$ export {C,CXX}FLAGS+=' -flto'
ThinLTO
$ export {C,CXX}FLAGS+=' -flto=thin'
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9, y por lo tanto, no es combinable con la misma.

Parámetros adicionales

Parámetros adicionales de eliminación de avisos específicos en el proceso de compilación
Clang
$ export {C,CXX}FLAGS+=' -Qunused-arguments'

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64"

Establecer el uso de enlazador dinámico para LLD
$ export LDFLAGS+=' -fuse-ld=lld'
Optimizaciones complementarias LTO de LLD
$ export LDFLAGS+=' -Wl,--lto-partitions=2'
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=' -Wl,--thinlto-jobs=2'
Donde pone 2 se indica el número de núcleos de nuestro procesador, si sólo tiene uno, no es necesario añadir el el parámetro en cuestión.

Establecer la variable de entorno de uso de compilador para Clang
$ export {CC,CXX}=clang

Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar zxvf pdnsd-1.2.9a-par.tar.gz
$ cd pdnsd-1.2.9a
$ patch -Np1 -i ../pdnsd_rc.diff
$ ./configure --disable-dependency-tracking --sysconfdir=/etc --localstatedir=/var \
--mandir=/usr/local/share/man --with-distribution=RedHat

Explicación de los comandos

patch -Np1 -i ../pdnsd_rc.diff : Aplicamos este parche personal que hace compatibles los scripts de inicio de Red Hat, Debian y SuSE, con LSB.
--disable-dependency-tracking : Acelera el tiempo de compilación.
--sysconfdir=/etc : Instala el archivo de configuración del programa en /etc, en lugar de /usr/local/etc.

--localstatedir=/var
: Utiliza el directorio /var, en lugar de /usr/local/var, para los archivos de registro.
--mandir=/usr/local/share/man :Instala las páginas de manual del programa en /usr/local/share/man, en lugar de /usr/local/man.
--with-distribution=RedHat : Le indicamos la distribución que estamos utilizando, para que el paquete instale los scripts correspondientes y el programa se pueda ejecutar en el inicio del sistema.

Las opciones posibles son: Generic (predefinido), RedHat (Fedora y Mandriva), SuSE (obsoleto), Debian (y todos sus derivados) y ArchLinux. En Slackware y derivados no hay que añadir este parámetro, ya que la instalación del script de inicio, hay que hacerla de forma manual. En openSUSE tampoco hay que añadirlo, al estar obsoleto el método de instalación del mismo.

Compilación

$ make

Parámetros de compilación opcionales  

-j2 : Si tenemos un procesador de doble núcleo (dual-core), y el kernel está optimizado para el mismo y es SMP, con este parámetro aumentaremos el número de procesos de compilación simultáneos a un nivel de 2 y aceleraremos el tiempo de compilación del programa de forma considerable.
-j4 : Lo mismo que arriba pero con procesadores de 4 núcleos (quad-core).

Instalación como root

$ su -c "make install-strip"

Instalación manual del script de inicio en Slackware y derivados

$ su -c "install -m755 src/rc/Slackware/rc.pdnsd /etc/rc.d"

Abrimos con un editor de texto, el archivo, /etc/rc.d/rc.K, y añadimos al final del mismo lo que está en rojo.

# Now go to the single user level
echo "Going to single user mode..."
telinit -t 1 1

# Detener Pdnsd

if [ -x /etc/rc.d/rc.pdnsd ]; then
        /etc/rc.d/rc.pdnsd stop
fi


También hacemos lo mismo, en el archivo, /etc/rc.d/rc.6,

# Now halt (poweroff with APM or ACPI enabled kernels) or reboot.
if [ "$command" = "reboot" ]; then
  echo "Rebooting."
  /sbin/reboot
else
  /sbin/poweroff
fi

# Detener Pdnsd

if [ -x /etc/rc.d/rc.pdnsd ]; then
        /etc/rc.d/rc.pdnsd stop
fi


Instalación manual del script de inicio en openSUSE

$ su
# install -m755 src/rc/SuSE/pdnsd /etc/init.d
# chkconfig --level 235 pdnsd on

Estadísticas de Compilación e Instalación de Pdnsd

Estadísticas de Compilación e Instalación de Pdnsd
CPU AMD Phenom(tm) II X4 965 Processor
MHz 3415.709
RAM 4096 MB
Sistema de archivos XFS
Versión del Kernel 4.16.15-ck1 SMP PREEMPT x86_64
Modo de frecuencia de la CPU ondemand
Versión de Glibc 2.27
Enlazador dinámico LLD 6.0.0
Compilador Clang 6.0.0
Parámetros de optimización -03 -march=amdfam10 -mtune=amdfam10 -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto=thin
Parámetros de compilación -j4
Tiempo de compilación 5"
Archivos instalados 8
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 360 KB

Consumo inicial de CPU y RAM de Pdnsd

Consumo inicial de CPU y RAM de Pdnsd
Proceso
CPU Memoria física
pdnsd 0 % 164 KB

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando:

$ su -c "make uninstall"
 
2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenemos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

pdnsd-1.2.9a-par-scripts.tar.gz

$ su
# tar zxvf pdnsd-1.2.9a-par-scripts.tar.gz
# cd pdnsd-1.2.9a-par-scripts
# ./Desinstalar_pdnsd-1.2.9a-par

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf pdnsd-1.2.9a-par-scripts.tar.gz
# cd pdnsd-1.2.9a-par-scripts
# ./Respaldar_pdnsd-1.2.9a-par

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_pdnsd-1.2.9a-par



Configuración  Bloc de Notas   

Tomando como referencia el archivo de configuración de ejemplo que se instala en la ruta, /etc/pdnsd.conf.example, creamos nuestro propio archivo de configuración, en función de la interfaz de red a utilizar (eth0 o ppp0) y de los servidores DNS que configuraremos en dicho archivo, los que nos proporcione nuestra propia ISP, o los de servicios alternativos como OpenDNS. Dicho archivo lo ubicaremos en la ruta, /etc/pdnsd.conf.

1) Ejemplo de configuración para una interfaz de red Ethernet con los DNS de nuestro ISP

global {
    perm_cache=2048;
    cache_dir="/var/cache/pdnsd";
#    pid_file = /var/run/pdnsd.pid;
    run_as="root";
    server_ip = 127.0.0.1;  # Use eth0 here if you want to allow other
                # machines on your network to query pdnsd.
    status_ctl = on;
#    paranoid=on;       # This option reduces the chance of cache poisoning
                       # but may make pdnsd less efficient, unfortunately.
    query_method=udp_tcp;
    min_ttl=15m;       # Retain cached entries at least 15 minutes.
    max_ttl=1w;        # One week.
    timeout=10;        # Global timeout option (10 seconds).
    neg_domain_pol=on;
}

# The following section is most appropriate if you have a fixed connection to
# the Internet and an ISP which provides good DNS servers.
server {
    label= "adsl";
    ip = 80.58.61.250,80.58.61.254;  # Put your ISP's DNS-server address(es) here.
#    proxy_only=on;     # Do not query any name servers beside your ISP's.
                       # This may be necessary if you are behind some
                       # kind of firewall and cannot receive replies
                       # from outside name servers.
    timeout=4;         # Server timeout; this may be much shorter
               # that the global timeout option.
    uptest=if;         # Test if the network interface is active.
    interface=eth0;    # The name of the interface to check.
    interval=10m;      # Check every 10 minutes.
    purge_cache=off;   # Keep stale cache entries in case the ISP's
               # DNS servers go offline.
}

Parámetros configurables a tener en cuenta
perm_cache=2048; En este parámetro establecemos el tamaño máximo de la caché del proxy, por defecto es de 2048 KB. En el ejemplo y en mi sistema la tengo establecida en 2048, que equivale a casi 8000 entradas de direcciones almacenadas en la caché.
label= "adsl"; Cada servidor configurado tiene que tener un nombre asignado para poder identificarlo con el comando de control del programa, pdnsd-ctl. En este caso el nombre es 'adsl'
ip = 80.58.61.250,80.58.61.254; Aquí tenemos que escribir las direcciones de los dos servidores DNS de nuestro ISP, separados por una coma, y que podemos obtener desde el archivo de configuración, /etc/resolv.conf, o en su lugar desde la misma interfaz web del centro de control de nuestra ISP.


2) Ejemplo de configuración para una interfaz de red Ethernet con los DNS de OpenDNS

global {
    perm_cache=2048;
    cache_dir="/var/cache/pdnsd";
#    pid_file = /var/run/pdnsd.pid;
    run_as="root";
    server_ip = 127.0.0.1;  # Use eth0 here if you want to allow other
                # machines on your network to query pdnsd.
    status_ctl = on;
#    paranoid=on;       # This option reduces the chance of cache poisoning
                       # but may make pdnsd less efficient, unfortunately.
    query_method=udp_tcp;
    min_ttl=15m;       # Retain cached entries at least 15 minutes.
    max_ttl=1w;        # One week.
    timeout=10;        # Global timeout option (10 seconds).
    neg_domain_pol=on;
}

# The servers provided by OpenDNS are fast, but they do not reply with
# NXDOMAIN for non-existant domains, instead they supply you with an
# address of one of their search engines. They also lie about the addresses of
# of the search engines of google, microsoft and yahoo.
# If you do not like this behaviour the "reject" option may be useful.
server {
    label = "opendns";
    ip = 208.67.222.222,208.67.220.220;
    reject = 208.69.32.0/24,  # You may need to add additional address ranges
             208.69.34.0/24,  # here if the addresses of their search engines
             208.67.219.0/24; # change.
    reject_policy = fail;     # If you do not provide any alternative server
                              # sections, like the following root-server
                              # example, "negate" may be more appropriate here.
    timeout = 4;
    uptest = ping;            # Test availability using ICMP echo requests.
        ping_timeout = 100;       # ping test will time out after 10 seconds.
    interval = 15m;           # Test every 15 minutes.
    preset = off;
}



3) Ejemplo de configuración para una interfaz de red PPP (módem 56Kb)

global {
    perm_cache=2048;
    cache_dir="/var/cache/pdnsd";
#    pid_file = /var/run/pdnsd.pid;
    run_as="root";
    server_ip = 127.0.0.1;  # Use eth0 here if you want to allow other
                # machines on your network to query pdnsd.
    status_ctl = on;
#    paranoid=on;       # This option reduces the chance of cache poisoning
                       # but may make pdnsd less efficient, unfortunately.
    query_method=udp_tcp;
    min_ttl=15m;       # Retain cached entries at least 15 minutes.
    max_ttl=1w;        # One week.
    timeout=10;        # Global timeout option (10 seconds).
    neg_domain_pol=on;
}

# The following section is more appropriate for dial-up connections.
# Read about how to use pdnsd-ctl for dynamic configuration in the documentation.
server {
    label= "dialup";
    file = "/etc/ppp/resolv.conf";  # Preferably do not use /etc/resolv.conf
    proxy_only=on;
    timeout=4;
    uptest=if;
    interface = ppp0;
    interval=10;       # Check the interface every 10 seconds.
    purge_cache=off;
    preset=off;
}




Configurar el inicio de Pdnsd  Bloc de Notas   

La tarea principal de este apartado consiste en desactivar el uso de los DNS predefinidos por parte del sistema. A continuación pongo varios ejemplos de configuración de varias distribuciones GNU/Linux tradicionales. Todos han sido probados en las distribuciones instaladas en el ordenador del autor de este documento. Todas las configuraciones son para una interfaz de red, eth0 con DNS dinámicos y las modificaciones se realizan siempre como usuario root.

1) PCLinuxOS y compatibles

1a) Desactivar el inicio del servicio resolvconf
.

Abrimos una ventana de terminal y ejecutamos el siguiente comando:

$ su
# chkconfig --level 2345 resolvconf off

1b) Editar el archivo de configuración, /etc/sysconfig/network-scripts/ifcfg-eth0

Abrimos con un editor de texto, dicho archivo, y añadimos lo que está en rojo.

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
PEERDNS=no

1c) Editar el archivo de configuración, /etc/resolv.conf.

Abrimos con un editor de texto, dicho archivo, y añadimos lo que está en rojo, comentando las entradas correspondientes de las direcciones de los servidores DNS predefinidos.

nameserver 127.0.0.1

#nameserver 80.58.61.250
#nameserver 80.58.61.254

Finalmente reiniciamos el sistema y comprobamos en el siguiente inicio que el archivo de configuración, /etc/resolv.conf, no ha sido modificado por el sistema.

[root@localhost ~]# cat /etc/resolv.conf
nameserver 127.0.0.1

#nameserver 80.58.61.250
#nameserver 80.58.61.254


Que Pdnsd está funcionando correctamente...

[root@localhost ~]# pdnsd-ctl status
Opening socket /var/cache/pdnsd/pdnsd.status
pdnsd-1.2.9a-par running on localhost.

Cache status:
=============
2048 kB maximum disk cache size.
2096961 of 2107392 bytes (99.5%) memory cache used in 7817 entries.

Thread status:
==============
server status thread is running.
pdnsd control thread is running.
tcp server thread is running.
udp server thread is running.
0 query threads spawned in total (0 queries dropped).
0 running query threads (0 active, 0 queued).

Configuration:
==============
Global:
-------
        Cache size: 2048 kB
        Server directory: /var/cache/pdnsd
        Scheme file (for Linux pcmcia support): /var/lib/pcmcia/scheme
        Server port: 53
        Server ip (0.0.0.0=any available one): 127.0.0.1
        Ignore cache when link is down: off
        Maximum ttl: 604800
        Minimum ttl: 900
        Negative ttl: 900
        Negative RRS policy: default
        Negative domain policy: on
        Run as: root
        Strict run as: on
        Use NSS: on
        Paranoid mode (cache pollution prevention): off
        Ignore CD ('checking disabled') flag in queries: on
        Control socket permissions (mode): 600
        Maximum parallel queries served: 40
        Maximum queries queued for serving: 60
        Global timeout setting: 10
        Parallel queries increment: 2
        Randomize records in answer: on
        Query method: udp_tcp
        Query port start: 1024
        Query port end: 65535
        TCP server thread: on
        TCP query timeout: 30
        Delegation-only zones: (none)
Server 0:
------
        label: adsl
        ip: 80.58.61.250
        server assumed available: yes
        ip: 80.58.61.254
        server assumed available: yes
        port: 53
        uptest: if
        timeout: 4
        uptest interval: 600
        ping timeout: 600
        ping ip: (using server ip)
        interface: eth0
        device (for special Linux ppp device support):
        uptest command:
        uptest user: (process owner)
        force cache purging: off
        server is cached: on
        lean query: on
        Use only proxy?: off
        Assumed root server: no
        Randomize server query order: no
        Default policy: included
        Policies: (none)
Succeeded


Y que las direcciones se resuelven sin ningún problema,

[root@localhost ~]# ping -c2 www.statcounter.com
PING g1.panthercdn.com (93.188.131.163) 56(84) bytes of data.
64 bytes from 93.188.131.163: icmp_seq=1 ttl=55 time=65.4 ms
64 bytes from 93.188.131.163: icmp_seq=2 ttl=55 time=69.0 ms

--- g1.panthercdn.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 5130ms
rtt min/avg/max/mdev = 65.491/67.283/69.076/1.811 ms


2) Fedora (Este ejemplo no está actualizado a las nuevas versiones de esta distribución)

2a) Editar el archivo de configuración, /etc/sysconfig/network-scripts/ifcfg-eth0
.

Abrimos con un editor de texto, dicho archivo, y añadimos lo que está en rojo.

# nVidia Corporation MCP61 Ethernet
DEVICE=eth0
HWADDR=00:19:66:A6:C8:3D
PEERDNS=no
DNS1=127.0.0.1

2b) Editar el script de inicio, /etc/rc.d/rc.local

Abrimos con un editor de texto, dicho archivo, y añadimos lo que está en rojo.

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

/etc/init.d/pdnsd restart

Finalmente reiniciamos el sistema y comprobamos en el siguiente inicio que el archivo de configuración, /etc/resolv.conf, contiene sólo la dirección DNS, 127.0.0.1.

[root@Fedora-13 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1

Que Pdnsd está funcionando correctamente...

Y que las direcciones se resuelven sin ningún problema,


3) Slackware

3a) Editar el archivo de configuración, /etc/dhcpcd.conf
.

Abrimos con un editor de texto, dicho archivo, y añadimos al final del mismo lo que está en rojo.

# A hook script is provided to lookup the hostname if not set by the DHCP
# server, but it should not be run by default.
nohook lookup-hostname

static domain_name_servers=127.0.0.1

Finalmente reiniciamos el sistema y comprobamos en el siguiente inicio que el archivo de configuración, /etc/resolv.conf, contiene sólo la dirección DNS, 127.0.0.1.

[root@slackware ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1

Que Pdnsd está funcionando correctamente...

Y que las direcciones se resuelven sin ningún problema,


4) OpenSUSE (Este ejemplo no está actualizado a las nuevas versiones de esta distribución)

4a) Editar el archivo de configuración, /etc/sysconfig/network/config
.

Abrimos con un editor de texto, dicho archivo, nos vamos a la línea 210 y la dejamos tal y como aparece en el ejemplo que pongo a continuación, en color rojo.

# Defines the DNS merge policy as documented in netconfig(8) manual page.
# Set to "" to disable DNS configuration.
#
NETCONFIG_DNS_POLICY=""

## Type:        string(resolver,bind,dnsmasq,)
## Default:     "resolver"

4b) Editar el archivo de configuración, /etc/resolv.conf.

Abrimos con un editor de texto, dicho archivo, y añadimos lo que está en rojo, comentando las entradas correspondientes de las direcciones de los servidores DNS predefinidos.

### /etc/resolv.conf file autogenerated by netconfig!
#
# Before you change this file manually, consider to define the
# static DNS configuration using the following variables in the
# /etc/sysconfig/network/config file:
#     NETCONFIG_DNS_STATIC_SEARCHLIST
#     NETCONFIG_DNS_STATIC_SERVERS
#     NETCONFIG_DNS_FORWARDER
# or disable DNS configuration updates via netconfig by setting:
#     NETCONFIG_DNS_POLICY=''
#
# See also the netconfig(8) manual page and other documentation.
#
# Note: Manual change of this file disables netconfig too, but
# may get lost when this file contains comments or empty lines
# only, the netconfig settings are same with settings in this
# file and in case of a "netconfig update -f" call.
#
### Please remove (at least) this line when you modify the file!
#nameserver 80.58.61.250
#nameserver 80.58.61.254

nameserver 127.0.0.1


4c) Editar el script de inicio, /etc/init.d/after.local. (en openSUSE 11.4 y superiores)

Desde la versión 11.4 de openSUSE, se incluye este script de inicio del sistema, equivalente al script de inicio, rc.local, de Fedora.

Abrimos con un editor de texto, dicho archivo, y añadimos al final del mismo lo que está en rojo.

#! /bin/sh
#
# Copyright (c) 2010 SuSE LINUX Products GmbH, Germany.  All rights reserved.
#
# Author: Werner Fink, 2010
#
# /etc/init.d/after.local
#
# script with local commands to be executed from init after all scripts
# of a runlevel have been executed.
#
# Here you should add things, that should happen directly after
# runlevel has been reached.  Common environment
# variables for this are:
#  RUNLEVEL  -- The current system runlevel.
#  PREVLEVEL -- The previous runlevel (useful after a runlevel switch).
#

/etc/init.d/pdnsd restart &


4d) Editar el script de inicio, /etc/init.d/boot.local. (en versiones inferiores a openSUSE 11.4)

Las versiones inferiores a openSUSE 11.4 no tienen un equivalente al script de inicio, rc.local, de Fedora. Es decir, un script que se ejecute después de todos los scripts ubicados en /etc/init.d. Así que tenemos que echar mano del script /etc/init.d/boot.local, cuya función es totalmente opuesta, se ejecuta antes de todos los scripts ubicados en /etc/init.d.

Con el uso del comando sleep, solventaremos los inconvenientes de este script, para que el comando de reinicio de Pdnsd, pueda ser ejecutado después de todos los scripts ubicados en /etc/init.d. El tiempo de retardo irá en función de lo que tarde la secuencia de inicio de todos los scripts ubicados en /etc/init.d. Con 25 segundos creo que es más que suficiente.

Abrimos con un editor de texto, dicho archivo, y añadimos al final del mismo lo que está en rojo.

#! /bin/sh
#
# Copyright (c) 2002 SuSE Linux AG Nuernberg, Germany.  All rights reserved.
#
# Author: Werner Fink <werner@suse.de>, 1996
#         Burchard Steinbild, 1996
#
# /etc/init.d/boot.local
#
# script with local commands to be executed from init on system startup
#
# Here you should add things, that should happen directly after booting
# before we're going to the first run level.
#

/bin/sleep 25 && /etc/init.d/pdnsd restart &


Finalmente reiniciamos el sistema y comprobamos en el siguiente inicio que el archivo de configuración, /etc/resolv.conf, no ha sido modificado por el sistema.

linux-cn48:~ # cat /etc/resolv.conf
### /etc/resolv.conf file autogenerated by netconfig!
#
# Before you change this file manually, consider to define the
# static DNS configuration using the following variables in the
# /etc/sysconfig/network/config file:
#     NETCONFIG_DNS_STATIC_SEARCHLIST
#     NETCONFIG_DNS_STATIC_SERVERS
#     NETCONFIG_DNS_FORWARDER
# or disable DNS configuration updates via netconfig by setting:
#     NETCONFIG_DNS_POLICY=''
#
# See also the netconfig(8) manual page and other documentation.
#
# Note: Manual change of this file disables netconfig too, but
# may get lost when this file contains comments or empty lines
# only, the netconfig settings are same with settings in this
# file and in case of a "netconfig update -f" call.
#
### Please remove (at least) this line when you modify the file!
#nameserver 80.58.61.250
#nameserver 80.58.61.254

nameserver 127.0.0.1 


Que Pdnsd está funcionando correctamente...

Y que las direcciones se resuelven sin ningún problema,


5) Debian y derivados

5a) Editar el archivo de configuración, /etc/dhcp/dhclient.conf
.

Abrimos con un editor de texto, dicho archivo, y añadimos lo que está en rojo.

# Configuration file for /sbin/dhclient.
#
# This is a sample configuration file for dhclient. See dhclient.conf's
#    man page for more information about the syntax of this file
#    and a more comprehensive list of the parameters understood by
#    dhclient.
#
# Normally, if the DHCP server provides reasonable information and does
#    not leave anything out (like the domain name, for example), then
#    few changes must be made to this file, if any.
#

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
    domain-name, domain-name-servers, domain-search, host-name,
    dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
    netbios-name-servers, netbios-scope, interface-mtu,
    rfc3442-classless-static-routes, ntp-servers;

#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
supersede domain-name-servers 127.0.0.1;
#prepend domain-name-servers 127.0.0.1;

Finalmente reiniciamos el sistema y comprobamos en el siguiente inicio que el archivo de configuración, /etc/resolv.conf, contiene sólo la dirección DNS, 127.0.0.1.

[root@siduxbox ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1

Que Pdnsd está funcionando correctamente...

Y que las direcciones se resuelven sin ningún problema,



Pdnsd-ctl    

Con este comando controlamos el estado del proxy y nos permite también recargar la configuración del programa y vacíar la caché DNS que se almacena en el directorio, /var/cache/pdnsd.

1) Comprobar el correcto funcionamiento del proxy (pdnsd-ctl status)

Ya explicado en la sección anterior, de la información que nos muestre este comando nos tenemos que quedar siempre con la información relativa a los DNS, si estos no han podido ser cargados por Pndsd, el proxy sólo podrá resolver las direcciones que tenga almacenadas en su caché.

[root@localhost jose]# pdnsd-ctl status
Opening socket /var/cache/pdnsd/pdnsd.status
pdnsd-1.2.9a-par running on localhost.

Cache status:
=============
2048 kB maximum disk cache size.
2096961 of 2107392 bytes (99.5%) memory cache used in 7817 entries.

Thread status:
==============
server status thread is running.
pdnsd control thread is running.
tcp server thread is running.
udp server thread is running.
0 query threads spawned in total (0 queries dropped).
0 running query threads (0 active, 0 queued).

Configuration:
==============
Global:
-------
        Cache size: 2048 kB
        Server directory: /var/cache/pdnsd
        Scheme file (for Linux pcmcia support): /var/lib/pcmcia/scheme
        Server port: 53
        Server ip (0.0.0.0=any available one): 127.0.0.1
        Ignore cache when link is down: off
        Maximum ttl: 604800
        Minimum ttl: 900
        Negative ttl: 900
        Negative RRS policy: default
        Negative domain policy: on
        Run as: root
        Strict run as: on
        Use NSS: on
        Paranoid mode (cache pollution prevention): off
        Ignore CD ('checking disabled') flag in queries: on
        Control socket permissions (mode): 600
        Maximum parallel queries served: 40
        Maximum queries queued for serving: 60
        Global timeout setting: 10
        Parallel queries increment: 2
        Randomize records in answer: on
        Query method: udp_tcp
        Query port start: 1024
        Query port end: 65535
        TCP server thread: on
        TCP query timeout: 30
        Delegation-only zones: (none)
Server 0:
------
        label: adsl
        ip: 80.58.61.250
        server assumed available: yes
        ip: 80.58.61.254
        server assumed available: yes
        port: 53
        uptest: if
        timeout: 4
        uptest interval: 600
        ping timeout: 600
        ping ip: (using server ip)
        interface: eth0
        device (for special Linux ppp device support):
        uptest command:
        uptest user: (process owner)
        force cache purging: off
        server is cached: on
        lean query: on
        Use only proxy?: off
        Assumed root server: no
        Randomize server query order: no
        Default policy: included
        Policies: (none)
Succeeded


Si los parámetros de 'server assumed available:' muestran el resultado de 'no', significa que Pdnsd no ha podido conectar con los servidores DNS en el inicio del sistema, y por lo tanto sólo podrá resolver las direcciones que tenga almacenadas en su caché, si no tiene ninguna, pues no resolverá nada, y las páginas solicitadas no se podrán cargar.

Esto está muy relacionado con la secuencia de inicio de los scripts de inicio del sistema. Si Pdnsd, se inicia antes que la configuración de la interfaz eth0, como es lógico, es imposible que pueda conectar con los servidores DNS configurados. Dando el resultado que configuraciones similares en distribuciones parecidas no funcionen por este motivo. Un ejemplo, la misma configuración de Aptosid aplicada a Mepis no es funcional en esta última, siendo las dos, distribuciones derivadas de Debian.

2) Recargar la configuración (pdnsd-ctl config /etc/pdnsd.conf)

Este comando puede llegar a ser útil en aquellos casos en los que se ha iniciado Pdnsd, pero no ha podido conectar con los servidores DNS configurados, o si hemos modificado el archivo de configuración y queremos que el programa recoja los cambios sin esperar al siguiente reinicio. Que viene a ser lo mismo que reiniciar el script correspondiente ubicado en /etc/init.d/pdnsd.

[root@localhost ~]# pdnsd-ctl config /etc/pdnsd.conf
Opening socket /var/cache/pdnsd/pdnsd.status
Succeeded

3) Vacíar la caché del proxy (pdnsd-ctl empty-cache)

Con este comando borramos todas las entradas almacenadas en la caché de Pdnsd.
 
[root@localhost ~]# pdnsd-ctl empty-cache
Opening socket /var/cache/pdnsd/pdnsd.status
Succeeded



Probar el rendimiento de Pdnsd con DNS Benchmark    

Y por último, nada mejor que una aplicación de Windows para comparar la velocidad de Pdnsd como servidor DNS, con otros servidores remotos. Nos la descargamos de este enlace y la ejecutamos desde la línea de comandos con Wine. El programa no requiere de instalación.

$ wine DNSBench.exe

La primera vez que se inicie, hacemos clic en la pestaña Nameservers y posteriormente en el botón Run Benchmark.

Captura - DNS Benchmark - 1


Cuando termine la comparativa, nos saldrá una ventana que nos pregunta si queremos crear una lista personal. Hacemos clic en el botón derecho de la ventana para cerrar la misma. Abrimos el menú contextual con el botón derecho del ratón, con el puntero sobre el fondo del gráfico de la comparativa, y seleccionamos Remove 41 Dead Nameservers, para borrar de la comparativa, los servidores DNS que no están operativos, dado el tiempo que tiene el programa.

Nos descargamos de este enlace una lista actualizada de servidores DNS, y la guardamos con el nombre nameservers.ini en nuestro directorio personal. Como la lista es enorme, lo mejor es ejecutar el siguiente comando de sed para reducirla a 25 servidores DNS.

$ sed -i '25,$d' nameservers.ini

Hacemos clic en el botón Add/Remove, y en la ventana de diálogo que se muestre, hacemos clic en Add .INI file Nameservers. Seleccionamos la ruta en la que tengamos el archivo de la lista de servidores DNS, y volvemos a ejecutar la comparativa. Como se puede comprobar en la captura de pantalla inferior, no hay servidor remoto que pueda competir con Pdnsd (Local Network Nameserver). Dejo finalmente el gráfico de la comparativa en formato PNG que el programa nos permite guardar como imagen. También podemos visualizar los tiempos de respuesta más detallados en la pestaña Tabular Data.

Captura - DNS Benchmark - 2




Enlaces  


http://members.home.nl/p.a.rombouts/pdnsd/index.html >> La web de Pdnsd.

https://www.grc.com/dns/benchmark.htm >> La web de DNS Benchmark.


Foro Galería Blog


Actualizado el 13-06-2018

Instalar Pdnsd desde cero

Gestores de Descargas - XDMLectores de Noticias - Pan