Skip to main content

Learning DHCP


Introdução ao DHCP


O DHCP (Dynamic Host Configuration Protocol) baseado no BOOTP, é um protocolo de rede que automatiza a configuração de dispositivos em redes TCP/IP. Sua principal função é atribuir dinamicamente endereços IP e outros parâmetros de rede, como máscara de sub-rede e gateway padrão, para que dispositivos possam se conectar à rede sem precisar de configuração manual.


No modelo tradicional, um administrador de rede teria que configurar manualmente cada dispositivo, o que seria inviável em redes maiores. Com o DHCP, esse processo é simplificado: os dispositivos (clientes) solicitam as configurações de rede a um servidor DHCP, que responde com as informações necessárias. Isso facilita a adição de novos dispositivos e permite maior flexibilidade e mobilidade, especialmente para dispositivos que se conectam e desconectam com frequência, como laptops e smartphones.


Além disso, o DHCP permite a administração centralizada de endereços IP, ajudando a evitar conflitos de IP e facilitando o gerenciamento de grandes redes corporativas. O protocolo é amplamente utilizado e está em constante evolução, com suporte tanto de fornecedores comerciais quanto de soluções open-source, como o ISC DHCP.


O DHCP, por definição, utiliza a porta 67 para escutar as requisições dos clientes. Quando um dispositivo solicita um endereço IP, essa solicitação é recebida pelo servidor DHCP na porta 67. Ao responder ao cliente, o servidor envia a resposta através da porta 68, que é utilizada pelo cliente para receber essa resposta. Todas as comunicações são UDP.


Vamos usar uma aplicação de DHCP que é desenvolvida pela ISC (Internet System Consortium), eles também desenvolvem o BIND e o NTP.



Funcionamento do DHCP


O DHCP segue um modelo de comunicação cliente-servidor, no qual servidores DHCP dedicados são responsáveis por alocar endereços IP e fornecer parâmetros de configuração de rede para dispositivos configurados dinamicamente, conhecidos como clientes. Ele possui dois componentes principais: o primeiro é o protocolo que transmite os parâmetros de configuração de rede, como gateway e DNS, do servidor DHCP para os hosts; o segundo é o mecanismo de alocação de endereços IP, conhecido como leasing, que define o tempo pelo qual o cliente pode utilizar o endereço atribuído.



Origem de leasing


Quando o cliente deseja ingressar em uma rede, ele inicia um processo de quatro etapas: DHCPDISCOVER, DHCPOFFER, DHCPREQUEST e DHCPACK. O processo começa com o cliente enviando uma mensagem de broadcast chamada DHCPDISCOVER, usando seu endereço MAC, para localizar servidores DHCPv4 disponíveis na rede. Essa mensagem é enviada para todos os dispositivos na rede, permitindo que os servidores DHCP respondam e ofereçam suas configurações.

O DHCPDISCOVER é enviada como um broadcast para o endereço IP 255.255.255.255.

  1. Descoberta DHCP (DHCPDISCOVER)
    O processo começa com o cliente enviando uma mensagem de broadcast DHCPDISCOVER para localizar servidores DHCPv4 na rede. Como o cliente ainda não tem um endereço IPv4 válido, ele utiliza endereços de broadcast tanto na Camada 2 (FF:FF:FF:FF:FF:FF) quanto na Camada 3 (255.255.255.255) para se comunicar com os servidores DHCP.
  1. Pacote de DHCP Offer (DHCPOFFER)
    Quando um servidor DHCP recebe a mensagem DHCPDISCOVER, ele reserva um endereço IPv4 disponível para o cliente e cria uma entrada ARP que associa o endereço MAC do cliente ao endereço IPv4 reservado. Em seguida, o servidor envia uma mensagem DHCPOFFER em Unicast para o cliente, usando o endereço MAC do servidor como origem e o endereço MAC do cliente como destino. A mensagem Unicast significa que o servidor passa a se comunicar diretamente com cliente, utilizando o endereço MAC ou IP desse cliente como destino.
  1. Solicitação de DHCP (DHCPREQUEST)
    Após receber a mensagem DHCPOFFER, o cliente responde com uma mensagem DHCPREQUEST, confirmando a aceitação da oferta de um servidor específico. Esse pacote serve tanto para gerar um novo aluguel de IP quanto para renovar um aluguel existente. A mensagem DHCPREQUEST é enviada via broadcast, informando o servidor escolhido e rejeitando implicitamente outras ofertas de servidores DHCP. Como muitas redes corporativas usam vários servidores DHCPv4 A mensagem DHCPREQUEST é enviada na forma de um broadcast para informar a esses servidores DHCPv4 sobre a oferta aceita.

  2. Reconhecimento de DHCP (DHCPACK)
    Quando o servidor recebe o DHCPREQUEST, ele verifica se o endereço IP não está em uso, normalmente enviando um ping (ICMP) para o IP reservado. Caso o endereço esteja livre, o servidor envia uma mensagem DHCPACK em unicast, confirmando o aluguel. O cliente, ao receber o DHCPACK, realiza uma pesquisa ARP para garantir que o endereço IP não esteja em uso por outro dispositivo. Se não houver resposta, o cliente confirma que o endereço é válido e começa a utilizá-lo.

    Tanto o cliente quanto o servidor realizam essas verificações para garantir que o endereço IP atribuído não esteja em uso, porque existe a possibilidade de algum dispositivo ter sido configurado manualmente com o mesmo IP.



