Udhcpd vs dnsmasq howto

DNS and DHCP with Dnsmasq

Last week, we learned a batch of tips and tricks for Dnsmasq. Today, we're going more in-depth into configuring DNS and DHCP, including entering DHCP hostnames automatically into DNS, and assigning static IP addresses from DHCP.

You will edit three configuration files on your Dnsmasq server:,, and. Just like the olden days when we had nice clean configuration files for everything, instead of messes of scripts and nested configuration files.

Use Dnsmasq’s built-in syntax checker to check for configuration file errors, and run Dnsmasq from the command-line rather than as daemon so you can quickly test configuration changes and log the results. (See last week’s tutorial to learn more about this.)

Taming Network Manager and resolv.conf

Disable Network Manager on your Dnsmasq server, and give its network interfaces static configurations. You also need control of, which in these modern times is usually controlled by other processes, such as Network Manager. In these cases is a symbolic link to another file such as or. To get around this delete the symlink and then re-create the file. Now your changes will not be overwritten.

There are many ways to use Dnsmasq and together. My preference is to enter only 127.0.0.1 in, and enter all upstream nameservers in. You don’t need to touch any client configurations because Dnsmasq will provide all network information to them via DHCP.

Local DHCP

This example configuration includes some typical global options, and then defines a single DHCP address range. Replace the italicized values ​​with your own values.

# global options domain-needed bogus-priv no-resolv filterwin2k expand-hosts domain =mydomain.net local =/mydomain.net/ listen-address = 127.0.0.1 listen-address =192.168.10.4 # DHCP range dhcp-range =192.168.10.10,192.168.10.50,12h dhcp-lease-max =25

dhcp-range = 192.168.10.10,192.168.10.50,12h defines a range of 40 available address leases, with a lease time of 12 hours. This range must not include your Dnsmasq server. You may define the lease time in seconds, minutes, or hours. The default is one hour and the minimum possible is two minutes. If you want infinite lease times then don’t specify a lease time.

dhcp-lease-max = 25 defines how many leases can be active at one time. You can have a large address pool available and then limit the number of active leases to prevent denial of service problems from hosts going nuts and demanding a lot of DHCP leases.

DHCP Zones and Options

You can define DHCP zones for different subnets, like this example that has an and a zone, and then give each zone different options. This example shows how to define the zones:

dhcp-range = eth, 192.168.10.10,192.168.10.50,12h dhcp-range = wifi, 192.168.20.10,192.168.20.50,24h

The default route advertised to all clients is the address of your Dnsmasq server. You can configure DHCP to assign each zone a different default route:

dhcp-option = eth, 3,192.168.10.0 dhcp-option = wifi, 3,192.168.20.0

How do you know that 3 is the default route option? Run to see all the IPv4 options. lists the IPv6 options. (See for more information on options.) You may also use the option names instead of the numbers, like this example for your NTP server:

dhcp-option = eth, option: ntp-server, 192.168.10.5

Upstream Name Servers

Controlling which upstream name servers your network uses is one of the nicer benefits of running your own name server, instead of being stuck with whatever your ISP wants you to use. This example uses the Google public name servers. You don’t have to use Google; A quick Web search will find a lot of public DNS servers.

server = 8.8.4.4 server = 8.8.8.8

DNS hosts

Adding DNS hosts to Dnsmasq is almost as easy as falling over. All you do is add them to, like this, using your own addresses and hostnames:

127.0.0.1 localhost 192.168.10.2 web server 192.168.10.3 fileserver 192.168.10.4 dnsmasq 192.168.10.5 timeserver

Dnsmasq reads, and these hosts are available to your LAN either by hostname or by their fully-qualified domain names. The option in expands the hostnames to the value, for example webserver.mydomain.net

Set Static Addresses from DHCP

This is my favorite thing. You may assign static IP addresses to your LAN hosts by MAC address, or by hostname. The address must fall in a range you have already configured with:

dhcp-host =d0: 50: 99: 82: e7: 2b, 192.168.10.46 dhcp-host =turnip, 192.168.10.45

On most Linux distributions it is the default for dhclient to send the hostname. You can confirm this in, with the option. Do not have any duplicate entries in.

Here we are again at the end already. Check out these articles for more Dnsmasq features and howtos:

Learn more about Linux through the free “Introduction to Linux” course from The Linux Foundation and edX.