quinta-feira, 15 de maio de 2014

Configuração de Servidor DHCP: Cisco x Linux

Olá Pessoal.

O tradicional serviço DHCP (Dynamic Host Configuration Protocol) é definido na RFC 2131 e diz respeito à distribuição automática de endereços em uma rede TCP/IPv4 através de um servidor. É nesse servidor que o administrador irá criar um escopo definindo o intervalo de endereços que será distribuído para as máquinas, bem como outras configurações importantes: gateway da rede, servidores de resolução de nomes (DNS), opções, etc.

O servidor fica responsável por manter uma tabela com o registro dos clientes (MAC), seus respectivos endereços atribuídos (IP) e seu tempo de empréstimo (lease). Uma vez que o servidor mantém essa tabela com o "estado" dos clientes associando os endereços físicos das máquinas (MAC) com os endereços lógicos (IP) atribuídos, então dizemos que esse é um serviço de natureza stateful, ou seja, é mantido um registro de estado.

A sua configuração através de um roteador Cisco é bastante simples, bastando a entrada de alguns poucos comandos para fazê-lo. Vamos observar o cenário da figura abaixo em que temos uma rede 192.168.221.0/24, sendo que todas as máquinas estarão configuradas para obter o endereço dinamicamente e o roteador será responsável por executar o serviço DHCP. As configurações necessárias seriam as seguintes:




01. Router(config)# ip dhcp excluded-address 192.168.221.1 192.168.221.30
02. Router(config)# ip dhcp pool NOME-ESCOPO
03. Router(config-dhcp)# network 192.168.221.0 255.255.255.0
04. Router(config-dhcp)# default-router 192.168.221.1
05. Router(config-dhcp)# dns-server 192.168.221.2 208.67.222.222
06. Router(config-dhcp)# domain-name nome.com.br
07. Router(config-dhcp)# lease 1

Na primeira linha definimos quis endereços devem ser excluídos do escopo que será posteriormente criado, uma vez que esses endereços serão atribuídos estaticamente porque são reservados para os servidores. Na segunda linha foi dado um nome para o escopo que irá compreender os endereços da rede informada na terceira linha, sendo que nas linhas 4 e 5 são informados os endereços que as máquinas deverão utilizar como gateway e DNS. A linha 6 informa o nome de domínio que deve ser anexado como sufixo aos nomes. A linha 7 poderia ser omitida porque indica que a duração do empréstimo é de 1 dia (padrão). Pois bem, simples até aqui!

Agora vamos considerar que no cenário anterior o roteador não ficará responsável pela execução do serviço DHCP, sendo que um dos servidores está instalado com Linux Debian e deverá assumir essa função, ou seja, será um servidor DHCP que estará configurado na rede com o IP 192.168.221.5. A boa notícia é que esse procedimento no Linux também é bastante simples, então vamos à configuração:

1. Instalação do Serviço DHCP

A primeira etapa consiste na instalação do pacote "isc-dhcp-server" para que o Linux possa ser posteriormente configurado como servidor DHCP na rede. Essa tarefa é simples e rápida através do APT (Debian):

root@LinuxServer:/# apt-get install isc-dhcp-server

2. Ativar Interfaces p/ Responder Requisições DHCP

A segunda etapa é informar em qual(is) interface(s) o servidor irá responder requisições dos clientes da rede, através da edição do arquivo "/etc/default/isc-dhcp-server".

#--- em /etc/default/isc-dhcp-server
(...) Conteúdo Omitido
#On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#Separate multiple interfaces with spaces, e.g. "eth0 eth1".

INTERFACES="eth1"

3. Configurar o Servidor DHCP

A etapa mais importante consiste na configuração do servidor DHCP propriamente dito, tarefa que é realizada através da edição do arquivo "/etc/dhcp/dhcpd.conf".

#--- em /etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 86400;
max-lease-time 604800;
authoritative;

