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-2022   http://manualinux.es



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 - (12.2.0) o Clang - (15.0.1)
* Gawk - (5.1.1)
* M4 - (1.4.19)
* Make - (4.3)
* Automake - (1.16.5)
* Autoconf - (2.71)



Descarga

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

Optimizaciones

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

Donde pone znver3 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

Optimizaciones adicionales

Optimizaciones adicionales
GCC
Graphite
$ export {C,CXX}FLAGS+=' -ftree-linear -floop-strip-mine -floop-block'
IPA
$ export {C,CXX}FLAGS+=' -fipa-pta'
LTO
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto'
En versiones inferiores a GCC 10, sustituir auto por el número de núcleos que tenga nuestro procesador. Si sólo tiene uno, utilizar el parámetro -flto
Clang
New Pass Manager
$ export {C,CXX}FLAGS+=' -fexperimental-new-pass-manager'
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 en el proceso de compilación
$ export {C,CXX}FLAGS+=' -w'

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 -L/opt/gcc12/lib64"
Cada usuario tendrá que establecer la ruta de búsqueda de directorios, en función de la distribución que utilice.

Establecer el uso de enlazador dinámico para Mold
$ export LDFLAGS+=' -fuse-ld=mold'

Establecer el uso de enlazador dinámico para LLD
Clang
$ export LDFLAGS+=' -fuse-ld=lld'
Optimizaciones complementarias LTO/ThinLTO de LLD
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt'
Optimizaciones complementarias LTO de LLD
$ export LDFLAGS+=" -Wl,--lto-partitions=$(nproc)"
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(nproc)"

Establecer la variable de entorno de uso de compilador para Clang
$ export CC=clang 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
$ patch -Np1 -i ../pdnsd_opensuse.patch
$ ./configure --sysconfdir=/etc --localstatedir=/var \
--mandir=/usr/local/share/man --with-distribution=RedHat

Explicación de los comandos

patch -Np1 -i ../pdnsd_rc.diff : Aplica este parche personal que hace compatibles los scripts de inicio de Red Hat, Debian y SuSE, con LSB.

patch -Np1 -i ../pdnsd_opensuse.patch : Aplica este parche personal recopilatorio de los parches ubicados de la distribución openSUSE en este enlace y este otro, que solucionan por una parte, un error de compilación con las últimas versiones de Glibc y del kernel y, por otra parte, mejora el envío de paquete de repuesta UDP.

--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

-j$(nproc) : Establece el número de procesos de compilación en paralelo, en función del número de núcleos e hilos que tenga nuestro procesador, tomando como referencia la información mostrada por el sistema con el comando correspondiente. Si nuestro procesador es mononúcleo de un solo hilo, no añadir esta opción.

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


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

Estadísticas de Compilación e Instalación de Pdnsd
CPU AMD Ryzen 5 5500
MHz 3593.250 (BoostMax=4457.000)
RAM 32 GB
Sistema de archivos XFS
Versión del Kernel 6.0.0-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU performance
Versión de Glibc 2.36
Enlazador dinámico LLD 15.0.1
Compilador Clang 15.0.1
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -fexperimental-new-pass-manager -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto=thin -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt
Parámetros de compilación -j12
Tiempo de compilación > 1"
Archivos instalados 7
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 324 KB

Consumo inicial de CPU y RAM de Pdnsd

Consumo inicial de CPU y RAM de Pdnsd
Programa
CPU RAM
pdnsd 0 % 7,9 MB
Para medir el consumo de CPU se utiliza el programa top, y para medir el consumo de RAM se utiliza el script de Python, ps_mem.py, creado por Pádraig Brady, que podemos encontrar en este enlace.

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) Debian y derivados

4a) 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, 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 archivada de Pdnsd.

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


Foro Galería Blog


Actualizado el 04-10-2022

Instalar Pdnsd desde cero

Gestores de Descargas - XDMLectores de Noticias - Pan