sexta-feira, 28 de setembro de 2018

Entendendo o serviço DHCP


A correria é tanta que se o dia tivesse 30 horas ainda seria pouco.

Atuando ativamente num imenso projeto de migração / consolidação de domínios da maior instituição financeira do país, estudando algumas madrugadas à dentro para o exame 70-744 (Securing Windows Server 2016), gravando um curso bem legal sobre ISO 27000 que em breve será disponibilizado no Udemy, elaborando materiais bem interessantes para aulas em 2019, iniciando pesquisas para ingressar num programa de mestrado profissional, me esforçando para ser um bom filho, um bom namorado, um bom ser humano, enfim .... caminhando e cantando e seguindo a canção. 

Ah ... e cumprindo com meu propósito de escrever ao menos um artigo por mês para o blog MCSE Brasil.
Inicialmente eu tinha programado tratar sobre outro tema no artigo desse mês. Está bem encaminhado e eis que de repente, sou empurrado pela força das circunstâncias a direções alheias à minha vontade e, esgotadas as forças para lutar contra, postergo o tema que aqui seria tratado. Mas é por uma excelente causa, totalmente aderente ao propósito dessas publicações.
Uma dúvida levantada por um dos dois leitores assíduos de minhas publicações fez com que tudo fosse prazerosamente alterado, e atendendo à uma espécie de chamamento, tentarei explorar alguma vocação que talvez tenha – ou acredite ter -  para tentar esclarecer-lhe.
Obedeço cegamente ao que acredito ser minha vocação e de quebra, cumpro com o objetivo primário desses artigos: Ajudar profissionais de TI.
Não importa quantos: Um, dois, dez, cem ou mil. O prazer em fazer isso é exatamente o mesmo.
Esse leitor, participando de um processo seletivo numa empresa cuja oportunidade ofertada representava uma melhora significativa em sua carreira (e quem sabe, vida), se deparou com a seguinte questão (ou ao menos semelhante) em prova teórica: “Comente sobre o protocolo DHCP.
Assim. Nua e crua.
E embora ele trabalhe com infraestrutura de TI há algum tempo, e conheça exatamente o que tal serviço faz, muito pouco ele pôde discorrer sobre o tema por desconhecer aspectos teóricos que enriqueceriam sua resposta.
Então vamos lá ... nesse mês falarei um pouquinho sobre DHCP.
Começarei pelo básico: O que é DHCP?
Hoje em dia, todos os computadores de uma rede (privada ou pública) devem possuir endereços IP únicos. Assim como o RG é único e serve para identificar cada cidadão brasileiro, esse endereço deve ser único e identifica cada dispositivo da rede.

Em redes pequenas, controlar esses endereços manualmente talvez (pra mim, todo controle manual é difícil e impreciso) seja fácil. O problema começa quando há a necessidade de controlar esses endereços em redes maiores.

Nesse contexto, o protocolo DHCP (Dynamic Host Configuration Protocol) desempenha um papel importante, pois é o responsável por distribuir, controlar e renovar automaticamente endereços IP em uma rede.

Sem utilizar um servidor DHCP, toda santa vez que se adicionar um novo dispositivo (desktop, notebooks, impressoras, scanners, tablets, celulares, etc, etc, e etc) à rede, o endereço IP deverá ser configurado manualmente. Isso inclui a configuração de mascara de sub-rede, o gateway padrão que permitirá acesso à outras redes, bem como os servidores DNS utilizados para resolução de nomes.


Como funciona? Uma maneira simples de explicar...

Através de um servidor DHCP, endereços IP e demais informações de rede são distribuídas dinamicamente. Esses endereços são utilizados pelos clientes por tempo determinado, que pode ser de alguns minutos, horas, dias, meses, anos ou até mesmo indeterminado. Esse período recebe o nome de concessão.

Em ambientes Microsoft, o tempo de concessão padrão é de oito dias para clientes com fio e três dias para clientes sem fio.

O pool de endereços IP que serão distribuídos pelo servidor DHCP é definido e configurado pelo administrador da rede.

