たくさんのホストが次のように設定されているとします。
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
sを宣言することはできません。 class
宣言には、match
またはmatch if
ステートメントのみを含めることができます。 class
構成を使用してクライアント要求をクラスにグループ化する場合は、次のようにすることができます。
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アドレスの連結に評価されます。イーサネットクライアントの場合、ハードウェアタイプは1であるため、subclass
ステートメントのデータ文字列の1:
プレフィックス。)
クライアントがサブクラスのメンバーである場合、それは親クラスのメンバーでもあるため、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";
...
}
}