DHCP: Registrando declarações de host no arquivo de log

DHCP: Registrando declarações de host no arquivo de log

Atualmente estou executando o servidor ISC-DHCP v3 no Ubuntu 8.04. O que estou tentando fazer é registrar quem obteve qual endereço IP e quando.

Atualmente no arquivo de log DHCP você pode ver o seguinte:

DHCPDISCOVER from d0:50:56:ac:74:71 via eth0
DHCPOFFER on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
DHCPREQUEST for 208.x.x.75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0
DHCPACK on 208.x.x.75 to d0:50:56:ac:74:71 via eth0

Gostaria de chegar ao ponto em que vejo isto ou algo semelhante:

DHCPDISCOVER from d0:50:56:ac:74:71 via eth0
DHCPOFFER on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
DHCPREQUEST for 208.x.x.75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0
DHCPACK on 208.x.x.75 to d0:50:56:ac:74:71 (TestPC001) via eth0

Preciso registrar o host que obteve o endereço IP quando (o arquivo de log tem carimbos de data e hora, mas eu os removi para esta postagem) para fins históricos.

No meu arquivo dhcpd.conf tenho a seguinte declaração de host:

host TestPC001 {
     hardware ethernet d0:50:56:ac:74:71;
     fixed-address 208.x.x.75;
}

Se alguém souber como fazer isso com DHCP3, seria ótimo, estou aberto a sugestões de aplicativos de terceiros que farão isso. Uma coisa a ser observada: o arquivo dhcpd.conf é gerado dinamicamente usando um aplicativo de terceiros que faz RADIUS, portanto, as declarações do host podem e irão mudar, para que eu não possa simplesmente olhar o arquivo se houver um problema com alguém na rede e obtenha o nome deles.

Responder1

Eu descobri isso.

Adicionando o seguinte ao arquivo dhcpd.conf

if known { 
    log (info, concat ("HOSTNAME: ", host-decl-name, " on ",binary-to-ascii (10, 8, ".", leased-address)," at ", binary-to-ascii (16, 8, ":", substring (hardware, 1, 6)))); 
}  

Resultará em (removi os carimbos de data e hora para fins de limpeza):

HOSTNAME: TestPC001 on 208.x.x.75 at d0:50:56:ac:74:71
DHCPDISCOVER from d0:50:56:ac:74:71 via eth0
DHCPOFFER on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
DHCPREQUEST for 208.x.x.75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0
DHCPACK on 208.x.x.75 to d0:50:56:ac:74:71 via eth0

Responder2

O ISC DHCP armazena as concessões alocadas em um arquivo (normalmente /var/run/dhcp/dhcpd.leases ou similar).

O conteúdo do arquivo de arrendamento está documentado:

http://linux.die.net/man/5/dhcpd.leases

e há um módulo Perl disponível para analisar o conteúdo do arquivo de arrendamento:

http://search.cpan.org/~cvicente/Text-DHCPLeases-v0.3/lib/Text/DHCPLeases.pm

Todas as informações que você procura estão no arquivo de arrendamento, então você pode facilmente escrever um programa para analisar os dados e armazená-los em algum lugar para histórico. Se você não deseja fazer isso em tempo real, provavelmente poderá executá-lo com pelo menos metade do tempo de locação, menos um pouco (já que espera-se que os clientes renovem seu contrato na metade do caminho).

Espero que a análise seja tão leve que você possa executá-la com frequência sem se preocupar. Você também pode se divertir executando md5sum no arquivo, armazenando a saída em algum lugar, verificando as alterações uma vez por minuto e copiando o arquivo de locação para um diretório onde um programa possa analisá-lo sempre que for alterado.

Responder3

O ISC DHCPD registra o nome do cliente, desde que o cliente inclua seu nome de host na solicitação DHCP.

Você não menciona qual sistema operacional seus clientes estão executando. Os clientes Linux geralmente não incluem seu nome de host na solicitação DHCP, então você precisa adicionar

send host-name "hostname";

para o seu /etc/dhcp3/dhclient.conf. (Sua distribuição pode ser configurada de forma diferente.)

Os clientes Windows incluem o nome do computador na solicitação DHCP.

Responder4

Basta olhar o arquivo /var/lib/dhcpd/dhcpd.leases. Acho que o que você está procurando nos arquivos de log está presente lá.

informação relacionada