Hi, I'm trying to set up FreeRADIUS 2.2 to act as an authentication and 
accounting system as well as a DHCP server. (I'm relaying DHCP requests from a 
pfSense box).

I am trying to use sqlippools on FreeRADIUS, but I have noticed that my ippools 
are filling up quickly (I am only testing with two devices). I have pfSense 
configured to reauthenticate user every minute, so I believe that FreeRADIUS is 
running post-auth dhcp leasing each time the user is reauthenticated. 
FreeRADIUS is serving the same client a new IP address each minute. 

I have adjusted my policy conf to the below. I may be approaching this the 
wrong way, but this is essentially what I am trying to do:

I want to have multiple pools on different subnets. When a new client connects 
to the network (they don't yet have a radius account) they are sent to a 
default (pending) pool. This may be on the 192.168.1/24 subnet. After they have 
set up their account and have been added to the RADIUS database, they will be 
given a pool-name, maybe `pool2`. `pool2` will be on a different subnet, for 
example, 192168.2/24. The pfsense box knows how to route these subnets, so that 
is not a problem. I only want clients to receive a different IP address if 
their pool-name changes for whatever reason, if there are no changes to their 
account, they shouldn't be leased a new IP every time they reauthenticate 
(every minute).

Eventually I will disable the reauthenticate every minute feature as the 
production system would not be able to handle this many requests. 

Am I approaching this problem correctly? I have written some un-lang in the 
policy.conf file for handling some of this. I am getting hung up on this 
problem. The pool is getting exhausted in minutes since each client is leased a 
new ip every minute.

Any help is appreciated!
Thanks,
Ethan

….
dhcp_sqlippool.post-auth {
                #  Do some minor hacks to the request so that it looks
                #  like a RADIUS request to the SQL IP Pool module.

                # check whether the requester is a user or not, if they do not 
have a pool-name, send them to pfpriv by default
                if("%{sql: SELECT COUNT(*) FROM radcheck where 
username='%{DHCP-Client-Hardware-Address}' AND attribute='Pool-Name'}" != "0") {
                        update control {
                                Pool-Name := "%{sql: SELECT `value` FROM 
radcheck WHERE username = '%{DHCP-Client-Hardware-Address}' AND 
attribute='Pool-Name'}"
                        } 
                }
                else {
                        update control {
                                Pool-Name := "pfpriv" # default pool if the 
user doesn't have an account
                        }
                }

                update reply {
                        DHCP-Domain-Name-Server = "192.168.1.1" # we will 
ultimately create a mysql table `radpoolinfo` to store per-pool attributes
                        DHCP-Router-Address = "192.168.0.1" # this will also be 
in `radpoolinfo` eventually
                }       
                 update request {
                        User-Name = "DHCP-%{DHCP-Client-Hardware-Address}"
                        Calling-Station-Id = "%{DHCP-Client-Hardware-Address}"
                        NAS-IP-Address = 
"%{%{DHCP-Gateway-IP-Address}:-127.0.0.1}"
                        Acct-Status-Type = Start
                 }

                #  Call the actual module
                #
                #  Uncomment this in order to really call it!
                dhcp_sqlippool
                #fail

                #  Convert Framed-IP-Address to DHCP, but only if we
                #  actually allocated an address.
                if (ok) {
                        update reply {
                                DHCP-Your-IP-Address = 
"%{reply:Framed-IP-Address}"
                        }
                }
}
…
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

Reply via email to