Quando um dispositivo cliente solicita um endereço IP, o servidor DHCP oferecerá o próximo endereço IP disponível do pool.

Em casos específicos, onde é mandatório que um dispositivo possua sempre o mesmo endereço IP (para criação de regras de firewall, por exemplo) é possível reservar endereços IP específicos para tais clientes utilizando o MAC Address da interface de rede do cliente.

Como o DHCP utiliza transmissões IP para iniciar comunicações, os servidores DHCP estão limitados à comunicação em sua sub-rede IP. Por isso é comum a utilização de um servidor DHCP para cada sub-rede IP.

Por padrão, todos os sistemas operacionais da Microsoft são configurados para obter um endereço IP automaticamente.

Um computador configurado manualmente com um endereço IP, possuirá um endereço IP estático. Nesse caso, ele deixa de ser um cliente DHCP e não se comunica com um servidor DHCP para obtenção de endereços IP distribuídos dinamicamente.

Servidores e impressoras são exemplos de clientes de rede que normalmente possuem endereços IP estáticos.


Como funciona? Aprofundando-se no tema ...

O processo para concessão de um endereço IP à um cliente DHCP é dividido em quatro etapas.

Compreender como cada etapa desse processo funciona é fundamental para a resolução de problemas em casos onde os clientes não conseguem obter um endereço IP.

Etapa 01-  Nessa etapa, o cliente DHCP transmite através de broadcast um pacote denominado DHCPDISCOVER direcionado a cada computador da sub-rede ao qual ele pertence. Os únicos computadores capazes de responder a essa solicitação, são os servidores DHCP ou computadores / roteadores que executam um agente de retransmissão DHCP (DHCP Relay Agent). Nesse último caso, o DHCP Relay Agent encaminhará a mensagem ao servidor DHCP para o qual você o configura para retransmitir solicitações.

Etapa 02-   Localizado um servidor DHCP, este responderá com um pacote denominado DHCPOFFER, que contém uma oferta de endereço IP para o cliente. O cliente poderá receber pacotes do tipo DHCPOFFER de vários servidores DHCP. Se isso ocorrer, o cliente normalmente escolherá o pacote emitido pelo servidor que respondeu mais rápido ao pacote DHCPDISCOVER por ele enviado. Normalmente esse é o servidor DHCP mais próximo dele. 

Etapa 03-   Em seguida, o cliente responderá com um pacote denominado DHCPREQUEST que contém a identificação do servidor cuja oferta será aceita pelo cliente. Isso informa aos demais servidores DHCP que receberam a comunicação inicial qual DHCPOFFER o cliente escolheu aceitar.

Etapa 04-   O servidor cuja oferta de endereço IP tenha sido escolhida pelo cliente armazenará as informações do endereço IP ofertado ao cliente no banco de dados DHCP, armazenado por padrão em %SystemRoot%\System32\DHCP” e responderá com uma mensagem do tipo DHCPACK.

Se o servidor DHCP não puder fornecer o endereço inicialmente ofertado através do pacote DHCPOFFER, ele enviará uma mensagem do tipo DHCPNAK.

A imagem abaixo ilustra o processo acima descrito.



APIPA

Normalmente, a comunicação acima descrita ocorre quando um computador utilizando o sistema operacional Windows é iniciado.

Se, por razões diversas, o cliente Windows não conseguir localizar um servidor DHCP, ele poderá atribuir a si próprio um endereço IP de um intervalo reservado pela Microsoft. Isso é conhecido como APIPA, abreviação para Automatic Private IP Addressing.

O intervalo de endereços IP do APIPA é de 169.254.0.1 a 169.254.255.254.

Isso em tese permitirá que o computador se comunique com outros computadores que também não conseguiram obter um endereço IP dinamicamente.

Na configuração de um endereço APIPA, uma máscara de sub-rede de classe B padrão (255.255.0.0) também é configurada, entretanto nenhum gateway padrão será atribuído.

Utilizando APIPA, o cliente tentará localizar um servidor DHCP a cada 5 minutos, até que um servidor DHCP se torne acessível e possa lhe fornecer um endereço IP que lhe permita a comunicação com os demais dispositivos da rede.


