Предположим, у меня есть несколько хостов, настроенных следующим образом:
host host2 { hardware ethernet 10:bf:48:xx:xx:xx; fixed-address 192.168.1.2; }
host host3 { hardware ethernet 10:bf:48:xx:xx:xx; fixed-address 192.168.1.3; }
# etc ...
subnet 192.168.1.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 8.8.8.8, 8.8.4.4;
# Unknown test clients get this pool.
pool {
max-lease-time 1800; # 30 minutes
range 192.168.1.100 192.168.1.250;
allow unknown-clients;
}
# MyHosts nodes get this pool
pool {
max-lease-time 1800;
range 192.168.1.1 192.168.1.20;
allow members of MyHosts;
deny unknown-clients;
}
}
Я хочу поместить их в класс и назначить их пулу, чтобы гарантировать, что в этом пуле разрешены только эти хосты.
Я попытался определить их как:
class "MyHosts" {
host host2 { hardware ethernet 10:bf:48:xx:xx:xx; fixed-address 192.168.1.2; }
host host3 { hardware ethernet 10:bf:48:xx:xx:xx; fixed-address 192.168.1.3; }
}
Но это выдало ошибку «здесь не разрешены объявления хоста».
Как мне это сделать?
Как вы обнаружили, вы не можете объявить host
с внутри class
. В class
декларация может содержать только match
или match if
заявления. Если вы хотите сгруппировать свои клиентские запросы в классы, используя class
construct, вы можете сделать это примерно так:
class "MyHosts" {
match hardware;
}
subclass "MyHosts" 1:10:bf:48:xx:xx:xx; # host2
subclass "MyHosts" 1:10:bf:48:xx:xx:xx; # host3
В приведенном выше match
заявление в class
объявляет, что подклассы будут соответствовать hardware
атрибут. (hardware
оценивает конкатенацию типа оборудования и MAC-адреса клиента; для клиентов Ethernet тип оборудования - 1, поэтому 1:
префикс в строке данных subclass
заявления.)
Когда клиент является членом подкласса, он также является членом родительского класса, поэтому теперь вы можете использовать allow
и deny
статьи в вашем pool
декларации, гарантирующие, что члены MyHosts
назначаются IP-адреса из желаемого пула, например:
subnet 192.168.1.0 netmask 255.255.255.0 {
...
pool {
range 192.168.1.101 192.168.1.250;
...
deny members of "MyHosts";
...
}
pool {
range 192.168.1.1 192.168.1.20;
...
allow members of "MyHosts";
...
}
}