Skip to content

mdns-alias: causes wrong addresses with multiple devices #1387

@troglobit

Description

@troglobit

Current Behavior

When multiple Infix devices are present on the same LAN, ixll scan (and other mDNS resolvers) show incorrect addresses. All devices publishing the infix.local CNAME end up resolving to the same IP address -- typically whichever device responded last. The local Avahi resolver cache gets confused by the conflicting CNAME answers.

This happens because mdns-alias publishes CNAME records with AVAHI_PUBLISH_ALLOW_MULTIPLE (in mdns-alias.c:47), which explicitly bypasses the mDNS probing and conflict resolution mechanism defined in RFC 6762 Section 8. Every device on the LAN simultaneously claims to be infix.local and network.local, resulting in multiple conflicting CNAME answers for the same name.

$ ixll scan
HOSTNAME                   ADDRESS            PRODUCT
infix.local                192.168.1.10       Infix ...
infix.local                192.168.1.10       Infix ...
infix.local                192.168.1.10       Infix ...

All three devices resolve to the same address because the last CNAME response for infix.local overwrites the others in the resolver cache.

Expected Behavior

Each device should resolve to its own unique IP address. The shared aliases (infix.local, network.local) should either be claimed by exactly one device via proper mDNS conflict resolution, or not be used as shared CNAMEs at all.

$ ixll scan
HOSTNAME                   ADDRESS            PRODUCT
infix-aa-bb-cc.local       192.168.1.10       Infix ...
infix-dd-ee-ff.local       192.168.1.20       Infix ...
infix-11-22-33.local       192.168.1.30       Infix ...

Steps To Reproduce

  1. Connect two or more Infix devices to the same LAN
  2. From a Linux host on the same LAN, run ixll scan
  3. Observe that multiple devices show the same IP address

Additional Information

Root cause in mdns-alias.c:

AvahiPublishFlags flags = (AVAHI_PUBLISH_USE_MULTICAST | AVAHI_PUBLISH_ALLOW_MULTIPLE);

AVAHI_PUBLISH_ALLOW_MULTIPLE tells Avahi to skip conflict detection, so all devices publish the same CNAME without any of them backing off.

The collision handling at lines 119-122 only handles Avahi server-level state changes (daemon re-registering), not actual mDNS name conflicts from other devices.

Possible solutions:

  1. Drop AVAHI_PUBLISH_ALLOW_MULTIPLE and handle AVAHI_ENTRY_GROUP_COLLISION properly. This lets the standard mDNS tie-breaking work: one device wins and claims the alias, the others give up. If the winning device goes away, another can reclaim it.

  2. Remove the shared infix.local alias entirely. Each device already has a unique hostname (infix-c0-ff-ee.local). The shared alias is only useful in single-device scenarios.

  3. Replace mdns-alias and netbrowse with a single service that handles both the network.local portal and device discovery properly, using mDNS service browsing (which already works correctly with multiple devices) rather than shared CNAMEs.

Note: ixll scan itself is not broken -- it discovers devices via mDNS service browsing (avahi-browse), which works fine. The problem is that the CNAME pollution from mdns-alias confuses the resolver when it tries to map hostnames to addresses.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriagePending investigation & classification (CCB)

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions