dhcpd não está processando broadcast DHCPDISCOVER

0

Meu servidor DHCP está manipulando duas sub-redes. A primeira sub-rede é toda host - > fixed-address conjuntos para hardware conhecido. A segunda sub-rede tem um conjunto configurado para manipular máquinas virtuais em um vCenter.

Agora, se eu tiver feito isso corretamente, o dhcpd corresponde aos três primeiros octetos do endereço MAC atribuído ao vCenter, e atribui um endereço fora da sub-rede para hosts virtuais, certo?

Infelizmente, tudo que recebo é

Nov 15 12:42:44 dhcpserv dhcpd: DHCPDISCOVER from 00:50:56:aa:bb:cc via eth0: network XXX.YYY.22/23: no free leases

Então, eu sei que meu servidor dhcpd está recebendo o DHCPDISCOVER. Eu sei que estou procurando os três octetos certos. (Eu sei disso?)

O que não consigo descobrir é por que meu servidor DHCP não está exibindo um endereço IP a partir da segunda sub-rede. O que estou perdendo?

    
por dafydd 16.11.2012 / 18:56

1 resposta

0

Acontece que eu precisava fazer três coisas. Aqui estão alguns recortes do arquivo /etc/dhcpd.conf final:

class "virtual-hosts"
{
  match if substring(binary-to-ascii(16,8,":",hardware),2,7) = "0:50:56";
  log(info, "Hit for class virtual-hosts");
}

subnet XXX.YYY.22.0 netmask 255.255.254.0
{
}

subnet XXX.YYY.24.0 netmask 255.255.255.0
{
  option routers XXX.YYY.24.254;
  option domain-name-servers XXX.YYY.22.168, XXX.YYY.22.169;
  option ntp-servers XXX.YYY.22.168,XXX.YYY.22.169;
  default-lease-time 86400; # 1 day
  max-lease-time 604800;    # 7 days
  use-host-decl-names on;
  allow unknown-clients;

  option domain-name "example.com sub1.example.com sub2.example.com";
  next-server XXX.YYY.22.159;
  filename "pxelinux.0";

  pool
  {
    allow members of "virtual-hosts";
    get-lease-hostnames true;
    one-lease-per-client true;
    ping-check true;
    range XXX.YYY.24.11 XXX.YYY.24.60;
  }
}

Primeiro, observe essa correspondência de cadeia feia na instrução class . O primeiro elemento valor binário hardware é o tipo de hardware e o segundo elemento é o endereço. Eu tenho que executar hardware através de binary-to-ascii para transformá-lo em uma string pesquisável, e então combine a substring. A correspondência substring começa em 2 para evitar o 1: que binary-to-string escreve para o tipo de hardware. E a correspondência substring tem apenas 7 caracteres, porque binary-to-string usa apenas um único dígito para valores binários menores que 16.

Em segundo lugar, tenho que declarar allow unknown-clients; em algum lugar antes que o dhcpd até tente corresponder a um endereço de hardware não especificado. Caso contrário, tenho que definir explicitamente o endereço MAC completo em uma instrução host{} . Mas eu não quero o allow unknown-clients; no próprio pool, porque isso é limitado por ...

Em terceiro lugar, a declaração allow members of "virtual-hosts"; na declaração do pool.

Portanto, a solução se resume a uma análise precisa de binary-to-text e a permitir clientes desconhecidos na instrução subnet , apenas para restringi-los na sub-instrução pool .

    
por 19.11.2012 / 18:54