Como voce já deve ter imaginado, o uso do DHCP pode facilitar em muito a vida de uma adminitrador de redes :-), eu espero que este tutorial seja um bom ponto de partida para quem ainda nao conheçe o protocolo.
Ps. Eu optei por escrever sobre wide dhcp por ser o servidor que eu estou acostumado a utilizar. ok?
Observação
Antes de instalar o servidor de Wide DHCP você deve recompilar o seu kernel incluindo suporte ao "Berkeley packet filter", sem isso o DHCP nao irá funcionar.
Para isso basta editar o arquivo de configuração do seu kernel e incluir a seguinte linha:
pseudo-device bpfilter 4 #Berkeley packet filter
Após inserir a linha acima salve o arquivo e recompile o seu kernel, para maiores informações sobre como recompilar o seu kernel clique aqui.
Após a instalação do novo kernel você deve criar as entradas necessárias ao funcionamento do bpf no diretório /dev. Para isso execute os comandos:
# cd /dev
# ./MAKEDEV bpf0
# ./MAKEDEV bpf1
# ./MAKEDEV bpf2
# ./MAKEDEV bpf3
Feito isso nos podemos continuar ...
Instalação
Voce pode instalar o wide-dhcp-1.4.0p3 através
do ports
ou dos packages.
Para instala-lo através dos packages, você
deverá inserir o CD ROM de instalação do FreeBSD no
drive e executar os seguintes comandos:
# mount /cdrom
# cd /cdrom/packages/all
# pkg_add wide-dhcp-1.4.0p3.tgz
Se voce não possui o CD, voce pode baixar o arquivo por FTP para um diretório qualquer e instalá-lo normalmente.
Configuração básica
Toda a configuração do servidor wide
dhcp é feita através de 2 arquivos, são eles:
Dentre os arquivos citados acima o principal deles
é o dhcpdb.pool , pois é neste arquivo que voce define os
IPs disponiveis. A estrutura deste arquivo segue a mesma estrutura do termcap,
cada linha é interpretada como uma entrada, ela pode continuar na
linha seguinte desde que você termine a linha com uma barra invertida
(\), um campo é separado do outro
por um : , a linhas iniciadas com
um # são ignoradas.
Abaixo temos um arquivo básico de configuração, que foi comentado para facilitar o entendimento:
# define uma entrada global, utilizada por todos os hosts
#
# O campo "snmk" define a netmask a ser utilizada pelos clientes.
# O campo "tmof" define o tempo, em segundos, a compensar desde
o horario GMT.
#
global:
:!snmk=255.255.255.0:tmof=32400:
# define uma entrada mestre para uma subnet.
#
# O campo "tblc" insere as informações da entrada
global a entrada subnet30.
# O campo "rout" informa ao cliente os roteadores disponiveis na
sua subnet.
# O campo "dht1" especifica que o cliente pode extender em até
50% o tempo concedido para o uso de um IP.
# O campo "dht1" especifica que o cliente pode iniciar um pedido
via broadcasting para extender em até 85%
# o tempo concedido para o uso de um IP.
# O campo "brda" especifica o endereço de broadcast.
#
subnet30: :tblc=global:rout=192.168.1.1:dht1=500:dht2=850:\
:brda=192.168.1.255:
# define entradas para alocações estáticas de
IP. (DHCP, BOOTP)
#
# O campo "ipad" define o IP a ser alocado ao cliente.
# O campo "clid" define o endereco MAC do cliente que vai receber
o IP definido no campo ipad.
#
3002: :ipad=192.168.1.2:tblc=subnet30:clid="1:0x0080c75fdc03":
3003: :ipad=192.168.1.3:tblc=subnet30:clid="1:0x08004600e5d5":
# define entradas para alocações dinamicas de IP (DHCP)
#
# O campo "dfll" define o tempo default, em segundos, pelo qual
o cliente poderá usar o IP.
# O campo "maxl" define o tempo maximo, em segundos, pelo qual o
cliente poderá usar o IP.
# Se o campo "maxl" for definido como 0xffffffff,
o tempo concedido ao cliente para o uso do IP é ilimitado.
# Voce precisa de tantas entradas quantos forem os IPs disponíveis
:-|
#
3004: :ipad=192.168.1.4:dfll=3600:maxl=7200:tblc=subnet30:
3005: :ipad=192.168.1.5:dfll=3600:maxl=7200:tblc=subnet30:
# define entradas para alocações dinamicas de IP (BOOTP)
#
# O campo "albp=true" informa que este IP pode ser alocado para
um cliente BOOTP.
#
3006: :ipad=192.168.1.6:albp=true:tblc=subnet30:
3007: :ipad=192.168.1.7:albp=true:tblc=subnet30:
#Fim
Os arquivo /etc/dhcpdb.relay e /etc/dhcpdb.server
Para ilustar a sintaxe dos arquivo dhcpdb.relay e dhcpdb.server, consideremos os exemplos abaixo:
Exemplo 1 - Servidor com duas interfaces de rede.
-----+----------- 192.168.1.0/255.255.255.0
|
+---+---+
| Server |
+---+---+
|
-----+----------- 192.168.2.0/255.255.255.0
Na configuração acima, o arquivo dhcpdb.relay
deve permanecer vazio, e não é necessário a existêcia
do arquivo dhcpdb.server, pois como o servidor suporta as duas redes, nao
é necessario o uso de um agente de retransmissão.
Voce não deve se esquecer de especificar
as duas interfaces de rede, no momento em que carregar o servidor, ou ele
não irá funcionar.
Exemplo 2 - Servidor e agente de retransmissão (RA) situados em redes diferentes, ambos com uma única interface de rede e o roteador não pode atuar como RA.
+-------+
| Server |
+--+---+
|192.168.1.2
----+----------------------------- 192.168.1.0/255.255.255.0
|
+--+---+
|Router|
+--+---+
|
-----+----------------------------- 192.168.2.0/255.255.255.0
|192.168.2.2
+--+---+
| RA |
+------+
Para que essa estrutura funcione voce deve criar no servidor o arquivo /etc/dhcpdb.relay com o conteudo:
192.168.2.2 255.255.255.0
Neste arquivo nós especificamos o IP do agente
de retransmissão e a netmask da rede a que o servidor está
conectado.
Já no agente de retransmissão, voce
deve criar o arquivo /etc/dhcpdb.server com o seguinte conteudo:
1
192.168.1.2
Como existe apenas um servidor, a primeira linha deve ser 1, ou seja o agente de retransmissão só ira enviar mensagens para um servidor, a linha seguinte indica o IP. Se voce possuir N servidores, a primeira linha do arquivo seria N, seguido por N outras linhas contendo cada uma o IP de um servidor.
Exemplo 3 - Roteador atuando como agente de retransmissão.
+------+
|Server|
+--+---+
|192.168.1.2
-----+------------------------------ 192.168.1.0/255.255.255.0
|192.168.1.1
+----+------+
| Router/RA |
+----+------+
|192.168.2.1
-----+------------------------------ 192.168.2.0/255.255.255.0
Neste exemplo, o arquivo /etc/dhcpdb.server do agente de retransmissão é o mesmo do exemplo anterior:
1
192.168.1.2
O agente de retransmissão não precisa cuidar da rede 192.168.1.0/255.255.255.0, pois o server se encarrega disso, pois o DHCP necessita que o agente de retransmissão informe o IP da interface de rede da qual ele recebeu a solicitação. Deste modo para que o agente de retransmissão cuide da rede 192.168.2.0/255.255.255.0, o conteudo o arquivo dhcpdb.relay do servidor seria:
192.168.2.1 255.255.255.0
Se o servidor pertencer a uma terceira rede, e voce desejar que o agente de retransmissão cuide de ambas as redes, 192.168.1.0/255.255.255.0 e 192.168.2.0/255.255.255.0, simultaneamente, o conteudo do arquivo dhcpdb.relay do servidor deve ser:
192.168.1.1 255.255.255.0
192.168.2.1 255.255.255.0
Mas para que isso funcione, voce não deve se esquecer de especificar as duas interfaces de rede, no momento em que carregar o agente de relay, ou ele não irá funcionar.
Habilitando o servidor
Quando voce instala o wide-dhcp-1.4.0p3 ,
ele cria o arquivo /usr/local/etc/rc.d/wide-dhcps.sh.sample
com o seguinte conteudo:
#!/bin/sh
DB_POOL=/etc/dhcpdb.pool
DB_RELAY=/etc/dhcpdb.relay
DB_BIND=/var/db/dhcpdb.bind
if [ -f ${DB_POOL} -a -f ${DB_RELAY} \
-a -x /usr/local/sbin/dhcps ]; then
if [ -f ${DB_BIND} ]; then
find ${DB_POOL} -newer ${DB_BIND} -exec rm ${DB_BIND} \;
fi
/usr/local/sbin/dhcps [Interface
Name]
echo -n ' dhcps'
fi
#
Para habilitar a inicialização do servidor
dhcp no momento do boot, voce deve renomear o arquivo para wide-dhcps.sh
e substitua a expressão [Interface Name] pelo
nome da(s) sua(s) Interface(s) de rede. Por exemplo, se sua interface de
rede for ed1:
...
/usr/local/sbin/dhcps ed1
...
Caso voce possua 2 interfaces de rede, ed1 e vx0:
...
/usr/local/sbin/dhcps ed1
vx0
...
Habilitando o agente de retransmissão
Voce deve criar o arquivo /usr/local/etc/rc.d/relay.sh com o seguinte conteudo:
#!/bin/sh
/usr/local/sbin/relay [ Interface Name ]
echo -n ' DHCP Relay Agent'
#
Como no exemplo anterior, substitua a expressão [ Interface Name ] pelo nome da sua interface de rede, salve o arquivo e sete ele como executavel.
Resumindo