\chapter{Servidores de Configuración dinámica de Equipos - DHCP}
\section{El protocolo DHCP}

DHCP (Dynamic Host Configuration Protocol / Protocolo de configuración dinámica de equipos) es usado ampliamente y tiene numerosas posibilidades, como la asignación dinámicas de direcciones IP.

DHCP aparece como un protocolo estandar en Octubre de 1993 (RFC 2131).

\subsection{Asignación de IPs}

\begin{itemize}
\item[Manual] La asignación se hace de forma manual, de tal modo que para cada MAC se le asigna una ip fija.
\item[Automático] Se asigna un rango de ips que serán dadas a los clientes. Estas serán asignadas de tal forma que los clientes mantengan su IP.
\item[Dinámico] Se asigna un rango de ips que serán dadas a los clientes. Estas serán asigandas de forma dinámica, de tal manera que al arrancar la maquina el servidor le asignara una IP y esta puede ser diferente cada vez que arranque.
\end{itemize}

\subsection{Análisis del Protocolo}

El protocolo utilizara los puertos 67/UDP para el lado de servidor y 68/UDP para el lado de cliente.

\begin{itemize}
\item[DISCOVER] El cliente lanza un broadcast a 255.255.255.255 buscando un servidor DHCP, tambien hace peticiones indicando su ultima IP.
\item[OFFER] El servidor determina la configuración del cliente con entre otras cosas, la dirección MAC del cliente.
\item[REQUEST] El cliente pide la configuración al servidor, indicando la IP que este le ha configurado.
\item[ACKNOWLEDGE] El servidor lanza un broadcast para que los otros clientes vean lo que ha sucedido.
\end{itemize}


\section{Instalación}

