isc dhcpd 的class定义,以限定某些MAC

为了限定某一组MAC,比如以00:0c:29开头的vmware虚拟机,可以先用class来定义一个类:
class "vm" {
        match if binary-to-ascii(16,8,":",substring(hardware, 1, 3)) = "00:0c:29"; //这种形式有问题 ,0c会被当成c,未确认写法,待续
}
或者用另一种形式:
class "vm" {
        match if substring(hardware, 1, 3) = 00:0c:29; //这种形式不需要引号,后台当数字处理
}

然后在subnet中使用allow 或 deny来确定是不是使用这个组:

class "foo" {
  match if substring(hardware, 1, 3) = 00:0c:29;
  #match if binary-to-ascii (16, 8, ":", substring(hardware, 1, 3))="00:0c:29";
}
subnet 192.168.123.0 netmask 255.255.255.0
{
  option routers 192.168.123.2;
  option broadcast-address 192.168.123.255;
  option subnet-mask 255.255.255.0;
  pool {
    range 192.168.123.20 192.168.123.114;
    allow members of "foo";
  }
}
 

注意: 1、deny是不允许该类的MAC,allow是使用该类的MAC; 2、pool里面必须有range,否则dhcpd会拒绝启动; 3、substring中的序号从0开始,但是上面示例是从1开始,这不是错误,而是按照man dhcpd-eval的说明,hardware第一部分为网络类型,1表示以太网,6表示令牌环,8表示fddi。所以在substring的时候必须空出第一部分。 4、引号的问题:第二种形式的MAC号不需要引号,因为dhcpd-eval认为这就是数字。

你可能感兴趣的:(linux)