mdns-proxy: proxy mDNS requests to a unicast server and back
This allows you to use the DNS server of your choice to serve
mDNS requests.
BUILD
dune build
dune install
USAGE
If your DNS server is listening on 127.0.0.1:53, and you
want to receive mDNS requests on the interface ens0:
mdns-proxy udp!127.0.0.1!53 ens0
NOTES
The backend DNS server should only serve records for which
it considers itself the authority.
mdns-proxy sets the cache-flush bit for A/AAAA/CNAME records
and leaves it unset for SRV records, with the assumption that
SRV records are probably shared among other hosts on the network,
while A/AAAA/CNAME records probably refer to a single host.
mdns-proxy does not (yet) implement conflict resolution, probing,
or unsolicited announcement of records.
I wrote this as a way to give human-readable names that were usable on my home
network to containers and VMs running on my computers. The experience of
writing this program has taught me that you have to implement enough of the
(m)DNS protocols that passing requests off to another server does not save any
code, and it adds enough complexity around deployment and change detection that
this approach is inferior to integrating a full-fledged mDNS responder in my
application.
So I am unlikely to develop this much further, and have just uploaded it
for posterity.