Pi-hole DHCP
Pi-hole can also do DHCP. However, the GUI only allows for a single range. On a large network you’ll need multiple ranges. You do this by editing the config files directly.
Interface-Based Ranges
In this setup, you have a separate interface per LAN. Easy to do in a virtual or VLAN environment, but you’ll have to define each in the /etc/network/interfaces
file.
Let’s create a range from 192.168.0.100-200
tied to eth0
and a range of 192.168.1.100-200
tied to eth1
. We’ll also specify the router and two DNS servers.
vim /etc/dnsmasq.d/05-dhcp.conf
dhcp-range=eth0,192.168.0.100,192.168.0.200,24h
dhcp-option=ens161,option:router,192.168.0.1
dhcp-option=ens161,option:dns-server,192.168.0.2,192.168.0.3
dhcp-range=eth1,192.168.1.100,192.168.1.200,24h
dhcp-option=ens161,option:router,192.168.1.1
dhcp-option=ens161,option:dns-server,192.168.1.2,192.168.1.3
# Shared by both
dhcp-option=option:netmask,255.255.0.0
# Respond immediately without waiting for other servers
dhcp-authoritative
# Don't try and ping the address before assigning it
no-ping
dhcp-lease-max=10000
dhcp-leasefile=/etc/pihole/dhcp.leases
domain=home.lan
These settings can be implicit - i.e. we could have left out ethX
in the range, but explicit is often better for clarity.
Note - the DHCP server (dnsmasq) is not enabled by default. You can do that in the GUI under Settings –> DHCP
Relay-Based Ranges
In this setup, the router relays DHCP requests to the server. Only one system network interface is required, though you must configure the router(s).
When configured, the relay (router) sets the relay-agent (giaddr) field, sends it to dnsmasq, which (I think) understands it’s a relayed request when it sees that field, and looks at it’s available ranges for a match. It’s also sets a tag
that to be used for assigning different options, such as the gateway, per range.
dhcp-range=tag0,192.168.0.100,192.168.0.250,255.255.255.0,8h
dhcp-range=tag1,192.168.1.100,192.168.1.250,255.255.255.0,8h
dhcp-range=tag2,192.168.2.100,192.168.2.250,255.255.255.0,8h
dhcp-options=tag0,3,192.168.0.1
dhcp-options=tag1,3,192.168.1.1
dhcp-options=tag2,3,192.168.2.1
Sources
https://discourse.pi-hole.net/t/more-than-one-conditional-forwarding-entry-in-the-gui/11359
Troubleshooting
It’s possible that the DHCP part of dnsmasq doesn’t scale to many thousands of leases1
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.