Como ocorre a renovação do endereço IP?

Quando a concessão do DHCP atinge 50% do tempo de concessão, o cliente iniciará em segundo plano o processo de renovação da concessão.

Para tentar renovar a concessão de endereço IP, o cliente enviará em unicast um pacote do tipo DHCPREQUEST. Uma vez que esse pacote tenha sido recebido pelo servidor que forneceu o endereço IP, ele enviará uma mensagem DHCPACK de volta ao cliente.

Esta mensagem contém novos parâmetros que possam ter sido alterados desde a criação da concessão original.

Importante observar que esses pacotes não são transmitidos para toda a rede, pois nesse momento o cliente já possui um endereço IP que pode ser utilizado para comunicações unicast.

Se o cliente DHCP não conseguir se comunicar com o servidor DHCP, ele aguardará até que 87,5% do tempo de concessão transcorra e então enviará um pacote do tipo DHCPREQUEST (broadcast) para tentar obter uma renovação. Nesse caso, a solicitação é enviada para todos os servidores DHCP, e não apenas ao servidor que forneceu a concessão original.

No entanto, esta solicitação é para uma renovação, não uma nova concessão.

Se o processo de renovação for malsucedida o computador cliente tentará obter uma configuração IP de qualquer servidor DHCP.

Para melhor entendimento, o processo de renovação está simplificado na imagem abaixo.





Autorização do servidor DHCP na rede

Por ser baseado em difusões de IP, um servidor DHCP desconhecido pode fornecer configurações inválidas aos clientes e representar uma grave falha de segurança. Importante considerar que a comunicação DHCP geralmente ocorre antes do processo de autenticação no computador.

No Windows Server, isso é evitado autorizando o funcionamento do servidor DHCP no Active Directory antes que ele possa suportar clientes DHCP.

Para isso, clique com o botão direito do mouse sob o servidor DHCP e selecione a opção 'Authorize", conforme imagem abaixo.





Considerações sobre servidores DHCP independentes 

É possível a existência de servidor Windows que não faça parte de um domínio do Active Directory e que possua a função de servidor DHCP instalada e configurada. Esse servidor é conhecido como DHCP autônomo ou independente.

Se o servidor DHCP independente detectar um servidor DHCP autorizado em um domínio, ele não fornecerá endereços IP e será desligado automaticamente. 


Detecção de Conflitos

Embora seja um comportamento atípico, pode ocorrer de um servidor DHCP atribuir, ou ao menos tentar, um mesmo endereço para dois dispositivos distintos.

Se isso ocorrer, gerará indisponibilidade em ao menos um dos dispositivos com endereço IP duplicado.

Para evitar isso, é possível configurar o servidor DHCP para “testar” o endereço antes de oferta-lo a algum cliente. Esse teste - que não é configurado por padrão -, refere-se a uma tentativa de “PING” que o serviço DHCP executa para cada endereço antes de alocar o endereço IP a um cliente.

Importante salientar que para cada tentativa adicional de detecção de conflito, são adicionados segundos adicionais ao tempo necessário para negociar concessões para clientes DHCP.

Assim, é recomendado que se utilize no máximo uma ou duas tentativas de detecção de conflitos. Dessa forma, obtém-se os benefícios desejados desse recurso sem diminuir de forma significativa o desempenho do servidor DHCP no processo de atribuição de endereços.

Abaixo, imagem que ilustra onde tal configuração deve ser efetuada.



Se um conflito for detectado, o servidor DHCP criará uma concessão temporária denominada "BAD ADDRESS". Essa concessão será configurada com um período de locação de uma (1) hora e no final do período ela será automaticamente removida do escopo.

Como administrador de redes, caso encontre uma concessão desse tipo ocorrendo frequentemente com o mesmo endereço IP, localize o nó da rede e verifique se ele não está configurado com um endereço IP estático que faça parte de um escopo DHCP.

Bom ... por hoje é só.

Espero que de alguma forma essas linhas possam contribuir para a disseminação do conhecimento e enriquecimento técnico da comunidade de TI.