Selecting fixed or dynamic address based on vendor-class-identifier

Sten Carlsen stenc at s-carlsen.dk
Tue Oct 22 00:43:30 UTC 2013


On 22/10/13 02.32, Glenn Satchell wrote:
> Hi Anders
>
> Without the host statement, ie assuming you were using a dynamic address
> in both subnets this would be easy. Allow pxeclient class in one pool and
> deny it in the other.
You would also need to allow/deny known-clients, allow members of ...
does not deny known clients.
>
> class "pxeclient" {
>     match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
> }
>
> shared-network all {
>     subnet 192.168.254.0 netmask 255.255.255.0 {
>     pool {
>       allow members of "pxeclient";
>       range 192.168.254.100 192.168.254.109;
>     }
>   }
>
>     subnet 192.168.255.0 netmask 255.255.255.0 {
>     pool {
>       deny members of "pxeclient";
>       range 192.168.255.100 192.168.255.109;
>     }
>   }
> }
>
> With the host statement, anything in there applies whether we are
> pxe-booting or normal booting, so need to be careful how we do things.
> That's why you can't put ignore-booting in the host statement as it will
> apply in both cases. I'm not entirely sure this will work, but it might
> give you an idea.
>
> host boottest {
>     hardware ethernet 02:13:10:07:11:58;
>     if substring (option vendor-class-identifier, 0, 9) != "PXEClient" {
>         fixed-address 192.168.255.12;
>     }
> }
>
> fixed-address has higher preference than dynamic address.
>
> Not sure if you can do this, it's only a siggestion, but maybe just let
> clients pxe-boot using their fixed ip-address? Add the details for boot
> server and filename to the pxeclient class. It would make the dhcpd.conf
> much simpler.
>
> regards,
> -glenn
>
> On Tue, October 22, 2013 2:24 am, Sten Carlsen wrote:
>> My take on this would be to test this:
>>
>> class "pxeclient" {
>>     match if substring (option vendor-class-identifier, 0, 9) =
>> "PXEClient";
>>   }
>>
>>   host boottest {
>>     hardware ethernet 02:13:10:07:11:58;
>>     fixed-address 192.168.255.12;
>>   }
>>
>>
>> shared-network all{
>>     subnet 192.168.254.0 netmask 255.255.255.0 {
>>     pool {
>>       allow members of "pxeclient";
>>       range 192.168.254.100 192.168.254.109;
>>     }
>>   }
>>
>>     subnet 192.168.255.0 netmask 255.255.255.0 {
>>       deny members of "pxeclient";   }
>> }
>>
>> The uncertain point here is that in a shared network there is really
>> nothing to tell which subnet the host belongs to, no DHCP-Relays etc.
>> This should work if a class has higher preference than a host statement.
>>
>> I don't know the answer to that, I would have to test it.
>>
>> On 21/10/13 17.06, Anders Blomdell wrote:
>>> I would like the ISC dhcpd server to hand out either a dynamic ip
>>> address or
>>> a fixed address based on the vendor-class-identifier (I want a dynamic
>>> address
>>> from one subnet during pxeboots and a [possibly] fixed address from
>>> another
>>> subnet otherwise). I have been able to do it by running two instances
>>> of the
>>> dhcp server on the interface, but not by using shared-network.
>>>
>>> The working configuration consists of /tmp/254.conf:
>>>
>>>   class "pxeclient" {
>>>     match if substring (option vendor-class-identifier, 0, 9) =
>>> "PXEClient";
>>>   }
>>>
>>>   subnet 192.168.254.0 netmask 255.255.255.0 {
>>>     pool {
>>>       allow members of "pxeclient";
>>>       range 192.168.254.100 192.168.254.109;
>>>     }
>>>   }
>>>
>>> and /tmp/255.conf:
>>>
>>>   host boottest {
>>>     hardware ethernet 02:13:10:07:11:58;
>>>     fixed-address 192.168.255.12;
>>>     if substring(option vendor-class-identifier, 0, 9) = "PXEClient" {
>>>       ignore booting;
>>>     }
>>>   }
>>>   subnet 192.168.255.0 netmask 255.255.255.0 {
>>>   }
>>>
>>> when running both of them with:
>>>   /usr/sbin/dhcpd -d -cf /tmp/254.conf -lf /tmp/254.lease --no-pid
>>>   /usr/sbin/dhcpd -d -cf /tmp/255.conf -lf /tmp/255.lease --no-pid
>>>
>>> I get the following expected result:
>>>
>>>   # PXE-booting
>>>   DHCPDISCOVER from 02:13:10:07:11:58 via eth0
>>>   DHCPOFFER on 192.168.254.100 to 02:13:10:07:11:58 via eth0
>>>   # Ordinary boot
>>>   DHCPDISCOVER from 02:13:10:07:11:58 via eth0
>>>   DHCPOFFER on 192.168.255.12 to 02:13:10:07:11:58 via eth0
>>>
>>> But I'm not able to achieve it with just one instance of dhcpd,
>>> the reason seems to be that the 'ignore booting' will be active
>>> for both subnets when the machine is PXE-booting and hence it will
>>> not get an address from the pool.
>>>
>>> Anybody that has a good idea on how to solve this?
>>>
>>> Regards
>>>
>>> Anders
>>>
>> --
>> Best regards
>>
>> Sten Carlsen
>>
>> No improvements come from shouting:
>>
>>        "MALE BOVINE MANURE!!!"
>>
>> _______________________________________________
>> dhcp-users mailing list
>> dhcp-users at lists.isc.org
>> https://lists.isc.org/mailman/listinfo/dhcp-users
>
> _______________________________________________
> dhcp-users mailing list
> dhcp-users at lists.isc.org
> https://lists.isc.org/mailman/listinfo/dhcp-users

-- 
Best regards

Sten Carlsen

No improvements come from shouting:

       "MALE BOVINE MANURE!!!" 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.isc.org/pipermail/dhcp-users/attachments/20131022/1308cc59/attachment.html>


More information about the dhcp-users mailing list