This bug was fixed in the package dnsmasq - 2.86-1.1ubuntu0.2
---------------
dnsmasq (2.86-1.1ubuntu0.2) jammy; urgency=medium
* src/forward.c: Do not refuse retries from client DNS queries. Behaviour to
stop infinite loops when all servers return REFUSED was wrongly activated
on client retries, resulting in incorrect REFUSED replies to client
retries. The code added here is a cherry pick released in upstream version
2.87, originating at
https://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=commit;h=2561f9fe0eb9c0be
(LP: #1981794)
-- Lena Voytek <[email protected]> Fri, 14 Oct 2022 14:39:41
-0700
** Changed in: dnsmasq (Ubuntu Jammy)
Status: Fix Committed => Fix Released
--
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to dnsmasq in Ubuntu.
https://bugs.launchpad.net/bugs/1981794
Title:
Duplicate/retried DNS queries fail with REFUSED (Fixed in upstream)
Status in dnsmasq package in Ubuntu:
Fix Released
Status in dnsmasq source package in Jammy:
Fix Released
Status in dnsmasq source package in Kinetic:
Fix Released
Bug description:
[Impact]
When a DNS query fails to complete and the system retries it,
subsequent copies of the query will be refused by dnsmasq. The client
will automatically receive the REFUSED return value without a retry
attempt.
Adding this fix will stop dnsmasq from unnecessarily breaking
connections, especially for situations where an internet connection is
flaky.
This bug is fixed by patching in an upstream commit -
https://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=commit;h=2561f9fe0eb9c0be
- which allows retried DNS requests through rather than refusing them.
[Test Plan]
The fix can be tested using 2 lxd containers, 1 for running the fix,
and 1 for acting as a dns server.
Start by setting up the dns server container:
# lxc launch images:ubuntu/jammy dns-resolver
# lxc exec dns-resolver bash
# apt update && apt dist-upgrade -y
# systemctl disable systemd-resolved
# systemctl stop systemd-resolved
# unlink /etc/resolv.conf
# echo nameserver 8.8.8.8 | tee /etc/resolv.conf
# apt install net-tools dnsmasq -y
# systemctl enable dnsmasq
Get the container's ip on lxd's network, in this case ifconfig is
used, showing 10.62.42.157:
# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.62.42.157 netmask 255.255.255.0 broadcast 10.62.42.255
...
Now set up the test container:
# lxc launch images:ubuntu/jammy test-dnsmasq
# lxc exec test-dnsmasq bash
# apt update && apt dist-upgrade -y
# systemctl disable systemd-resolved
# systemctl stop systemd-resolved
# unlink /etc/resolv.conf
Use other container's ip here, along with an ip that does not resolve
# echo "nameserver 10.62.42.157
nameserver 192.0.2.1" | tee /etc/resolv.conf
# apt install dnsmasq -y
# systemctl enable dnsmasq
On the dns server side, set the nameserver to 127.0.0.1 to cause
denials on the test server:
# echo nameserver 127.0.0.1 | tee /etc/resolv.conf; systemctl restart
dnsmasq
Now ping a known domain on the test container, and while it runs set
the dns server side nameserver back to 8.8.8.8:
# ping ubuntu.com
> swap containers
# echo nameserver 8.8.8.8 | tee /etc/resolv.conf; systemctl restart
dnsmasq
Ping will continue to not pick up the domain and fails with:
ping: ubuntu.com: Temporary failure in name resolution
With the fix, ping should now pick up the new successful responses:
PING ubuntu.com (185.125.190.29) 56(84) bytes of data.
64 bytes from website-content-cache-3.ps5.canonical.com (185.125.190.29):
icmp_seq=1 ttl=48 time=165 ms
64 bytes from website-content-cache-3.ps5.canonical.com (185.125.190.29):
icmp_seq=2 ttl=48 time=162 ms
64 bytes from website-content-cache-3.ps5.canonical.com (185.125.190.29):
icmp_seq=3 ttl=48 time=166 ms
64 bytes from website-content-cache-3.ps5.canonical.com (185.125.190.29):
icmp_seq=4 ttl=48 time=164 ms
64 bytes from website-content-cache-3.ps5.canonical.com (185.125.190.29):
icmp_seq=5 ttl=48 time=163 ms
64 bytes from website-content-cache-3.ps5.canonical.com (185.125.190.29):
icmp_seq=6 ttl=48 time=163 ms
^C
--- ubuntu.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5005ms
Note: ping is used here instead of another dns tester such as dig
because it continues its dns resolution attempts with retry packets
even after receiving a REFUSED error. Other programs fail immediately
on REFUSED and are unable to send duplicate packets to reproduce the
issue.
[Where problems could occur]
This change was added upstream in version 2.87, which means it has not
been tested in many situations alongside 2.86. Allowing the retries
could lead to a flood of requests to remote DNS servers if the replies
are unable to make it back through dnsmasq to the user.
[Other Info]
This bug was fixed in Kinetic in version 2.86-1.1ubuntu2.
[Original Description]
Duplicate or retried DNS queries will return REFUSED for one of the
queries causing intermittent failures in clients.
This probably breaks lots of things, but for me is causing 22.04's
internet connection sharing to be unstable. It's particularly bad for
my Xbox which seems to like sending duplicate queries.
Here's an example capture:
22:37:25.308212 IP 10.42.0.16.54248 > 10.42.0.1.53: 22442+ A?
title.auth.xboxlive.com. (41)
22:37:25.332711 IP 10.42.0.16.54248 > 10.42.0.1.53: 22442+ A?
title.auth.xboxlive.com. (41)
22:37:25.332740 IP 10.42.0.1.53 > 10.42.0.16.54248: 22442 Refused 0/0/0 (41)
22:37:25.353003 IP 10.42.0.1.53 > 10.42.0.16.54248: 22442 2/0/0 CNAME
title.auth.xboxlive.com.akadns.net., A 40.64.90.82 (105)
This has been fixed in upstream as of Sept 2021 in the unreleased 2.87
version. It's apparently a regression in version 2.86 (also released
in Sept 2021). Ubuntu 22.04 and later all use the broken 2.86 version.
Upstream fix:
https://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=commit;h=2561f9fe0eb9c0be1df48da1e2bd3d3feaa138c2
Upstream bug thread:
https://www.mail-archive.com/search?l=dnsmasq-discuss%40lists.thekelleys.org.uk&q=subject:%22%5C%5BDnsmasq%5C-discuss%5C%5D+REFUSED+after+dropped+packets%22&o=oldest&f=1
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/1981794/+subscriptions
--
Mailing list: https://launchpad.net/~touch-packages
Post to : [email protected]
Unsubscribe : https://launchpad.net/~touch-packages
More help : https://help.launchpad.net/ListHelp