DHCP forwarding and multiple subnets on a single interface.

Simon Hobson dhcp1 at thehobsons.co.uk
Fri Aug 18 06:47:21 UTC 2006


Frances Albemuth wrote:

>  First post to the list, so apologies in advance if my etiquette
>isn't appropriate.  I'm using the ISC DHCP server in a rather vanilla
>configuration right now and I'm moving towards the addition of new
>interfaces over which DHCP will be served via forwarding.  I would
>like to be able to map multiple address blocks to a single interface
>and have the DHCP server make offers based on utilization of pools,
>but I see no way to do this.  It seems to me that the server sees the
>source address of the interface from which the request was forwarded
>in therefore makes an offer from that pool (subnet a.b.c.d).

>It's not
>obvious looking at the man file (and frankly seems counter-intuitive)
>that you can specify a range or pool inside of a subnet declaration
>that lives outside of said subnet.  Has anybody got a way of
>accomplishing this?

I believe what you are describing is a Shared Network - more than one 
IP subnet on the same physical network.

The syntax is basically :

shared-network "officenet" {
   subnet ...
   }
   subnet ...
   }
}

You can have multiple shared network declarations if you have 
multiple shared networks.

This tells DHCP server that when it receives a request tagged with an 
IP in ANY of the subnets in the shared network, then it can give out 
ANY IP in any of the subnets that it is configured to give out. What 
it won't do is any form of 'load balancing' or client affinity 
without some help.

What you will find is that if you just start up a fresh config with 
(say) two large pools, the server will allocate from one pool until 
all it's addresses have been used once, and only them start 
allocating from the second pool. You have two main ways of changing 
this behaviour :

1) use classes (or host statements & fixed addresses) to associate 
classes to a particular pool. For example, if you had IP phones then 
you might assign all IP phones to one pool (using perhaps the first 
three byte of the mac address to identify them) and everything else 
to another pool.

2) Artificially restrict one pool to force allocation from the other. 
By restricting the size of the pool used first, the server will be 
forced to allocated from the other pool - once a client has an 
allocation, then in general it will continue to use that in future. 
By expanding the pools as the number of clients increases you can get 
to a situation where the distribution appears to have some randomness.

There is a third way that comes to mind, create dummy expired leases 
for all addresses (either by adding them to the leases file or using 
omshell). If you do this alternatively from each pool (ie when sorted 
chronologically they go A B A B A B A B ... where A and B are the two 
pools) then the server will reuse addresses and it's least recently 
used algorithm will make it use address alternately from each pool.

Of course, once all addresses have been used at least once by real 
clients, then future assignments will appear to be random because of 
the least recently used criteria for selecting an address to 
reallocate.

Simon


More information about the dhcp-users mailing list