Se entendi corretamente, para fazer uma concessão estática, você tem algo assim em sua configuração:
host static-1 {
hardware ethernet 00:01:02:03:04:05;
fixed-address 192.168.1.40;
}
Isso funcionará como esperado, mas nunca liberará este endereço IP (não importa se o cliente envia DHCPRELEASE ou não) - porque é o IP ESTÁTICO do ponto de vista do dhcpd.
Você deve criar um IP DINÂMICO (novamente, do ponto de vista do dhcpd), assim o dhcpd irá rastreá-lo. Você pode fazer assim:
# First create pseudo class
class "static-ip" { match suffix(hardware, 6); }
# Here you will declare all MAC of your clients and make it a subclass of "static-ip"
# class "<UNIQ-CLASSNAME>" { match if suffix(hardware, 6) = <CLIENT-MAC-ADDRESS>; } subclass "static-ip" <CLIENT-MAC-ADDRESS>;
# Example
class "static-1" { match if suffix(hardware, 6) = 00:01:02:03:04:05; } subclass "static-ip" 00:01:02:03:04:05;
# Next allocate an address for every client (inside subnet declaration):
subnet 192.168.1.0 netmask 255.255.255.0 {
on commit {
set ip = binary-to-ascii (10, 8, ".", leased-address);
execute ("/usr/local/bin/dhcp-test", "commit", ip);
}
on release {
set ip = binary-to-ascii (10, 8, ".", leased-address);
execute ("/usr/local/bin/dhcp-test", "release", ip);
}
on expiry {
set ip = binary-to-ascii (10, 8, ".", leased-address);
execute ("/usr/local/bin/dhcp-test", "expiry", ip);
}
# pool { range <ip-addr>; allow members of "<UNIQ-CLASSNAME>"; }
pool { range 192.168.1.40; allow members of "static-1"; }
# pool { range 192.168.1.41; allow members of "static-2"; }
#... so on
}
Para tornar sua configuração mais flexível, você pode colocar declarações de subclasse de classe e de pool em arquivos diferentes e incluí-los no dhcpd.conf principal
#dhcpd.conf
authoritative;
min-lease-time ...;
... etc.
include "/path/to/classes.conf";
include "/path/to/subnet.conf";
Como você pode ver, colocamos cada cliente em sua própria classe e subclasse-o na classe "static-ip". Isto é no caso de você querer ter outra sub-rede sem atribuição de IP estático, por exemplo:
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.10 192.168.2.100;
deny members of "static-ip";
}
Em seguida, você deve negar os clientes com a atribuição de IP estático para obter IPs dessa sub-rede (com a palavra-chave deny ).
Desta forma, você obtém um IP DINÂMICO (do ponto do dhcpd), mas na verdade ele nunca irá mudar (do ponto do cliente)