[avahi] Avahi tosses unicast packets from same host

Trent Lloyd lathiat at bur.st
Sat May 20 05:14:05 UTC 2017


Hi Jim,

Thanks for your observations.

I actually had some issues with loopback raised to me recently by Till 
Kamppeter with regards to the IPPUSBXD project 
(https://github.com/tillkamppeter/ippusbxd/) who wanted to be able to 
publish a service locally on the machine and not export it.  In a way 
that's similar in scope to what you are talking about here.

I need to review the handling of loopback and perhaps can fix your issue 
at the same time.  As part of his fix I am probably going to always 
activate the loopback interface which will fix your issue anyway at 
least partly (though wouldn't fix the deny-interfaces side).  I am not 
sure I want to accept unicast queries on "disabled" interfaces, that's 
probably a bad idea but it probably does make sense to try and answer 
them from localhost.  So hopefully that fix will suffice.


Not activating loopback (as well as having IPv6 disabled) were 
originally mechanisms to 'simply' solve the problem of duplicate 
services - the same name appearing on multiple interfaces which is a 
difficult problem because they may actually be different services - 
there's no way to tell for sure.  I need to revisit these problems and 
try to find a more elegant solution / suggestion to interface authors.


On the issue with the source address, that's also a problem that shows 
up in a number of areas.  I would agree that it makes most sense to 
reply from the originally queried address.

Can you open an issue for each of these about it here so I can track it? 
(I can open one for you but you may prefer to get updates about it - if 
you'd prefer I just open one reply and let me know):
https://github.com/lathiat/avahi/issues

Regards,
Trent
@lathiat


On 14/05/17 03:03, jimc wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> This is for avahi-0.6.31-26.1.x86_64 from OpenSuSE "Leap" 42.1.  I've
> written a set of simple test scripts that check if daemons are
> functioning, restarting them if not.  The one for avahi-daemon basically
> does: (illustrated executing on host kermit)
>      dig -p 5353 +short @kermit kermit.local. A
> No RR's are returned and the query times out.  In syslog I see
> "Received packet from invalid interface."  If I ask about Kermit but
> executing on any different host, the correct content is returned, and
> similarly for all pairs of hosts on my net: a unicast query to the
> execution host yields nothing, but to a different host is answered
> reliably.  Every query fails/succeeds equally, e.g. an AAAA record, or
> asking for the PTR at _ssh._tcp.local.  It fails/succeeds equally when
> the IPv4 or IPv6 address of the server is used.  Multicast queries to
> 224.0.0.251 and ff02::fb are answered even from the execution host.
>
> I tracked this down to (source)/avahi-core/server.c ;  see
> dispatch_packet() in that file.  The AvahiIfIndex (believed same as
> /sys/class/net/${IFC}/ifindex) is 1, identifying lo (loopback) on my
> machine, and its i->announcing flag is zero (as it should be).  But the
> contingency at the start of this subroutine causes packets received from
> non-announcing interfaces to be tossed with the "invalid interface"
> message, explaining the symptom.  But I don't see how multicast packets
> escape the ax.
>
> I wish a distinction could be made between interfaces (e.g. lo) whose
> address should not be announced, versus deny-interfaces members.
>
> There's a second issue which I should mention, though it may be hard to
> fix.  On my net, Linux boxes generally have a fixed IP gotten by DHCP,
> plus a RFC 4862 address (prefix + EUI-64).  Avahi-daemon lets the kernel
> pick which one to send from.  "dig", but not Perl's Net::DNS::Resolver,
> rejects packets from other than the address it sent the (unicast) query
> to, and so from half the machines, Avahi responses are rejected noisily
> by "dig" but are functional on other software.  I wish that avahi-daemon
> would respond to unicast queries (of course not multicast) using the
> source address in the query packet.
>
> /etc/avahi/avahi-daemon.conf follows, with comments removed.  Changes
> from (source>/avahi-daemon/avahi-daemon.conf are noted.
>
> [server]
> use-ipv4=yes
> use-ipv6=yes			# Local mod, turned on
> allow-interfaces=wlan0		# Local mod to explicitly allow wlan0
> ratelimit-interval-usec=1000000
> ratelimit-burst=1000
> [wide-area]
> enable-wide-area=yes
> [publish]
> publish-a-on-ipv6=yes		# Local mod, turned on
> [reflector]
> # no reflector
> [rlimits]
> rlimit-core=0
> rlimit-data=4194304
> rlimit-fsize=0
> rlimit-nofile=768
> rlimit-stack=4194304
> rlimit-nproc=3
>
> - -- 
> James F. Carter   Email: jimc at jfcarter.net
> Web: http://www.math.ucla.edu/~jimc (q.v. for PGP key)
> -----BEGIN PGP SIGNATURE-----
>
> iQEzBAEBCAAdFiEEwCO3Ffd4f3UN9nvKddigLE9RfKkFAlkXWG0ACgkQddigLE9R
> fKkRpwgAnKNuIOiIABXHFV18dHNb3PSWdRdxCUJ8i8AOQspVw0fl/z7jjtOryuWn
> BqqLUdZGBpPXLTLX6h7V9cBwClJE3bx6xyoMR1aXgRIrZnONtoSY/OhSP01GBrq/
> JC6PIqrodIePWl/1OQm9NkiotILFFMzl/Y9exXxqcQyExOmZM33BKvwzu7GIBAIf
> nUj1SnBVV7YNoXgv0IJMiL5nDcupwXlfCYbbyXivJyvpGf+T/5HNBxBXjV3K1A+b
> cRhIShbILFtbB6wYh27A2+rQaTlRqC60jdg4iKqXe2zuSdknTklPHepTN6y6Zyni
> dAWeYbfXY68zAXcj9IPpylxbrDro+g==
> =fNbk
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> avahi mailing list
> avahi at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/avahi



More information about the avahi mailing list