quarta-feira, 21 de maio de 2014

Configuração de Relay-Agent em Roteadores Linux

Olá Pessoal.

No processo de comunicação do DHCP, os clientes fazem a busca por um ou mais servidores através do envio de mensagems de broadcast (com o endereço de origem 0.0.0.0/32 ou ::0/128) para alcançar toda a rede local na procura por algum servidor DHCP. O "problema" em ambientes com múltiplas sub-redes que possuem um único servidor DHCP centralizado é que a propagação do tráfego de broadcast nas sub-redes cessa nos seus respectivos gateways (na interface de um roteador), uma vez que roteadores não têm permissão para propagar broadcast.

Em situações em que existem diferentes sub-redes atrás de um roteador e um único servidor centralizado para distribuir os endereços via DHCP, além de configurar o servidor com os múltiplos escopos que ele deverá distribuir, é também necessário configurar um relay-agent DHCP. O relay-agent é um serviço configurado manualmente que redireciona o tráfego de broadcast que chega em uma (ou mais) interface(s) para um host específico como tráfego unicast. 

A configuração do relay-agent em roteadores Cisco é muito simples e pode ser realizada através do comando "ip helper-address <IP-HOST>" na interface que irá receber broadcast. O leitor interessado nessa configuração em roteadores Cisco pode encontrar um exemplo em outro artigo intitulado "Configuração de Switches Multi-Layer (Layer-3)"

O relay-agent pode ser facilmente implementado em ambientes que possuem roteadores Linux. Especificamente em distribuições baseadas no Debian, para configurar o serviço Relay-Agent é necessário instalar o pacote "dhcp-helper":

root@LinuxRouter:/# apt-get install dhcp-helper

Feito isso, basta realizar as configurações através do arquivo "/etc/default/dhcp-helper". Por padrão, o serviço irá inicializar fazendo o relay do broadcast na interface eth0, por isso é necessário personalizar a configuração para reproduzir a necessidade do seu ambiente. Para exemplificar o conteúdo do arquivo de configuração, consideremos o cenário da figura abaixo que pode ser facilmente reproduzido através do VirtualBox:


#--- em /etc/default/dhcp-helper
#
# You will need at least "-s" or
# "-b" so that dhcp-helper know where
# to relay DHCP requests.

DHCPHELPER_OPTS="-s 172.19.0.1 -e eth0" 

A opção -s faz referência ao endereço do(s) servidor(es) em que o tráfego de broadcast será redirecionado como unicast. O administrador poderia utilizar a opção -b para indicar ao relay-agent que todo tráfego de broadcast deveria ser encaminhado para a interface conectada na rede em que existe o servidor DHCP, assim seria desnecessário informar um endereço específico. No entanto essa prática implicaria em mais broadcast na rede, por isso o ideal é utilizar a opção -s e informar o endereço específico do servidor. A opção -e é utilizada para excluir a escuta em alguma interface específica em que não é desejado o serviço de relay do tráfego broadcast, por exemplo na Internet ou em alguma sub-rede endereçada estaticamente. A opção -i especifica em qual(is) interface(is) haverá escuta do tráfego broadcast, destacando que a omissão dessa opção implica na escuta em todas as interfaces (exceto naquelas excluídas através da opção -e).

O serviço pode ser inicializado através do comando abaixo:

root@LinuxRouter:/# service dhcp-helper start
Starting DHCP relay agent: dhcp-helper.

Para informações mais detalhadas, consulte o manual do serviço via linha de comando:

root@LinuxRouter:/# man dhcp-helper

Esse é um recurso simples e bastante útil.

Abraço.

Samuel.

5 comentários:

  1. Simples e objetivo! Muito bom!

    ResponderExcluir
  2. Gostei, estava a procura dessa explicação. Ajudou muito.

    ResponderExcluir
  3. Apenas para constar, outra boa opção para habilitar o recurso de relay-agent no Debian é instalar o pacote "isc-dhcp-relay". Ao fazê-lo será aberto um diálogo automático para configurar o endereço IP do servidor DHCP da rede e quais interfaces deverão encaminhar o tráfego de broadcast. Essas mesmas configurações podem ser realizadas posteriormente através da edição do arquivo "/etc/default/isc-dhcp-relay".

    ResponderExcluir
  4. Como o escopo DHCP sabe para qual VLAN é para cada escopo? Em um escopo de Windows Server por exemplo...

    ResponderExcluir
    Respostas
    1. A função relay-agent do DHCP adiciona novas informações nos cabeçalhos do pacote encaminhado para o servidor DHCP, ou seja, essa ação independe da solução que seja utilizada como servidor. Uma das informações adicionadas é o endereço de origem da interface que recebeu a mensagem de broadcast, assim o servidor sabe que deve prover um endereço na mesma rede da interface que fez o encaminhamento.

      Excluir