Copyright
Copyright © José
Luis Lara Carrascal 2010-2012 
Sumario
Introducción
Preliminares
Instalación
Configuración
Configurar el inicio de Pdnsd
Pdnsd-ctl
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 instántaneo. 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
# 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 - (4.6.3)
* M4 - (1.4.16)
* Make - (3.82)
* Automake - (1.11.3)
* Autoconf - (2.68)
Descarga
pdnsd-1.2.9-par.tar.gz | pdnsd_rc.diff
Optimizaciones
$ export
CFLAGS='-O3 -march=barcelona -mtune=barcelona'; export CXXFLAGS=${CFLAGS}
|
| Donde pone barcelona
se indica el procesador respectivo de cada sistema
seleccionándolo de la siguiente tabla: |
* 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.x e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
|
| Valores |
CPU |
| generic |
Produce un código
binario optimizado para la mayor parte de procesadores existentes.
Utilizar este valor si no sabemos el nombre del procesador que
tenemos en nuestro equipo. Este valor sólo es aplicable en
la opción '-mtune='. Esta opción está disponible a
partir de GCC 4.2.x. |
| i386 |
Intel i386.
|
| i486 |
Intel i486. |
| i586, pentium |
Intel Pentium sin soporte de instrucciones MMX. |
| pentium-mmx |
Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX. |
| pentiumpro |
Intel PentiumPro. |
| i686 |
Produce un código binario optimizado para la mayor parte de
procesadores compatibles con la serie 80686 de Intel. Todos los actuales lo son. |
| pentium2 |
Intel Pentium2 basado en PentiumPro con soporte de instrucciones MMX. |
| pentium3, pentium3m |
Intel Pentium3 basado en PentiumPro con soporte de instrucciones MMX y SSE. |
| pentium-m |
Versión de bajo
consumo de Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2.
Utilizado por los portátiles Centrino. |
| pentium4, pentium4m |
Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2. |
| prescott |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
| nocona |
Versión mejorada de Intel Pentium4 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
| core2 |
Intel Core2 con
extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3 y
SSSE3. Esta opción está disponible a partir de GCC 4.3.x. |
| corei7 |
Intel Core i7 con
extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1 y SSE4.2. Soporta también los procesadores Intel
Core i3 e i5. Esta opción está disponible a partir
de GCC 4.6.x. |
| corei7-avx |
Intel Core i7 con
extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AVX, AES y PCLMUL. Soporta también los
procesadores Intel Core i3 e i5. Esta opción está
disponible a partir de GCC 4.6.x. |
| atom |
Intel Atom con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3 y SSSE3. Esta opción está
disponible a partir de GCC 4.5.x. |
| k6 |
AMD K6 con soporte de instrucciones MMX. |
| k6-2, k6-3 |
Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!. |
| athlon, athlon-tbird |
AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y SSE prefetch. |
| athlon4, athlon-xp, athlon-mp |
Versiones mejoradas de AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y full SSE. |
| k8, opteron, athlon64, athlon-fx |
Procesadores basados en
AMD K8 core con soporte de instrucciones x86-64 (MMX, SSE, SSE2,
3DNow!, enhanced 3DNow! y extensiones 64-bit). |
| k8-sse3, opteron-sse3, athlon64-sse3 |
Versiones mejoradas de
AMD K8 core con soporte de instrucciones SSE3. Esta opción
está disponible a partir de GCC 4.3.x. |
| amdfam10, barcelona |
Procesadores basados en
AMD Family 10h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM y extensiones
64-bit). Esta opción está disponible a partir de GCC 4.3.x. |
| btver1 |
AMD Bobcat (family 14). Esta opción está disponible a partir
de GCC 4.6.x. |
| winchip-c6 |
IDT Winchip C6, que equivale a un i486 con soporte de instrucciones MMX. |
| winchip2 |
IDT Winchip2, que equivale a un i486 con soporte de instrucciones MMX y 3DNow!. |
| c3 |
Via C3 con soporte de instrucciones MMX y 3DNow!. |
| c3-2 |
Via C3-2 con soporte de instrucciones MMX y SSE. |
| geode |
AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3.x. |
| native |
Produce un código
binario optimizado para el procesador que tengamos en nuestro sistema,
siendo éste detectado utilizando la instrucción cpuid.
Procesadores antiguos pueden no ser detectados utilizando este valor.
Esta opción está disponible a
partir de GCC 4.2.x. |
Extracción
y Configuración 
$ tar zxvf pdnsd-1.2.9-par.tar.gz
$ cd pdnsd-1.2.9
$ 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
Instalación
como root
$ su
# make install-strip
|
Instalación manual del script de inicio en Slackware y derivados
$ su
# 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
|
Desinstalación
como root
1)
MODO TRADICIONAL
En el directorio de compilación
ejecutamos el siguiente comando como root:
2)
MODO MANUALINUX
El principal inconveniente del comando anterior es
que
tenermos 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.9-par-scripts.tar.gz
$ su
# tar zxvf pdnsd-1.2.9-par-scripts.tar.gz
# cd pdnsd-1.2.9-par-scripts
# ./Desinstalar_pdnsd-1.2.9-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.9-par-scripts.tar.gz
# cd pdnsd-1.2.9-par-scripts
# ./Respaldar_pdnsd-1.2.9-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.9-par
|
Configuración
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
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) Mandriva
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.9-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
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
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) Aptosid (Debian inestable)
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, which is included in Debian's
# dhcp3-client package.
#
# 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;
supersede domain-name-servers 127.0.0.1;
#send host-name "andare.fugue.com";
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
#supersede domain-name "fugue.com home.vix.com";
#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.9-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
|
Enlaces
http://members.home.nl/p.a.rombouts/pdnsd/index.html >> La web de Pdnsd.
|