Close Menu
    Facebook X (Twitter) Instagram
    Command Linux
    • About
    • How to
      • Q&A
    • OS
      • Windows
      • Arch Linux
    • AI
    • Gaming
      • Easter Eggs
    • Statistics
    • Blog
      • Featured
    • MORE
      • IP Address
      • Man Pages
    • Write For Us
    • Contact
    Command Linux
    Home - Arch Linux - How to Use dnsmasq on Linux

    How to Use dnsmasq on Linux

    WillieBy WillieMarch 3, 2026No Comments5 Mins Read

    The dnsmasq utility is a compact server application for Linux. It handles DNS, DHCP, PXE, TFTP, and router advertisement tasks. Unlike heavyweight DNS solutions, dnsmasq keeps things simple. It works best for home networks and small office setups.

    When a query arrives, dnsmasq checks its local cache first. If no match is found, it passes the request to an upstream resolver, such as Google’s public DNS. The tool also reads your system’s /etc/hosts file for local name resolution and responds to DHCP-configured machines.

    Getting dnsmasq Ready on Your Machine

    Confirm whether dnsmasq already exists on your system:

    $ dnsmasq --version

    If you see a version number, everything is set. Otherwise, grab it with your package manager.

    On Ubuntu or Debian-based distros:

    $ sudo apt install dnsmasq

    On Fedora:

    $ sudo dnf install dnsmasq
    Note: On Ubuntu, systemd-resolved occupies port 53 by default. Disable it before starting dnsmasq with sudo systemctl disable --now systemd-resolved. If you need to install a particular package version on Debian-based systems, the apt install specific version guide covers that process.

    Basic dnsmasq Command Format

    The general pattern looks like this:

    $ dnsmasq [options]

    Pass flags to control DNS cache capacity, DHCP address pools, config file paths, and more.

    Key dnsmasq Flags and Their Purpose

    Short Flag Long Flag What It Does
    -a ip --listen-address=ip Binds dnsmasq to a particular local IP
    -c size --cache-size=size Sets cache capacity (150 entries by default)
    -C file --conf-file=file Points to a custom config file
    -d --no-daemon Runs in debug mode rather than background
    -F ip --dhcp-range=ip Activates DHCP within a given address pool
    -h --no-hosts Skips loading /etc/hosts
    -i --interface=interface Restricts listening to one network interface
    -k --keep-in-foreground Prevents dnsmasq from daemonizing
    -K --dhcp-authoritative Declares this as the sole DHCP provider on the LAN
    -p port --port=port Changes the DNS listening port (default: 53)
    -q --log-queries Records all DNS lookups
    -R --no-resolve Ignores the resolv.conf file
    -v --version Prints the current dnsmasq version

    If your dnsmasq instance will listen on a non-standard port, make sure that port is open in your firewall. The guide to opening ports on Linux walks through the steps for ufw and firewalld.

    Practical dnsmasq Usage Scenarios

    Launching with default behavior

    Run dnsmasq without any flags to fire it up using standard settings:

    $ dnsmasq

    Your configuration must be valid before doing this. Review config files with a terminal editor like nano to check for syntax problems.

    Activating query logging

    Track every DNS request by appending the -q flag. To redirect logs into a separate file, pair it with -8:

    $ dnsmasq -q --log-facility=/home/user/dnsmasq.log

    This approach is helpful for troubleshooting network problems. Inspect log output with tools like grep or tail.

    Running dnsmasq as a DHCP provider

    Assign addresses automatically across your LAN by specifying an IP pool and lease duration:

    $ dnsmasq -F 192.168.10.80,192.168.10.160,6h

    Addresses between 192.168.10.80 and 192.168.10.160 get allocated here. Each lease lasts six hours.

    Restricting to one network adapter

    Force dnsmasq to accept traffic on a single interface only:

    $ dnsmasq -i enp0s0

    Combining several flags together

    Mix multiple options in one command. The example below listens on a specific adapter, allocates DHCP addresses, blocks host file loading, and enables query logging:

    $ dnsmasq --interface=enp0s0 --dhcp-range=192.168.10.80,192.168.10.160,6h --no-hosts --log-queries
    Tip: If a stray dnsmasq process is already bound to port 53, killing a process by name with killall dnsmasq clears it before restarting.

    Storing All dnsmasq Options Inside a Config File

    Typing long commands repeatedly gets tedious. Place every setting inside a dedicated file instead. Open a new file with any editor:

    $ sudo nano /etc/custom.conf

    Add your preferred settings there. Before launching, validate the syntax:

    $ dnsmasq -C /etc/custom.conf --test

    If no errors appear, boot the server with:

    $ dnsmasq -C /etc/custom.conf
    Warning: Restrict read access on config files containing DHCP secrets or upstream DNS credentials. Use chmod 600 /etc/custom.conf to lock the file to root only. The chmod executable guide covers permission management in more detail.

    To confirm dnsmasq is listening after startup, list running processes with ps aux | grep dnsmasq or check with ss -lntp | grep :53.

    Wrapping Up

    dnsmasq remains one of the most practical solutions for managing DNS and DHCP on small networks. Its low resource footprint makes it a good fit where a full-featured server would be overkill. With caching, forwarding, filtering, and PXE boot support packed into a single binary, dnsmasq covers a wide range of networking needs without added complexity.

    FAQs

    dnsmasq is a lightweight DNS forwarder, DHCP server, and network boot provider. It caches DNS queries and assigns IP addresses on small local networks.

    Run sudo apt install dnsmasq after disabling systemd-resolved. Remove the default /etc/resolv.conf symlink and create a new one pointing to your upstream DNS.

    Yes. Enable DHCP with the --dhcp-range flag while DNS runs by default. Both services operate within a single dnsmasq process.

    Write your settings in a file such as /etc/custom.conf, test with dnsmasq -C /etc/custom.conf --test, then launch using dnsmasq -C /etc/custom.conf.

    Run ss -lntp | grep :53 to see if port 53 is active, or use systemctl status dnsmasq on systemd-based distributions to check the service state.

    Willie
    • Website

    Willie has over 15 years of experience in Linux system administration and DevOps. After managing infrastructure for startups and enterprises alike, he founded Command Linux to share the practical knowledge he wished he had when starting out. He oversees content strategy and contributes guides on server management, automation, and security.

    Related Posts

    Arch Based Distros You Should Try in 2026

    March 19, 2026

    How to Set Up Spotify Arch Linux

    March 18, 2026

    How To Use Nmcli Connect To Wi-Fi on Linux

    March 14, 2026

    How to Do a Zsh Install on Any Linux Distro

    March 13, 2026
    Top Posts

    SYSTEMD.AUTOMOUNT

    January 28, 2026

    Linux in IoT Devices Statistics

    December 8, 2025

    Wordle Link That Works In 2026

    January 7, 2026

    How to Prepare a Linux Mint Live USB

    April 17, 2026
    • Home
    • Contact Us
    • Privacy Policy
    • Terms of Use

    Type above and press Enter to search. Press Esc to cancel.