subnet 192.168.221.100 netmask 255.255.255.0
{
  range 192.168.221.31 192.168.221.199;
  option routers 192.168.221.1;
  option domain-name-servers 192.168.221.2, 208.67.222.222;
  option domain-name "nome.com.br";
}

Obs.: Os tempos são configurados em segundos, ou seja, um empréstimo de 86400s equivale a 1 dia. O tempo padrão do empréstimo será o valor do default-lease-time, no entanto as interfaces podem solicitar um determinado tempo do empréstimo que não pode ultrapassar o valor de max-lease-time (604800s = 1 semana).

4. Reserva de Empréstimo (Opcional)

Opcionalmente, o administrador da rede pode reservar/fixar o lease (empréstimo) de um endereço IP específico para um determinado cliente através da associação com o seu endereço físico (MAC).

#--- em /etc/dhcp/dhcpd.conf
host NOME
{
  hardware ethernet 00:00:00:00:00:0a;
  fixed-address 192.168.221.37;
}

5. Manipulação do Serviço DHCP

Por fim, depois de configurado o servidor, basta iniciar o serviço para realizar a distribuição dinâmica de endereços via DHCP. O comando abaixo pode ser inserido no arquivo "/etc/rc.local" para que o serviço DHCP seja iniciado automaticamente em caso de boot do servidor.

root@LinuxServer:/# service isc-dhcp-server start
[ ok ] Starting ISC DHCP Server: dhcpd.

6. Visualização de Endereços Concedidos (Lease)

O administrador da rede pode visualizar a relação de todos os endereços concedidos pelo servidor DHCP, listando o conteúdo do arquivo "/var/lib/dhcp/dhcpd.leases".

root@LinuxServer:/# cat /var/lib/dhcp/dhcpd.leases
(...) Saída Omitida

Para obter informações detalhadas, consulte o manual via linha de comando:

root@LinuxServer:/# man dhcpd.conf

Abraço.

Samuel.

