9

I'm trying to configure dnsmasq to work along with NetworkManager, the problem is when I try to run the service it fails with:

dnsmasq: failed to create listening socket for port 53: Address already in use

However nothing is listening on 127.0.0.1:53:

sudo ss -alpn sport = 53 src 127.0.0.1

The above command has no output!

Here is what my /etc/dnsmasq.conf looks like:

$ grep '^[^#]' /etc/dnsmasq.conf 

no-resolv
server=8.8.8.8#53
listen-address=127.0.0.1
cache-size=50

The issue can be fixed if I enable bind-interfaces in /etc/dnsmasq.conf.

Why should I enable this? the comments states that:

About the only time you may need this is when running another nameserver on the same machine.

So I thought the issue might come from systemd-resolved.service and sure it was. after stopping it:

sudo systemctl stop systemd-resolved.service

now dnsmasq is working fine without bind-interfaces option being enabled.


I'm running Ubuntu 18.04.1.
Installed using debootstrap and my default renderer is NetworkManager which is working fine.


My questions are:

  1. Why do I have to enable bind-interfaces?
  2. Is it okay to just disable systemd-resolved service? if it is how should I get dnsmasq to control /etc/resolv.conf?
  3. And more important, why I'm getting that weird error message when nothing is listening on port 53?
11
  • @GeorgeUdosen thanks but both links are unrelated ... :( – Ravexina Aug 5 '18 at 19:31
  • At least on my box, systemd-resolved listens on 127.0.0.53:53 rather than 127.0.0.1:53 so try sudo ss -alpn sport = 53 src 127.0.0.53 - or go oldschool and use something like sudo netstat -nlpt | grep :53 – steeldriver Aug 5 '18 at 22:06
  • Or sudo lsof -i tcp:53 – waltinator Aug 5 '18 at 22:33
  • 1
    I knew that systemd-resolved is listening on 127.0.0.53:53. The thing I wasn't aware of was when something is listening on lo it has effects on all IP addresses of lo. After playing around with netcat I figure it out... poor networking knowledge. – Ravexina Aug 6 '18 at 6:07
1

By default Dnsmasq tries to bind the port over all interfaces. Where --bind-interfaces only interface declared in the configuration.

man dnsmasq

-z, --bind-interfaces
    On systems which support it, dnsmasq binds the wildcard address,
    even when it is listening on only some interfaces. It then
    discards requests that it shouldn't reply to. This has the
    advantage of working even when interfaces come and go and change
    address. This option forces dnsmasq to really bind only the
    interfaces it is listening on. About the only time when this is
    useful is when running another nameserver (or another instance
    of dnsmasq) on the same machine. Setting this option also
    enables multiple instances of dnsmasq which provide DHCP service
    to run in the same machine.

--bind-dynamic
    Enable a network mode which is a hybrid between
    --bind-interfaces and the default. Dnsmasq binds the address of
    individual interfaces, allowing multiple dnsmasq instances, but
    if new interfaces or addresses appear, it automatically listens
    on those (subject to any access-control configuration). This
    makes dynamically created interfaces work in the same way as the
    default. Implementing this option requires non-standard
    networking APIs and it is only available under Linux. On other
    platforms it falls-back to --bind-interfaces mode. 

Similar cases:

More advance related topic:

0

Here is my working example. I can remember i had the same issue because my "buster" had systemd-resolved.service enabled. However it's been a while since I used it the last time, but the following config has nothing big special inside:

# disables dnsmasq reading any other files like /etc/resolv.conf for nameservers
no-resolv

# Interface to bind to
interface=br0

# Specify starting_range,end_range,lease_time
dhcp-range=192.168.2.181,192.168.2.230,72h 

# dns addresses to send to the clients
server=8.8.8.8
server=8.8.4.4
dhcp-option=option:ntp-server,162.159.200.123,90.187.99.165

Hope this helps

Best regards

Sascha

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.