Avahi 0.6.32 enabling IPv6 and Windows 10 log-silencing

First Avahi release in 3,65 years enables IPv6 by default and silences log flooding from Windows 10 clients on the same network.

I poked Avahi developer Trent Lloyd on IRC and forced him to make a new Avahi release enabling mDNS over IPv6 by default. He was happy for the nagging and inspiration to make the change, and made the release happen within hours.

Avahi is a Multicast Domain Name System (mDNS) and DNS Service-Discovery (DNS-SD) used in all popular Linux distributions and even on FreeBSD. It allows devices to announce their presence, name, and services offered to the local network, and is invaluable in-home networks where devices otherwise would not be set up in a way that would easily facilitate cross-device discovery and communication without requiring configuration on the devices. Apple has their own version used in all their products branded as Bonjour (using their mDNSresponder or discoveryd services), but Windows has been a hold-out and hasn’t offered built-in mDNS support.

Windows 10 ships with a partial and unfortunately somewhat broken mDNS and DNS-SD system. This is the first Windows release to support it out of the box. In the current version, it’s only used to discover printers and other devices when in the Settings: Devices dialog.

The two systems are also made available to Windows apps written in WinJS. At any rate, Windows also responds to broadcasts when the user has the Add Device or Print dialog open. (The problem also occurs in other instances, but it’s hard to narrow down exactly when and what triggers it.)

Unfortunately, and in clear violation of the RFC 6762 standard defining mDNS[1], Windows responds to all broadcasts coming from all devices even when it doesn’t have any answers to give. This triggered a logging function in Avahi clients over invalid 0-answer packages, and thus their logs were flooded with messages like these:

avahi-daemon: Invalid response packet from host 203.0.113.7
avahi-daemon: Invalid response packet from host 2001:db8::dead:e1f

The thing that brought me into the #avahi chat rooms was a desire to use Avahi on IPv6. By default, Avahi is supposed to use IPv6, but the default suggested configuration turned that on its head and disabled it again. Since home networking and the internet at large is transitioning—kicking and screaming, I might add—to IPv6, I thought my home network should use IPv6 where possible.

Much of the routing was done through mDNS by the Avahi library. Some Linux distributions had taken it upon themselves to patch this to use IPv6, but others (like Fedora Linux) had not. They preferred waiting years for upstream to make a release changing this default, but that seemed to never happen.

I thought I could help move things along, and set out to find an Avahi developer who could change the default and make a release happen. I stumbled into the #avahi IRC channel, expecting to find no one there and the project abandoned.

Instead, I found Trent Lloyd who was eager to listen, push IPv6 forward, and made the release happen in no time. Thanks man! I guess being responsible for a networking library that’s an IPv6 hold-out these days is analogous to being a climate-change denier at a science convention.

If you’re running an older version of Avahi, you can enable mDNS discovery and broadcast over IPv6 by changing use-ipv6=no to use-ipv6=yes or by deleting the same line entirely from /etc/avahi/avahi-daemon.conf.

Oh, and Avahi should now also compile on FreeBSD without requiring patches. Full changelog available on GitHub.

Sources

  • [1] Quoting from RFC 6762: A Multicast DNS responder MUST only respond when it has a positive, non-null response to send, or it authoritatively knows that a particular record doesn’t exist.