Renovação de leasing


A renovação de leasing no DHCP é feita em dois momentos principais durante o período de concessão (lease) do endereço IP atribuído ao cliente:

  1. T1 - Primeira tentativa de renovação (50% do tempo de lease)
    Quando o cliente DHCP obtém um endereço IP, ele recebe um período de concessão (lease time). Quando 50% desse tempo expira (conhecido como T1), o cliente tenta renovar o lease enviando uma mensagem DHCPREQUEST diretamente (unicast) ao servidor DHCP que concedeu o endereço. Se o servidor responder com uma mensagem DHCPACK, o lease é renovado, e o cliente pode continuar usando o mesmo endereço IP. Nesse ponto, outros parâmetros, como gateway ou DNS, também podem ser atualizados.

  2. T2 - Segunda tentativa de renovação (87,5% do tempo de lease)
    Se o cliente não conseguir renovar o lease durante a tentativa em T1 (por exemplo, se o servidor estiver indisponível), ele tentará novamente após 87,5% do tempo do lease ter passado (conhecido como T2). Desta vez, a solicitação de renovação é enviada como broadcast, já que o cliente pode não saber se o servidor original ainda está disponível ou se mudou de rede.

  3. Expiração do lease
    Se, após o tempo total do lease, o cliente não conseguir renovar o contrato, ele perde o endereço IP e deve iniciar o processo completo de obtenção de um novo endereço, começando com uma mensagem DHCPDISCOVER.



Mecanismo de Leasing (alocação)


O DHCP oferece três métodos principais para a alocação de endereços IP:

  1. Alocação Automática
    Nesse modo, o DHCP atribui um endereço IP permanente ao cliente. Uma vez alocado, o IP é sempre associado ao mesmo dispositivo, tornando-se uma configuração fixa.

  2. Alocação Dinâmica
    Aqui, o DHCP atribui um endereço IP ao cliente por um tempo limitado, conhecido como lease. Esse endereço IP pode ser reutilizado depois que o cliente o libera ou quando o tempo de lease expira. Esse método é o mais comum, ideal para redes com dispositivos que se conectam temporariamente ou em cenários onde há um número limitado de endereços IP disponíveis, permitindo sua reutilização. ante recuperá-los quando clientes antigos forem aposentados.

  3. Alocação Manual
    Nesta opção, o administrador da rede define manualmente o endereço IP do cliente, e o DHCP apenas distribui essa configuração para o dispositivo. É útil em casos onde é necessário controlar rigorosamente a atribuição de IPs, evitando erros de configuração manual. É utilizado um mapeamento estático entre o endereço IP e o MAC address (endereço físico) do cliente na configuração do DHCP.



Instalando o serviço do DHCP


A instalação e configuração será feita no Ubuntu, mas tanto sua configuração e instalação é idêntica para sistemas base Debian e Ubuntu. Instale a aplicação do servidor DHCP:


