Copyright
Copyright © José
Luis Lara Carrascal 2010-2022
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 |
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=', si utilizamos GCC. Esta opción está disponible a
partir de GCC 4.2. |
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. |
x86-64 |
Procesador genérico con extensiones 64-bit. Esta opción está disponible a
partir de GCC 8 y Clang 1.9. |
x86-64-v2 |
Procesador
genérico con con soporte de instrucciones X86-64 (MMX, SSE,
SSE2, LAHFSAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3) y extensiones
64-bit. Esta opción está disponible a partir de GCC 11 y Clang 12. |
x86-64-v3 |
Procesador
genérico con con soporte de instrucciones X86-64 (MMX, SSE,
SSE2, LAHFSAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3, AVX, AVX2, F16C,
FMA, LZCNT, MOVBE, XSAVE, XSAVEC, FMA4) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 11 y Clang 12. |
x86-64-v4 |
Procesador
genérico con con soporte de instrucciones X86-64 (MMX, SSE,
SSE2, LAHFSAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3, AVX, AVX2, F16C,
FMA, LZCNT, MOVBE, XSAVE, XSAVEC, AVX512*, FMA4) y extensiones 64-bit.
Esta opción está disponible a partir de GCC 11 y Clang 12. |
Intel |
alderlake |
Intel Alderlake con
soporte de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND,
FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD,
AVX512VNNI, AVX512BF16, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD,
CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16,
AMX-TILE, AMX-INT8, AVX-VNNI) y extensiones 64-bit. Esta opción
está disponible a partir de GCC 11 y Clang 12. |
atom |
Intel Atom
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y
extensiones 64-bit. Esta opción está disponible
desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición bonnell. |
bonnell |
Intel Bonnell con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
broadwell |
Intel Broadwell con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT,
AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX, PREFETCHW y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9 y Clang 3.6. |
cannonlake |
Intel Cannonlake Server con soporte de instrucciones MOVBE, MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, AVX512VBMI, AVX512IFMA, SHA, UMIP y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8 y Clang 3.9. |
cascadelake |
Intel Cascadelake con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI y
extensiones 64-bit. Esta opción está disponible a
partir de GCC 9 y Clang 8. |
cooperlake |
Intel
Cooper Lake con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI, AVX512BF16 y
extensiones 64-bit. Esta opción está disponible a
partir de GCC 10 y Clang 9. |
core2 |
Intel Core2
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.3. |
core-avx2 |
Intel Core (Haswell). Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición haswell. |
core-avx-i |
Intel Core (ivyBridge)
con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y
extensiones 64-bit. Esta opción está disponible
desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición ivybridge. |
corei7 |
Intel Core i7 con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1 y SSE4.2 y extensiones 64-bit. Soporta también los procesadores Intel
Core i3 e i5. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición nehalem. |
corei7-avx |
Intel Core i7 con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AVX, AES y PCLMUL y
extensiones 64-bit. Soporta también los
procesadores Intel Core i3 e i5. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición sandybridge. |
goldmont |
Intel Goldmont con soporte
de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE y extensiones
64-bit. Esta opción está disponible a
partir de GCC 9 y Clang 5. |
goldmont-plus |
Intel Goldmont Plus con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE,
RDPID, SGX, UMIP y extensiones 64-bit. Esta opción está disponible a
partir de GCC 9 y Clang 7. |
haswell |
Intel Haswell con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT,
AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
i386 |
Intel i386.
|
i486 |
Intel i486. |
i586, pentium |
Intel Pentium sin soporte de instrucciones MMX. |
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. |
icelake-client |
Intel Icelake Client con soporte de instrucciones MOVBE, MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI,
AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ,
VAES y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8 y Clang 7. |
icelake-server |
Intel Icelake Server con soporte de instrucciones MOVBE, MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI,
AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ,
VAES, PCONFIG, WBNOINVD y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8 y Clang 7. |
intel |
Intel Haswell y Silvermont. Este valor sólo es aplicable en
la opción '-mtune='. Esta opción está disponible a partir
de GCC 4.9. |
ivybridge |
Intel Ivy Bridge con soporte de instrucciones
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
knl |
Intel Knights Landing con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
PREFETCHW, AVX512F, AVX512PF, AVX512ER y extensiones 64-bit. Esta opción está disponible a partir
de GCC 5 y Clang 3.4. |
knm |
Intel Knights Mill con soporte de instrucciones MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F,
AVX512PF, AVX512ER, AVX512CD, AVX5124VNNIW, AVX5124FMAPS,
AVX512VPOPCNTDQ y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8 y Clang 6. |
lakemont |
Intel Quark Lakemont MCU, basado en el procesador Intel Pentium. Esta opción está disponible a partir
de GCC 6 y Clang 3.9. |
nehalem |
Intel Nehalem con soporte de instrucciones MMX,
SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT y extensiones
64-bit. Esta opción está disponible a partir
de GCC 4.9. |
nocona |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2, SSE3 y extensiones 64-bit. |
penryn |
Intel
Penryn con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3 y SSE4.1. |
pentiumpro |
Intel PentiumPro. |
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. |
pentium4, pentium4m |
Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2. |
pentium-m |
Versión de bajo
consumo de Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2.
Utilizado por los portátiles Centrino. |
pentium-mmx |
Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX. |
prescott |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
rocketlake |
Intel Rocket Lake con soporte de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES) y extensiones 64-bit. Esta opción está disponible a partir de GCC 11 y Clang 13. |
sandybridge |
Intel Sandy Bridge con soporte de instrucciones
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
AES, PCLMUL y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9 y Clang 3.6. |
sapphirerapids |
Intel Sapphire Rapids
con soporte de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT,
XSAVEC, XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD,
AVX512VNNI, AVX512BF16, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD,
CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16,
AMX-TILE, AMX-INT8 and AVX-VNNI) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 11 y Clang 12. |
silvermont |
Intel Silvermont con soporte de instrucciones
MOVBE, MMX, SSE, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PCLMU, RDRND y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9 y Clang 3.6. |
skylake |
Intel Skylake con soporte de instrucciones MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT,
XSAVEC, XSAVES y extensiones 64-bit. Esta opción está disponible a partir
de GCC 6 y Clang 3.6. |
skylake-avx512 |
Intel Skylake Server
con soporte de instrucciones MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT,
XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 6 y Clang 3.9. |
tigerlake |
Intel
Tiger Lake con soporte de instrucciones OVBE, MMX, SSE, SSE2, SSE3,
SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND,
FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F,
AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
CLWB, UMIP,
RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI,
VPCLMULQDQ,
VAES, PCONFIG, WBNOINVD, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 10 y Clang 10. |
tremont |
Intel Tremont con soporte
de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE, RDPID,
SGX, UMIP, GFNI-SSE, CLWB, ENCLV y extensiones 64-bit. Esta opción está disponible a
partir de GCC 9 y Clang 7. |
westmere |
Intel Westmere con soporte de instrucciones
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
PCLMUL y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
yonah |
Procesadores
basados en la microarquitectura de Pentium M, con soporte de
instrucciones MMX, SSE, SSE2 y SSE3. |
AMD |
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. La definición barcelona está disponible a partir de Clang 3.6. |
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. |
bdver1 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.7. |
bdver2 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (BMI, TBM, F16C, FMA, LWP, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.7. |
bdver3 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.8 y Clang 3.4. |
bdver4 |
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64
(BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP,
LWP, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está
disponible a partir de GCC 4.9 y Clang 3.5. |
btver1 |
Procesadores basados en
AMD Family 14h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, CX16, ABM y extensiones 64-bit). Esta opción está disponible a partir
de GCC 4.6. |
btver2 |
Procesadores basados en
AMD Family 16h core con soporte de instrucciones x86-64 (MOVBE, F16C,
BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3,
SSE2, SSE, MMX y extensiones 64-bit). Esta opción
está disponible a partir
de GCC 4.8. |
geode |
AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3. |
k6 |
AMD K6 con soporte de instrucciones MMX. |
k6-2, k6-3 |
Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!. |
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. |
znver1 |
Procesadores basados en
AMD Family 17h core con soporte de instrucciones x86-64 (BMI, BMI2,
F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y extensiones
64-bit). Esta opción está disponible a partir de GCC 6 y Clang 4. |
znver2 |
Procesadores basados en
AMD Family 17h core con soporte de instrucciones x86-64 (BMI, BMI2,
,CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA,
CLZERO, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y extensiones
64-bit). Esta opción está disponible a partir de GCC 9 y Clang 9. |
znver3 |
Procesadores basados en
AMD Family 19h core con soporte de instrucciones x86-64 (BMI, BMI2,
CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA,
CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
WBNOINVD, PKU, VPCLMULQDQ, VAES) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 11 y Clang 12. |
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
$ 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
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 |
|
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:
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
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) 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,
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.
La primera vez que se inicie, hacemos clic en la pestaña Nameservers y posteriormente en el botón Run Benchmark.
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.
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.
|