web-dev-qa-db-ja.com

ISC DHCPDでクラスにホストを割り当てるにはどうすればよいですか?

たくさんのホストが次のように設定されているとします。

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; }
}

しかし、これにより「ここではホスト宣言は許可されません」というエラーが発生しました。

どうすればいいのですか?

4
Matt

発見したように、Host内でclasssを宣言することはできません。 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

上記のmatchclassステートメントは、サブクラスが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";
        ...
    }
}
10
Steven Monday