我想根据客户端提供的主机名分配客户端的 IP 地址,但结果往往无法预测。
我尝试模仿 dhcpd.conf(5) 中的客户端分类,将
主机名为“Debian-xx”的
客户端分配到 192.168.100.0/24 子网,将主机名为“Centos-xx”的客户端分配到 192.168.1.0/24 子网。
我使用的是 DHCP 版本 4.4.1。当我使用“dhcpd -d”检查日志时,我注意到分类没有生效或有错误。例如,“Centos-xxx”客户端可能被分配到 192.168.100.0 或 192.168.255.0 子网,并且分配似乎不一致。
这是我的 dhcpd.conf 文件的内容。
default-lease-time 10;
use-host-decl-names on;
max-lease-time 20;
authoritarive ;
log-facility local2;
class "centos-server"{
match if (substring(option host-name ,0,6)="Centos") ;
}
class "debian-server"{
match if (substring (option host-name ,0,6)="Debian") ;
}
subnet 192.168.0.0 netmask 255.255.0.0 {
option routers 192.168.0.2;
option subnet-mask 255.255.255.0;
pool{
allow members of "centos-server";
range 192.168.100.1 192.168.100.254;
}
pool{
allow members of "dbian-server";
range 192.168.1.1 192.168.1.254;
}
pool{
range 192.168.255.1 192.168.255.254;
}
}
on commit {
log(debug, concat("test for ", substring(option host-name,0,6 ) ));
if ( ( substring( option host-name , 0, 6 ) ="Debian") ) {
log(debug,"Debian!");
}
else if ( ( substring( option host-name , 0, 6 ) ="Centos") ) {
log(debug,"Centos!");
}
else {
log(debug,"i dont konw");
}
}
这是我的 dhclient.conf 的内容
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
我尝试修改“match if”后面的表达式,例如使用“or (1=1)”,但客户端可能仍未分配给该类。
我尝试查看是否是“host-name”和“option host-name”的问题,但这似乎不是关键问题。
我怀疑类中的条件表达式存在错误,但提交日志时,我发现日志结果在“Centos!”和“我不知道”之间交替出现。
我搜索了相关问题,例如此链接dhcpd 类匹配主机名或 mac 地址,但似乎答案都没有提供很好的解决方案。
我想知道我的错误在哪里,如何修改,或者是否有提供解决方案的网站。
如果您能提供帮助,我将不胜感激。