$ sudo apt install isc-dhcp-server -y

Para evitar que o servidor DHCP escute em todas as interfaces de rede e responda a solicitações de DHCP indiscriminadamente, vamos configurar especificamente quais interfaces o serviço DHCP deve monitorar para receber e atribuir endereços IP na rede. Isso garante que o DHCP opere apenas nas interfaces desejadas, melhorando a segurança e o controle da rede.

vim /etc/default/isc-dhcp-server
# Remova a linha abaixo se não for utilizar IPv6:
INTERFACESv6=""

# Altere as variáveis conforme abaixo:
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf # Arquivo de configuração para o IPv4.
DHCPDv4_PID=/var/run/dhcpd.pid # Onde ficara gravado o PID do serviço.
INTERFACESv4="eth1"

# Nesse caso, a segunda interface de rede do servidor é a 'enp0s8', a primeira interface fica
# dedicada ao link de Internet.

# Se for usar duas ou mais interfaces de rede, pode deixar no padrão abaixo:
INTERFACES="eth0 eth1"

Como nosso servidor é apenas IPv4, só vou deixar as linhas que referenciam o IPv4. Vou também remover o arquivo de configuração relacionado ao IPv6.

$ sudo rm /etc/dhcp/dhcpd6.conf



Arquivos de configurações


O DHCP da ISC fornece alguns arquivos de configuração, vejamos a explicação de cada um deles.

ArquivoDescrição
/etc/default/isc-dhcp-serverConfigura opções do processo do DHCP quando ele é iniciado, normalmente podemos ver essas opções como argumentos ao executar systemctl status isc-dhcp-server.
/etc/dhcp/dhcpd.confEste é o principal arquivo de configuração do ISC DHCP Server. Ele contém informações sobre a configuração da rede.
/etc/dhcp/dhcpd6.confEste é o arquivo de configuração para o suporte do protocolo DHCPv6, que é usado para atribuir endereços IPv6 aos clientes da rede. Ele contém informações semelhantes ao dhcpd.conf, mas específicas para o DHCPv6.
/var/lib/dhcp/dhcpd.leasesEste arquivo é gerado automaticamente pelo servidor DHCP e contém informações sobre os endereços IP que foram atribuídos aos clientes da rede.
/etc/dhcp/dhcpd.omapi.keyEste é um arquivo de chave usado pelo OMAPI (Object Management API) do ISC DHCP Server. O OMAPI é uma API usada para gerenciar o servidor DHCP e o arquivo de chave é usado para autenticar as conexões de gerenciamento OMAPI.
/var/lib/dhcp/dhcpd.leases~Este arquivo é uma cópia de backup do dhcpd.leases original.


Opções de configuração


Durante a configuração do DHCP usaremos uma variedade bastante grande de opções para configurar não somente o endereçamento fornecido aos clientes, mas também como o servidor DHCP deve trabalhar e operar. Vejamos algumas das opções de configuração mais usadas:


