Como enviar um alerta se o intervalo de DHCP for excedido, usando o script de shell?

5

Instalei e configurei um servidor DHCP no CentOS 6.5. Eu também adicionei uma sub-rede ao arquivo dhcpd.conf da seguinte forma:

subnet 192.168.1.0 netmask 255.255.255.0 {
  option domain-name-servers 192.168.1.2, 8.8.8.8;
  default-lease-time 600;
  max-lease-time 7200;
  range dynamic-bootp 192.168.1.10 192.168.1.30;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
  option ip-forwarding off;
}

Como você pode ver, o servidor DHCP pode atribuir apenas 20 endereços IP. É possível fazer o servidor DHCP enviar um alerta para o administrador do sistema depois de ter atribuído todos os 20 endereços usando um script de shell?

    
por Networker 31.05.2014 / 17:30

2 respostas

6

Uma opção para você é contar o número da declaração lease em dhcpd.leases :

dhcpd.leases(5) - Linux man page

Name

dhcpd.leases - DHCP client lease database

....

the Lease Declaration

lease ip-address { statements... }

Each lease declaration includes the single IP address that has been leased to the
client. The statements within the braces define the duration of the lease and to
whom it is assigned.

Então, basta contar o número de linhas que começam com lease para saber que o número de endereços IP foi atribuído:

COUNT=$(grep -c '^lease' /var/lib/dhcpd/dhcpd.leases)

if [[ $COUNT eq 20 ]]
then
    #do something here
fi
    
por 31.05.2014 / 20:38
6

Esta não é uma solução direta, mas parece que você poderia usar o recurso on commit em seu arquivo de configuração DHCP. Aqui está um exemplo deste intitulado: Executar um script quando o ISC DHCP distribuir uma nova concessão .

No arquivo dhcpd.conf , você pode criar ações em vários eventos, como quando uma concessão é concedida.

subnet 192.168.1.0 netmask 255.255.255.0 {
    option routers  192.168.1.2;

    on commit {
        set clip = binary-to-ascii(10, 8, ".", leased-address);
        set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
        execute("/usr/local/sbin/dhcpevent", "commit", clip, clhw, host-decl-name);
    }
    ...

Quando o script acima, dhcpevent , é executado, ele passa 4 argumentos.

execute_statement argv[0] = /usr/local/sbin/dhcpevent
execute_statement argv[1] = commit
execute_statement argv[2] = 192.168.1.40
execute_statement argv[3] = 11:aa:bb:cc:dd:ee
execute_statement argv[4] = d1.jp

clipw & clhw são variáveis em que, neste exemplo, partes de outros metadados foram analisadas e armazenadas antes da execução do script. Essas variáveis são então passadas junto com outros itens para o script do evento.

Você poderia dividir essa abordagem em um script em que você poderia controlar o número de IPs que foram arrendados ou talvez você poderia interrogar o arquivo de status de concessão real que o servidor DHCP rastreia essas informações ( /var/lib/dhcpd/dhcpd.leases ) e, em seguida, informe se esses arquivos têm um número de concessões que excede sua cota.

Referências

por 31.05.2014 / 20:39

Tags