Configuring FreeRADIUS DHCP for ABillS

Suppose you installed FreeRADIUS 2 as written in this article – Installation and configuration of the ABillS billing system
Now copy the dhcp.conf file into the FreeRADIUS configuration:

sudo cp /usr/abills/misc/freeradius/v2/dhcp.conf /usr/local/freeradius/etc/raddb/sites-enabled/

Open it in the editor and replace %DHCP_SERVER_IP% with the ip address of the server and specify the network interface:

sudo nano /usr/local/freeradius/etc/raddb/sites-enabled/dhcp.conf

Open the dictionary in the editor:

sudo nano /usr/local/freeradius/share/freeradius/dictionary

Add the following line:

$INCLUDE dictionary.dhcp

Run Freeradius in debug mode:

radiusd -X

Perhaps Freeradius is already running and run one more naturally will not work, see my article – How to fix error Failed binding to authentication address * port 1812: Address already in use freeradius
After the startup, you should see something like:

Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on dhcp interface enp2s0 address port 67 as server dhcp
Ready to process requests.

With the Ctrl + C shortcut, stop radiusd and run as usual:

sudo /etc/init.d/radiusd start

If necessary, you can parse packets via tcpdump:

sudo tcpdump port 67 or port 68 -e -n
sudo netstat -tulpn | grep :67

We proceed to configure ABillS, we import the database of the Dhcphosts module:

mysql -u root -p --default-character-set=utf8 -D abills < /usr/abills/db/Dhcphosts.sql

We copy the paid module to ABillS:

cp /usr/abills/Abills/mysql/

In the file ABillS, the Dhcphosts module must be activated.

Open the configuration file ABillS in a text editor:

nano /usr/abills/libexec/

And we will write the following parameters:

# use base for DHCP leases records
# enable port and switch authorization

Naturally, the Dhcphosts module must be activated:


Set up DHCP logs, open the file in the text editor:


And add at the very end:

linelog linelog-dhcp {
    filename = ${logdir}/linelog-dhcp.log
    format = ""
    reference = "%{%{reply:DHCP-Message-Type}:-%{request:DHCP-Message-Type}}"
    DHCP-Discover = "%S --> Transaction-ID: %{DHCP-Transaction-Id} DISCOVER: [%{DHCP-Client-Hardware-Address}] via (%{DHCP-Gateway-IP-Address}), hop count = %{DHCP-Hop-Count}, Relay = %{DHCP-Relay-Remote-Id}, Hostname =  %{DHCP-Hostname}"
    DHCP-Offer = "%S <-- Transaction-ID: %{DHCP-Transaction-Id} OFFER: %{reply:DHCP-Your-IP-Address} to [%{DHCP-Client-Hardware-Address}] ..."
    DHCP-Request = "%S --> Transaction-ID: %{DHCP-Transaction-Id} REQUEST: [%{DHCP-Client-Hardware-Address}] via (%{DHCP-Gateway-IP-Address}), hop count = %{DHCP-Hop-Count}, Relay = %{DHCP-Relay-Remote-Id} ..."
    DHCP-Ack = "%S <-- Transaction-ID: %{DHCP-Transaction-Id} ACK: %{reply:DHCP-Your-IP-Address} to [%{DHCP-Client-Hardware-Address}] ..."
    DHCP-NAK = "%S <-- Transaction-ID: %{DHCP-Transaction-Id} NAK: [%{DHCP-Client-Hardware-Address}] for %{request:DHCP-Client-IP-Address}; ..."
    0 = "%S -/- Transaction-ID: %{DHCP-Transaction-Id} %{request:DHCP-Message-Type} DROPPED: ..."

If that, you can create a file:

touch /var/log/linelog-dhcp.log
chown freerad:freerad /var/log/linelog-dhcp.log

Restart FreeRADIUS to apply the changes:

sudo /etc/init.d/radiusd restart

The error in the logs “No name specified for Post-Auth-Type block” can be ignored.

It may be necessary to give the administrator access to the module Dhcphosts in the menu ABillS “Settings” – “Administrators”.

In the “Settings” – “Access Server” add the switch for authorization via the port and the switch:

IP: IP address of the switch
Name: any name
Type: dhcp DHCP FreeRadius in DHCP mode
Mac: Mac address switch

If you are using an L3 schema with Accel-ppp, you must also add DHCP Relay to the access server.

See also the official instructions

Подписаться на IT Blog (RU) по Email
Subscribe to IT Blog (EN) by Email

Did my article help you? How about buying me a cup of coffee as an encouragement? Buy me a coffe.

Leave a Reply