13 comentários:

  1. Antes que me perguntem, para configurar uma reserva nos equipamentos da Cisco é necessário criar um pool específico com os seguintes comandos:

    ip dhcp pool RESERVA
    host 192.168.221.37 255.255.255.0
    client-identifier 0000.0000.000a

    ResponderExcluir
  2. Otro ejemplo de como configurar reservas por MAC en un pool de DHCP:

    http://www.sysadmit.com/2015/03/cisco-dhcp-ip-por-mac.html

    ResponderExcluir
  3. Excelente texto e cenário bem claro. Porém me pergunto: este servidor linux que hospeda o serviço dhcp, no caso possui uma única interface de rede. Ao mesmo tempo queria distribuir diversos ips para várias redes (vários escopos), seria possível apenas com uma interface física de rede? Ou seja, tenho várias faixas de ips e queria fazer digamos 10 escopos de ips. Distribuindo estes ips por uma única interface de rede é possível? Teria que utilizar interface virtual? Obrigado

    ResponderExcluir
  4. Aproveito para registrar uma dúvida de alguns alunos:

    O arquivo /var/lib/dhcp/dhcpd.leases faz o registro dos empréstimos de endereços com base no horário internacional (UTC). Para que o arquivo de log exiba as informações com base no horário local do servidor, basta adicionar o seguinte parâmetro no arquivo /etc/dhcp/dhcpd.conf:

    db-time-format local;

    ResponderExcluir
  5. Tem como configurar serviço de dhcp-server em um switch? se for possivel, é viavel ?

    ResponderExcluir
    Respostas
    1. Sim, é possível e perfeitamente viável. Você apenas deve verificar se o switch tem suporte ao serviço DHCP, um recurso comum na família Catalyst da Cisco.

      Excluir
  6. Olá tenho uma duvida muito grande acerca do pool dhcp.
    É possível configurar as pools dhcp e dizer ao servidor que tipo de equipamento vai pegar endereços de cada faixa de endereços ou até mesmo sub-rede? Por exemplo Tendo no escritório um "laptop" ligado via wifi, um "PC" ligado via ethernet que está ligado ao "telefone ip", uma impressora. Desejo que cada um desses tipos de equipamentos e via de conexão, pegue endereços via dhcp em uma sub-rede diferente.

    ResponderExcluir
  7. Sim. Basta colocar os equipamentos de mesma natureza na mesma VLAN (e mesma sub-rede), além de configurar múltiplos escopos no servidor DHCP e o relay do tráfego de broadcast no roteador que é gateway das sub-redes. Há outro artigo no blog com um exemplo dessa configuração...

    ResponderExcluir
  8. É fácil fazer isso pensando em VLANs, mas a minha dúvida continua:
    Na empresa onde trabalho encontrei o seguinte: Telefones Ip recebem endereços de uma subrede e os PCs de outra estando eles ligados exactamente na mesma porta, no caso de VLANs são definidas em que VLAN a porta pertence para poder receber tal endereço, porém neste caso posso mudar o equipamento em qualquer porta que seja receberá sempre endereço da sub-rede onde pertence, por exemplo se eu ligar uma impressora na porta f0/1 ela recebe 10.80.16.30, e se na mesma porta eu ligar um telefone ele recebe 10.80.3.15, sendo um PC ele recebe 10.80.111.45 por exemplo. Não é aleatório pois testei várias vezes e vi que as mesmas sub-redes são dadas exactamente para os mesmos tipos de hosts. Isso sem falar das câmaras e relógios de ponto que também estão em redes diferentes, mas estes sendo suas portas fixas a solução é mesmo VLAN.

    ResponderExcluir
  9. Este comentário foi removido pelo autor.

    ResponderExcluir
  10. Eu fiz
    R4>en
    Password:
    R4#sh run
    Building configuration...

    Current configuration : 1554 bytes
    !
    version 15.1
    no service timestamps log datetime msec
    no service timestamps debug datetime msec
    no service password-encryption
    !
    hostname R4
    !
    !
    !
    enable secret 5 $1$mERr$hx5rVt7rPNoS4wqbXKX7m0
    !
    !
    ip dhcp excluded-address 10.10.4.1
    !
    ip dhcp pool R4
    network 10.10.4.0 255.255.255.252
    default-router 10.10.4.1
    dns-server 209.165.44.2
    !
    !
    !
    ip cef
    ipv6 unicast-routing
    !
    no ipv6 cef
    !
    !
    !
    username admin secret 5 $1$mERr$hx5rVt7rPNoS4wqbXKX7m0
    username administrador password 0 cisco
    !
    !
    license udi pid CISCO2911/K9 sn FTX1524EQ94
    !
    !
    !
    !
    !
    !
    !
    !
    !
    ip domain-name R4
    !
    !
    spanning-tree mode pvst
    !
    !
    !
    !
    !
    !
    interface GigabitEthernet0/0
    ip address 10.10.4.1 255.255.255.0
    ip nat inside
    duplex auto
    speed auto
    ipv6 address FE80::4 link-local
    ipv6 address 2001:DB8:A:4::1/64
    !
    interface GigabitEthernet0/1
    no ip address
    duplex auto
    speed auto
    shutdown
    !
    interface GigabitEthernet0/2
    no ip address
    duplex auto
    speed auto
    shutdown
    !
    interface Serial0/0/0
    no ip address
    clock rate 2000000
    shutdown
    !
    interface Serial0/0/1
    ip address 64.103.17.2 255.255.255.252
    ip nat outside
    ipv6 address FE80::4 link-local
    ipv6 address 2001:DB8:A:103::2/64
    !
    interface Vlan1
    no ip address
    shutdown
    !
    ip nat inside source list 1 interface Serial0/0/1 overload
    ip classless
    ip route 0.0.0.0 0.0.0.0 Serial0/0/1
    !
    ip flow-export version 9
    !
    ipv6 route ::/0 Serial0/0/1
    !
    access-list 1 permit 10.10.4.0 0.0.0.255
    !
    banner motd ^C Avisar ^C
    ...

    mas o DHCP está dando erro: A PIPA !!

    o que fazer??

    ResponderExcluir