** Description changed:

  [Impact]
  dnsmasq 2.79 and below omits EDNS0 OPT records when returning an empty answer 
for a domain it is authoritative for. systemd-resolved seems to get confused by 
this in certain circumstances; when using the stub resolver and requesting an 
address for which there are no AAAA records, there can sometimes be a five 
second hang in resolution.
  
  [Fix]
  This is fixed by upstream commit 
http://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=commit;h=1682d15a744880b0398af75eadf68fe66128af78
  
  Not sure if it is worth cherry picking? I imagine the most likely
  trigger will be dnsmasq on routers which are not likely to be running
  Ubuntu, but maybe just in case.
  
  I also think there are some logic issues in systemd-resolved, upstream
  bug filed:
  
  https://github.com/systemd/systemd/issues/9785
  
  [Test Case]
- Simple-ish test case:
+ Simple-ish test case for bionic:
  
  ---
  IFACE=dummy0
  SUBNET=10.0.0
  
  ip link add $IFACE type dummy
  ifconfig $IFACE ${SUBNET}.1/24
- dnsmasq -h -R -d -C /dev/null -2 $IFACE -z -i $IFACE -I lo 
--host-record=test.test,${SUBNET}.1 &
+ dnsmasq -h -R -d -C /dev/null -2 $IFACE -z -i $IFACE -I lo 
--host-record=test.test,${SUBNET}.1 --server=/test/ &
  
  dig -t a test.test @10.0.0.1 | grep EDNS
  # should return "; EDNS ..."
  dig -t aaaa test.test @10.0.0.1 | grep EDNS
  # again, should return "; EDNS ..." but doesn't
  ---
  
  To reproduce the systemd-resolved side of the problem
  
  ---
  # as above, but
  # now configure systemd-resolved to look at only 10.0.0.1, then
  
  systemd-resolve --reset-server-features
  # should exhibit five second delay then connect, assuming sshd is running :)
  ssh test.test
  ---
+ 
+ 
+ More detailed test case for focal and later:
+ 
+ install dnsmasq on a bionic system and start it, listening to an
+ interface that is externally reachable, e.g. for a normal libvirt vm
+ with interface name 'ens3':
+ 
+ IFACE=ens3
+ dnsmasq -h -R -d -C /dev/null -2 $IFACE -z -i $IFACE -I lo 
--host-record=test.test,1.2.3.4 --server=/test/
+ 
+ note that the '1.2.3.4' address doesn't matter, any addr is ok.
+ 
+ then setup a test system that can reach the dnsmasq system, and
+ configure networkd to use the dnsmasq server, e.g. using config like:
+ 
+ [Match]
+ Name=ens3
+ 
+ [Network]
+ DHCP=yes
+ DNS=DNSMASQ_IP_ADDRESS
+ Domains=test
+ 
+ [DHCPv4]
+ UseDNS=no
+ UseDomains=no
+ 
+ replace 'DNSMASQ_IP_ADDRESS' with the addr of the bionic system where
+ dnsmasq is running, and replace 'ens3' with whatever the test system
+ interface name is. Then restart systemd-networkd, and test:
+ 
+ systemd-resolve --reset-server-features
+ systemd-resolve --flush-caches
+ host test.test
+ 
+ The lookup using 'host' should complete immediately;.
  
  [Discussion]
  ProblemType: Bug
  DistroRelease: Ubuntu 18.04
  Package: dnsmasq-base 2.79-1
  ProcVersionSignature: Ubuntu 4.15.0-23.25-generic 4.15.18
  Uname: Linux 4.15.0-23-generic x86_64
  ApportVersion: 2.20.9-0ubuntu7.2
  Architecture: amd64
  Date: Sat Aug  4 11:33:56 2018
  InstallationDate: Installed on 2018-05-31 (64 days ago)
  InstallationMedia: Xubuntu 18.04 LTS "Bionic Beaver" - Release amd64 
(20180426)
  ProcEnviron:
   TERM=xterm
   PATH=(custom, no user)
   LANG=en_GB.UTF-8
   SHELL=/bin/bash
  SourcePackage: dnsmasq
  UpgradeStatus: No upgrade log present (probably fresh install)

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1785383

Title:
  missing EDNS0 record confuses systemd-resolved

To manage notifications about this bug go to:
https://bugs.launchpad.net/systemd/+bug/1785383/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to