Se descarga de \hlink{ftp://ftp.isc.org/isc/} y lo descomprimimos en /usr/src/dhcp-3.X.X, hacemos entonces los siguiente:
\jump
\begin{rbox}
# cd /usr/src/dhcp-3.X.X
# ./configure
# make
# make install
\end{rbox}
\jump

\section{Configuración Básica}

Al comenzar leera la configuración desde el archivo /etc/dhcp3/dhcp.conf, una configuración básica puede ser:
\jump
\begin{rbox}
# Intentara hacer una actualización automatica de dns (muy util para los windows 2k).
ddns-update-style interim;
ddns-hostname chaosdimension.org
ddns-domainname chaosdimension.org

# opciones de dominio y dns
option domain-name "chaosdimension.org";
option domain-name-servers ns1.chaosdimension.org, ns2.chaosdimension.org;

# Tiempos que se tendra una ip
default-lease-time 600;
max-lease-time 7200;

# Fichero donde se guardan las peticiones
# Muy interesante para actualizaciones dinamicas
lease-file-name /var/lib/dhcp/dhcpd.leases

# Si este es el unico servidor DHCP en la red
# se debe activar esta opción
#authoritative;

# Donde ira el registro de eventos
# En /etc/syslog.conf habra que poner algo como:
# log.local7                             /var/log/dhcp3d.log
log-facility local7;

# Configuración de la subred y las IPs
subnet mysubnet.0 netmask 255.255.255.128 {
  range mysubnet.1 mysubnet.127;
  option broadcast-address mysubnet.128;
  option routers gw1.chaosdimension.org, gw2.chaosdimension.org;
  option domain-name-servers ns1.chaosdimension.org, ns2.chaosdimension.org;
  option domain-name "chaosdimension.org";
  default-lease-time 600;
  max-lease-time 7200;
}

# Si lo que queremos es una configuración por equipos el sistema es:
host cliente1 {
  hardware ethernet MAC.cliente1;
#  filename "vmunix.passacaglia"; Muy interesante para subir archivos por tftp
  fixed-address cliente1.chaosdimension.org;
  server-name "chaosdimension.org";
}

\end{rbox}
\jump

\chapter{Servidores de Dominios de Nombres - DNS}
\section{El servicio de Dominio de Nombres}
\section{El servidor Bind 9}

Bind 9 es el servidor de nombres mas extendido por internet, aunque tenga la competencia de nuevos servidores como pdns(\hlink{http://www.powerdns.com/}) o djbdns(\hlink{http://cr.yp.to/djbdns.html}).

Tiene gran cantidad de documentación en el sitio web del ISC: \hlink{http://www.isc.org/index.pl?/sw/bind/bind9.php} , en especial muy interesante la guia del administrador de bind 9 en \hlink{http://www.nominum.com/content/documents/bind9arm.pdf}.

\section{Instalación}

Se descarga de \hlink{ftp://ftp.isc.org/isc/} 

\section{Configuración Básica}

El archivo con la configuración de los dominios es /etc/bind/named.conf y la configuración que vamos a poner de ejemplo es bastante básica:

\jump
\begin{rbox}[label=named.conf]
// Clave para actualizaciones tipo dyndns
include "/etc/bind/dyndns-keyfile";

// Listas de acceso

acl local{
	myipnetwork/24;
	localhost/32;
	};

acl slaves{
	ip.slave.dns1/32;
	ip.slave.dns2/32;
// Ad Infinitun ...
	};

acl dhcp3{
	ip.server.dhcp3/32;
	};


// Controlando el registro de eventos
logging {
        category lame-servers { null; };
        category cname { null; };
};

// El dominio raiz, este archivo contiene la lista de servidores raices, se
// puede actualizar con el comando dig:
zone "." {
        type hint;
        file "/etc/bind/db.root";
};

// Sera siempre el dominio autorizado para localhost

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

zone "chaosdimension.org" {
// Estamos en el servidor maestro
	type master;
// LIsta de acceso al dominio
// Quienes pueden preguntar
        allow-query {local; };
// Quienes pueden hacer transferencias (esclavos)
	allow-transfer {slaves;};
// Quienes pueden hacer modificaciones de información
	allow-update   {dhcp3;};        
// Notificaremos los cambios
	notify yes;
	file "/etc/bind/dominios/chaosdimension.org.dns";
};
\end{rbox}
\jump
\begin{rbox}[label=/etc/bind/dyndns-keyfile]
        key getip {
                algorithm hmac-md5;
                secret "7YUVBA4v/5I=";
        };
\end{rbox}
\jump
\begin{rbox}[label=dominios/chaosdimension.org.dns]
$TTL 86400
;
; Zone file for chaosdimension.org
;
; The full zone file
;
@       IN      SOA     chaosdimension.org hostmaster.chaosdimension.org. (
                        2005060901        ; serial, todays date + todays serial ##
                          8H              ; refresh, seconds
                          2H              ; retry, seconds
                          2W              ; expire, seconds
                          1D )            ; minimum, seconds
;
                NS      ns1.chaosdimension.org.        ; Inet Address of name server
                NS      ns2.chaosdimension.org.
                MX      10 mx.chaosdimension.org.     ; Primary Mail Exchanger
;

$ORIGIN chaosdimension.org.
sistemas        IN      A       192.168.0.155
ldap            IN      A       192.168.1.1

server1         IN      A       192.168.1.2
server2         IN      A       192.168.1.3
server3         IN      A       192.168.1.4


krb             IN      A       192.168.1.1
kdc             IN      A       192.168.1.1
kadmin          IN      A       192.168.1.1
kpasswd         IN      A       192.168.1.1

ns1             IN      A       192.168.1.1
ns2             IN      A       192.168.1.2

@               IN      A       192.168.1.1

\end{rbox}
\jump


\section{Una configuración avanzada}

\subsection{DHCP-ddns}

Si queremos actualización automatica desde los servidores DHCP, tendremos que cambiar cosas en nuestra configuración, entre otras cosas muy importantes permisos, en la configuración anterior se indica la lista de acceso dhcp3 para el acceso de actualización (update) desde el servidor DHCP.

\subsection{SDB}

SDB (BIND 9 Simplified Database Interface / Interface simplificado a la base de datos de Bind 9) es una base de datos en memoria de los contenidos de la configuración de bind9, este sistema es expansible a otros sistemas de bases de datos, con los cuales se puede manipular la información en Bind 9.

\subsection{DYNDNS}

DYNDNS es un protocolo de actualización de zonas DNS, usado tambien en bind 8 proporciona un sistema ideal para la actualización de servidores DNS sin tener que usar SDB, la actualización se realizara a traves del comando nsupdate, se necesita una clave para las actualizaciones que sera usada por este comando.

En la configuración hemos añadido un archivo que contine la clave de configuración, desde nsupdate podremos usar la misma clave y conseguir las actualizaciones, tenemos añadir o borrar direcciones:

\jump
\begin{rbox}[label=Añadiendo registro DNS]
# echo "update add nombre.chaosdimension.org 300 A dirección.ip"|/usr/sbin/nsupdate -k /home/keys/keys:getip.
\end{rbox}
\jump
\begin{rbox}[label=Eliminando registro DNS]
# echo "update delete nombre.chaosdimension.org"|/usr/sbin/nsupdate -k /home/keys/keys:getip.
\end{rbox}
\jump

\subsection{DNSSEC}

En el ejemplo anterior vemos un uso de dnssec, una infraestructura para la seguridad de bind, en este caso sencillo explicaremos la creacion tanto de dyndns-keyfile como la generacion de las claves que habra debajo del directorio /home/keys/keys, primero vamos al directorio y ejecutamos:
\jump
\begin{rbox}
# dnssec-keygen -a HMAC-MD5 -b 64 -n zone getip
Kgetip.+157+19720
\end{rbox}
\jump

Tendremos ahora dos archivo es ese directorio: Kgetip.+157+05353.key y Kgetip.+157+05353.private, del primero cogeremos la clave:
\jump
\begin{rbox}
# cat Kgetip.+157+05353.key
getip. IN KEY 256 3 157 7YUVBA4v/5I=
\end{rbox}
\jump

El valor \verb|7YUVBA4v/5I=| es que pondremos en el archivo dyndns-keyfile descrito anteriormente.


\subsection{Usando ldap2dns para sustituir al servidor Bind}

\section{El servidor Pdns}

\subsection{Usando Pdns-ldap como servidor de dominio}


\section{Configurar el dns para los dominios y servidores Kerberos}

\label{dns_kerberos}
\subsection{Bind9}

\jump
\begin{rbox}
_kerberos               IN      TXT     "CHAOSDIMENSION.ORG"
_kerberos._tcp          IN      SRV     0       0       88      krb.chaosdimension.org.
_kerberos._udp          IN      SRV     0       0       88      krb.chaosdimension.org.
_kerberos-master._udp   IN      SRV     0       0       88      krb.chaosdimension.org.
_kerberos-adm._tcp      IN      SRV     0       0       749     krb.chaosdimension.org.
_kpasswd._udp           IN      SRV     0       0       464     krb.chaosdimension.org.

_ldap._tcp.chaosdimension.org    IN        SRV     0       0       389     ldap.chaosdimension.org
\end{rbox}
\jump

\subsection{Pdns}