OpçãoDescrição
option domain-name "exemplo.com";Define o domínio que será atribuído aos clientes que obtiverem um endereço IP através do servidor DHCP.
option domain-name-server "xxx";Define os servidores DNS fornecidos juntamente com as configurações de endereçamento. Pode usar IP ou nome dos servidores, para mais de um separar com vírgula ,.
option domain-name-search 'exemplo.com';Define o 'search' usado nas consultas DNS.
option routers IP;Define o GW (Gateway) para a rede em questão;
option smtp-server IP;Define servidores SMTP disponível para o cliente.
option pop-server IP;Define servidores POP disponível para o cliente.
option ntp-servers IP;Define os servidores NTP para o cliente.
option static-routes IP1 IP2;Cria uma rota estática. É ilegal definir uma rota default aqui.
authoritativeIndica que esse servidor é autoritativo.
ddns-update-styleControla se o servidor tentará ou não fazer uma atualização DNS quando um IP for emprestado. DDNS (Dynamic Domain Name System) atualizará o nome do host para o novo IP fornecido no DNS.
db-time-format localFaz com que o arquivo /var/lib/dhcp/dhcpd.leases exiba os empréstimos de IP mostrando a hora do servidor.
default-lease-time 86400Tempo de empréstimo em segundos (um dia = 86400) que o servidor DHCP usa para verificar se o IP ainda está em uso.
max-lease-time 604800Tempo máximo que pode usar a configuração (Uma semana).
log-facility local7;Define o nome da facility para configurar os logs do DHCP juntamente ao syslog para outro arquivo de log.
allow booting;Permite que os clientes recebam opções de inicialização específicas, como informações de inicialização do sistema operacional ou um arquivo de imagem de inicialização do disco. Essa opção deve ser usada em conjunto com a opção filename e a opção next-server.
allow bootp;Permite que os clientes usem o protocolo BOOTP. Quando essa opção é ativada, o ISC DHCP Server responderá a solicitações BOOTP e as tratará como solicitações DHCP.
ignore client-updates;Faz com que o servidor DHCP ignore as tentativas dos clientes de atualizarem seus registros DNS.
deny unknown-clients;Só fornece endereçamento para Hosts conhecidos pelo servidor DHCP, precisa adicione o endereço mac dos Hosts para o servidor conhecer.
range dynamic-bootp 192.168.1.241 192.168.1.252;Declara um intervalo de endereços IP que pode ser atribuído a hosts usando o protocolo BOOTP.
next-server IP;Informa ao cliente o endereço IP do servidor TFTP a ser usado durante o processo de inicialização do cliente. Essa opção é geralmente usada em conjunto com o protocolo PXE (Preboot Execution Environment) para permitir a inicialização de um sistema operacional via rede.
server-name "IP";Fornecer o nome do servidor DHCP. Essa opção pode ser usada para fins de registro de eventos e auditoria, ou para que os clientes possam distinguir entre diferentes servidores DHCP em sua rede.

O que é bootp?

O BOOTP (Bootstrap Protocol) é um protocolo de rede utilizado para inicializar dispositivos de rede, permitindo que eles obtenham informações de configuração essenciais antes de serem utilizados na rede, como um endereço IP, máscara de sub-rede e gateway padrão.


O BOOTP funciona através de um servidor que responde às solicitações dos dispositivos de rede (clientes), fornecendo essas informações de configuração. Ele pode ser configurado para fornecer parâmetros específicos para determinados dispositivos com base no endereço MAC ou em outros critérios.


O BOOTP ainda é usado em alguns casos, especialmente em configurações de PXE (Preboot Execution Environment), que é uma extensão do protocolo BOOTP para inicialização de dispositivos através da rede, geralmente para instalar sistemas operacionais remotamente.



Configurando servidor DHCPv4


Antes de começarmos as configurações, é importante entender algumas opções disponíveis, muitas das quais podem ser encontradas no próprio arquivo de configuração, localizado em /etc/dhcp/dhcpd.conf. Para garantir segurança e evitar perda de dados, vamos primeiro criar um backup desse arquivo.

$ sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak && touch /etc/dhcp/dhcpd.conf


Agora vamos configurar o serviço de DHCPv4:

vim /etc/dhcp/dhcpd.conf
authoritative;
ignore client-updates;

db-time-format local;
ddns-update-style none;

default-lease-time 86400;
max-lease-time 172800;

log-facility local7;

subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.15 192.168.100.115;
option subnet-mask 255.255.255.0;
option routers 192.168.100.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
}


Feito isso, vamos reiniciar e ver o status do serviço:

Veja o status do serviço, se estiver ativo (Rodando), você provavelmente terá um servidor DHCP configurado.

# Reinicie o serviço:
$ sudo systemctl restart isc-dhcp-server

# Veja se subiu sem nenhum erro:
$ sudo systemctl status isc-dhcp-server
● isc-dhcp-server.service - ISC DHCP IPv4 server
Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2024-09-08 20:24:22 -03; 3s ago
Docs: man:dhcpd(8)
Main PID: 67821 (dhcpd)
Tasks: 4 (limit: 2220)
Memory: 4.5M
CPU: 9ms
CGroup: /system.slice/isc-dhcp-server.service
└─67821 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf eth1

