Configuring my routers to use hnet for Homenet. One of the things Homenet should do is allow registration and discovery of resources (printers, http servers, etc). Is there a way to use hnet with dnsmasq to register services as DNS records?
I can see in hnet's option.c the function
hncp_sd_write_dnsmasq_conf() which writes out a dnsmasq config file, but for services it only writes out pointer records for
lb._dns-sd._udp... as per RFC6763 " DNS-Based Service Discovery". But there is no pointer record for
r._dns-sd._udp... for registering new services, and no SRV or TXT records. hnet also updates the config file on a timer and restarts dnsmasq, so any changes added would get lost.
I know that dnsmasq can dynamically update the DNS from new DHCP records, but that only seems to be for hostnames/ip, not services.
I've come across the Perl script
dynamic-dnsmasq.pl which "tries to emulate DynDNS.org's dynamic dns service" but that also seems to deal with hostname/ip records (via the option 'addn-hosts') rather than service records. It also restarts dnsmasq by sending SIGHUP, which also seems like an 'out of band' mechanism.
/etc/dnsmasq.conf could have service records added, but I kind of think that should be a relatively static file, rather than one which is dynamically updated as services come and go.
And now I've run out of ideas. Anyone else got some?
Okay, I think I've got it. Service discovery in OpenWrt using DNS is based on 4 components:
- the DNS server - dnsmasq
- the mDNS daemon - mdnsd
- whatever registers services e.g. Avahi
- the translator between DNS and mDNS - ohybridproxy
What is not so obvious is that the behaviour between the first two is conditioned by the domain names chosen in
ohybridproxy. The choices seem to be:
- .local - used initially by Apple's Bonjour, still the default domain for mDNS services
- .home - common, and in the original HNCP RFC7788
- .home.arpa - the revised domain in RFC8375
I was using the domain name
home.arpa. in the config files
/etc/config/ohybridproxy. For services, I was registering them using Avahi and leaving the domain to the default, i.e.
.local. A typical failing query was
dig PTR _http._tcp.openwrt.home.arpa
.local is where it broke down. Looking at
logread and the source code for
ohybridproxy there are two cases:
- domain name ends in
ohybridproxy doesn't translate the query domain and hands it unchanged to
mdnsd. It finds no services in domain
.home.arpa. Avahi (or
dns-sd or whatever registers services) has to register them in the same domain.
For example in
/etc/avahi/services/XYZ.service it needs
- domain name does not end in
ohybridproxy does translate the domain to
.local. Then DNS lookups can find the services registered with the default
So I should be using
.home.arpa throughout, but there are still seem to be many services which advertise themselves in the
.local domain. Hmmm, a nuisance, but that is a different problem!
Update: I've registered it as an issue at ohybridproxy because it looks like a bug to me
This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.