Sep 08 20:24:22 ctos dhcpd[67821]: For info, please visit https://www.isc.org/software/dhcp/
Sep 08 20:24:22 ctos dhcpd[67821]: Wrote 0 leases to leases file.
Sep 08 20:24:22 ctos sh[67821]: Wrote 0 leases to leases file.
Sep 08 20:24:22 ctos dhcpd[67821]: Listening on LPF/eth1/52:54:00:68:78:55/192.168.100.0/24
Sep 08 20:24:22 ctos sh[67821]: Listening on LPF/eth1/52:54:00:68:78:55/192.168.100.0/24
Sep 08 20:24:22 ctos dhcpd[67821]: Sending on LPF/eth1/52:54:00:68:78:55/192.168.100.0/24
Sep 08 20:24:22 ctos sh[67821]: Sending on LPF/eth1/52:54:00:68:78:55/192.168.100.0/24
Sep 08 20:24:22 ctos dhcpd[67821]: Sending on Socket/fallback/fallback-net
Sep 08 20:24:22 ctos sh[67821]: Sending on Socket/fallback/fallback-net
Sep 08 20:24:22 ctos dhcpd[67821]: Server starting service.


O cliente


Agora, em uma máquina cliente, vamos configurar para que ela obtenha um endereço IP via DHCP. No meu caso, estou utilizando o Netplan como gerenciador de rede. Vou configurar o Netplan para usar DHCP, e em seguida, veremos que o cliente receberá um endereço IP automaticamente do servidor DHCP. Olhando os logs no servidor podemos ver o processo de obtenção do IP iniciado pelo cliente.


Sep 08 20:26:59 ctos dhcpd[67821]: DHCPDISCOVER from 52:54:00:2e:89:43 via eth1
Sep 08 20:27:00 ctos dhcpd[67821]: DHCPOFFER on 192.168.100.15 to 52:54:00:2e:89:43 (zion) via eth1
Sep 08 20:27:04 ctos dhcpd[67821]: DHCPDISCOVER from 52:54:00:2e:89:43 (zion) via eth1
Sep 08 20:27:04 ctos dhcpd[67821]: DHCPOFFER on 192.168.100.15 to 52:54:00:2e:89:43 (zion) via eth1
Sep 08 20:27:04 ctos dhcpd[67821]: DHCPREQUEST for 192.168.100.15 (192.168.100.2) from 52:54:00:2e:89:43 (zion) via eth1
Sep 08 20:27:04 ctos dhcpd[67821]: DHCPACK on 192.168.100.15 to 52:54:00:2e:89:43 (zion) via eth1

Agora, vamos verificar o arquivo de leases no servidor DHCP para confirmar o IP atribuído:

$ sudo cat /var/lib/dhcp/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.4.1

# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;

server-duid "\000\001\000\001.p\356\246RT\000hxU";

lease 192.168.100.15 {
starts epoch 1725838024; # Sun Sep 08 20:27:04 2024
ends epoch 1725924424; # Mon Sep 09 20:27:04 2024
cltt epoch 1725838024; # Sun Sep 08 20:27:04 2024
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 52:54:00:2e:89:43;
uid "\377f\030\335B\000\002\000\000\253\021\3344\330X\227\256\262\032";
client-hostname "zion";
}


Na máquina cliente, podemos solicitar uma renovação do endereço IP:

# Libera o IP atual e para o cliente DHCP:
root@zion:~# dhclient -r

# Solicite um novo IP ao servidor DHCP:
root@zion:~# dhclient -v eth1
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth1/52:54:00:2e:89:43
Sending on LPF/eth1/52:54:00:2e:89:43
Sending on Socket/fallback
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 3 (xid=0x8faa0f1c)
DHCPOFFER of 192.168.100.16 from 192.168.100.2
DHCPREQUEST for 192.168.100.16 on eth1 to 255.255.255.255 port 67 (xid=0x1c0faa8f)
DHCPACK of 192.168.100.16 from 192.168.100.2 (xid=0x8faa0f1c)
bound to 192.168.100.16 -- renewal in 40315 seconds.


Agora, verifique novamente o arquivo de leases no servidor DHCP:

$ sudo cat /var/lib/dhcp/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.4.1

# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;

server-duid "\000\001\000\001.p\356\246RT\000hxU";

lease 192.168.100.15 {
starts epoch 1725838024; # Sun Sep 08 20:27:04 2024
ends epoch 1725924424; # Mon Sep 09 20:27:04 2024
cltt epoch 1725838024; # Sun Sep 08 20:27:04 2024
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 52:54:00:2e:89:43;
uid "\377f\030\335B\000\002\000\000\253\021\3344\330X\227\256\262\032";
client-hostname "zion";
}
lease 192.168.100.16 {
starts epoch 1725838347; # Sun Sep 08 20:32:27 2024
ends epoch 1725924747; # Mon Sep 09 20:32:27 2024
cltt epoch 1725838347; # Sun Sep 08 20:32:27 2024
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 52:54:00:2e:89:43;
client-hostname "zion";
}

Neste exemplo, podemos ver o processo de obtenção do IP pelo cliente e a confirmação no servidor.



Configurando IP estático com base no MAC


Vamos configurar o servidor DHCP para atribuir sempre o mesmo IP a um endereço MAC específico. No arquivo de configuração do DHCP, adicione a configuração abaixo ao final do arquivo.

vim /etc/dhcp/dhcpd.conf
group {
default-lease-time 172800;
max-lease-time 691200;
option domain-name-servers 9.9.9.9;

host zion {
hardware ethernet 52:54:00:2e:89:43;
fixed-address 192.168.100.3;
option host-name "zion.com.br";
}
}

Na configuração acima, estamos criando um grupo de clientes DHCP. Agrupar clientes oferece várias vantagens, como facilitar o gerenciamento de configurações específicas para conjuntos de dispositivos que compartilham características semelhantes. Isso permite aplicar políticas e opções personalizadas, como um tempo de lease maior ou a atribuição de servidores DNS diferentes, sem a necessidade de configurar cada cliente individualmente.


No caso deste grupo, as opções definidas, como o tempo de lease e o servidor DNS, serão aplicadas apenas aos clientes pertencentes a esse grupo. Além disso, também estamos definindo um cliente DHCP específico dentro do grupo. Criar grupos é uma prática eficiente para gerenciar redes de forma escalável, especialmente em ambientes com muitos dispositivos, pois facilita a administração e mantém a flexibilidade nas configurações.


Agora vamos reiniciar o serviço novamente e refazer os testes.

# Reinicie o serviço:
$ sudo systemctl restart isc-dhcp-server


# No cliente, Libera a concessão atual e peça um novo endereço IP:

root@zion:~# dhclient -r && dhclient -v eth1
Killed old client process
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth1/52:54:00:2e:89:43
Sending on LPF/eth1/52:54:00:2e:89:43
Sending on Socket/fallback
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 3 (xid=0x7a8f0b0b)
DHCPOFFER of 192.168.100.3 from 192.168.100.2
DHCPREQUEST for 192.168.100.3 on eth1 to 255.255.255.255 port 67 (xid=0xb0b8f7a)
DHCPACK of 192.168.100.3 from 192.168.100.2 (xid=0x7a8f0b0b)
bound to 192.168.100.3 -- renewal in 65702 seconds.

# Veja os servidores DNS no cliente:
root@zion:~# resolvectl
Link 3 (eth1)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=yes/supported
Current DNS Server: 9.9.9.9
DNS Servers: 9.9.9.9 8.8.8.8 8.8.4.4


BootP


O BOOTP (Bootstrap Protocol) é um protocolo de rede usado para iniciar máquinas denominadas "dump hosts", onde a máquina não possui um HD, é apenas um terminal, e precisa obter um S.O pela Rede para conseguir inicializar.


Vamos ver como configurar o BootP:

# Edite o arquivo abaixo:
$ sudo vim /etc/dhcp/dhcpd.conf

## Adicione as opções abaixo:
allow booting;
allow bootp;

group {
# Aqui depende do Sistemas que está iniciando e como foi configurado:
filename "bootx64.efi"

host terminal1 {
hardware ethernet 08:00:27:ef:e4:66;
fixed-address 192.168.1.183;
}

host terminal2 {
hardware ethernet 08:00:27:ef:e4:77;
fixed-address 192.168.1.184;
}
}

Vale notar que essa é apenas a parte do DHCP, ainda pode ser necessário configurar outras aplicações para que o BootP funcione.



DHCP Relay


O DHCP Relay (ou agente de retransmissão DHCP) é um recurso que permite que dispositivos em diferentes redes obtenham endereços IP de um único servidor DHCP. Quando um cliente DHCP está em uma rede diferente da do servidor DHCP, o agente de retransmissão é responsável por encaminhar as mensagens DHCP entre o cliente e o servidor, permitindo a comunicação entre eles. Esse recurso é útil porque possibilita que um único servidor DHCP atenda a várias redes diferentes, mesmo que ele não esteja diretamente conectado a todas elas.


O DHCP Relay é necessário porque as mensagens DHCP, como DHCPDISCOVER, são enviadas inicialmente como pacotes de broadcast. No entanto, pacotes de broadcast são limitados ao domínio de broadcast, ou seja, eles não atravessam roteadores ou gateways que separam diferentes redes. Sem o DHCP Relay, um servidor DHCP localizado em uma rede diferente do cliente DHCP não consegue receber essas mensagens de broadcast, já que os gateways não repassam esse tipo de tráfego entre redes. O agente de retransmissão DHCP resolve esse problema ao receber as mensagens de broadcast da rede local, convertê-las em pacotes unicast, e então encaminhá-las ao servidor DHCP em outra rede. Da mesma forma, ele encaminha as respostas do servidor de volta ao cliente, permitindo a atribuição de endereços IP entre redes diferentes.


Com o DHCP Relay evitamos de ter que colocado o servidor DHCP em todas as redes que ele deva atender, enchendo o servidor de interfaces em várias redes. Para habilitar esse recurso, basta instalar o pacote apropriado para configurar o serviço de DHCP Relay.

$ sudo apt install isc-dhcp-relay -y

# Agora configure o DHCP Relay (usar o IP do servidor DHCP):
$ sudo dhcrelay -i eth1 192.168.1.1

Ainda é possível configurar os parâmetro no arquivo /etc/default/isc-dhcp-relay.



IPv6


Vamos ver como configurar o IPv6 para o servidor DHCP.

# Edite o arquivo abaixo:
$ sudo vim /etc/default/isc-dhcp-server

## Descomente e acerte a interface:
DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf
DHCPDv6_PID=/var/run/dhcpd6.pid
INTERFACESv6="eth1"


# Edite o arquivo abaixo:
$ sudo vim /etc/dhcp/dhcpd6.conf

## Adicione a configuração abaixo:

default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.info-refresh-time 21600;

subnet6 2001:db8:abcd::/64 {
range6 2001:db8:abcd::100 2001:db8:abcd::200;

}


# Reinicie o serviço:
$ sudo systemctl restart isc-dhcp-server6.service

É necessário configurar a interface com IPv6, caso contrário não consegue fornecer IPv6.



Gateway em IPv6


Devido a arquitetura do IPv6 a configuração do Gateway não é mais realizada no DHCP, isso acontece porque o GW só é configurado pelas máquinas mediante mensagens na rede do tipo ICMPv6 (Router Advertisement, tendo o tipo 134) e são enviadas pelos roteadores, por isso a prática muitas das vezes é o Roteador fornecer o v6.


Para que o servidor possa responder a essas solicitações, podemos instalar o radvd para atuar como um GWv6 na rede e responder a essas solicitações.


Ele implementa o Protocolo NDP (Neighbor Discovery Protocol) que o IPv6 usa para fazer descobertas na Rede e se auto configurar dependendo da configurar do Router.


Ele pode ser instalado com o comando abaixo:

$ sudo apt install radvd -y

O arquivo de configuração fica em /etc/radvd.conf.



Fontes importantes


https://kb.isc.org/docs/isc-dhcp-44-manual-pages-dhcpdconf

https://kb.isc.org/docs/isc-dhcp-44-manual-pages-dhcp-options

https://en.wikipedia.org/wiki/Bootstrap_Protocol

https://www.youtube.com/watch?v=A3LFt7CHpgs