Zeroconfig and Multicast DNS
Pat Lashley
patl at volant.org
Sat Aug 26 17:30:26 UTC 2006
> >> I would expect anyone using a real domain (as in using a real TLD,
> >> and a name registered at a domain registrar) to have a unicast DNS
> >> server.
> >
> > But those servers are typically outside the firewall (or in a DMZ).
> > Their purpose is to advertise the publicly visible hosts. The LAN(s)
> > behind the firewall typically use a completely different DNS server. And
> > often one or more subdomains that are not normally exposed to the public.
> >
> > Also, as is pointed out in draft-cheshire-dnsext-dns-sd.txt:
> >
> > Note that the DNS-SD service does NOT have to be provided by the same
> > DNS server hardware that is currently providing an organization's
> > conventional host name lookup service (the service we traditionally
> > think of when we say "DNS"). By delegating the "_tcp" subdomain, all
> > the workload related to DNS-SD can be offloaded to a different
> > machine. This flexibility, to handle DNS-SD on the main DNS server,
> > or not, at the network administrator's discretion, is one of the
> > things that makes DNS-SD so compelling.
> >
> > (I'm not sure why they don't mention the _udp subdomain here.)
>
> Yes, what's your point? SD records are plain DNS records and should
> be treated for exactly what they are. SD records in a unicast DNS
> environment would of course obey the rules of unicast DNS (including
> delegation to other servers).
My point is that it doesn't really matter whether anyone using a real domain
already has a unicast DNS server. That does not provide any impediment at all
if they wish to use mDNS for service discovery. Or even for link-local host
lookups in their domain. (By either delegating their domain if the request was
from within the LAN or creating a sub-domain that is always delegated.)
> > And from draft-cheshire-dnsext-multicastdns.txt:
> >
> > Multicast DNS Domains are not delegated from their parent domain via
> > use of NS records. There are no NS records anywhere in Multicast DNS
> > Domains. Instead, all Multicast DNS Domains are delegated to the IP
> > addresses 224.0.0.251 and FF02::FB by virtue of the individual
> > organizations producing DNS client software deciding how to handle
> > those names. It would be extremely valuable for the industry if this
> > special handling were ratified and recorded by IANA, since otherwise
> > the special handling provided by each vendor is likely to be
> > inconsistent.
> >
> > The IPv4 name server for a Multicast DNS Domain is 224.0.0.251. The
> > IPv6 name server for a Multicast DNS Domain is FF02::FB. These are
> > multicast addresses; therefore they identify not a single host but a
> > collection of hosts, working in cooperation to maintain some
> > reasonable facsimile of a competently managed DNS zone. Conceptually
> > a Multicast DNS Domain is a single DNS zone, however its server is
> > implemented as a distributed process running on a cluster of loosely
> > cooperating CPUs rather than as a single process running on a single
> > CPU.
>
> Yes, I'm aware of this. And SD records in a multicast DNS environment
> should obey the rules of mDNS.
> The problem and thing we seem to disagree on is whether SD records
> outside the .local domain should be allowed to be resolved using
> mDNS by default.
I have no problem with having that off by default; as long as it can be turned
on through the use of a single simple knob in rc.conf. (And that all of the
rc.conf mDNS and LLA knobs be setable from the sysinstall menus.)
Just don't make it so that mDNS -only- works for .local and the link local
in-addr.arpa domains.
> > Given that, in a situation where there is a unicast DNS server(*), the
> > standard nsswitch order should be 'files dns mdns', with the DNS server
> > containing records to delegate .local, .254.169.in-addr.arpa, and
> > ._{tcp,udp}.$(local domain) to the mDNS IP address(es).
> >
>
> How are you going to delegate between protocols?, while DNS and
> mDNS share the same PDU format, they should be treated as separate
> protocols.
The draft RFC indicates that those (sub)domains should be delegated. It does
not prohibit delegation of other (sub)domains.
> > We may want to add those delegations to our default BIND configuration
> > files. Possibly commented-out with a 'Uncomment these if you want to use
> > mDNS or mDNS-SD on your LAN' comment.
> >
>
> Do you mean a NS record pointing to the mDNS multicast address?, that
> doesn't seem right and will most likely confuse normal DNS clients
> and servers.
According to section 12, current implementations delegate .local,
.254.169.in-addr.arpa, and FF02::/16 via special-case code. If you're going to
do that, you may as well recognize explicit NS delegations to 224.0.0.251 and
FF02::FB
> For example the server would not be multicast aware, and if it does
> get a reply to one of its queries it will originate from a different
> ip than to which the query was sent.
That might be an argument against mixing them for host lookup; but for service
discovery, this is really only going to come up for clients that are using
DNS-SD; and there's absolutely no reason why the dns-sd library shouldn't
handle it properly.
I'm not familiar with the internals of the nsswitch and resolver code to
propose any particular solution; but there's no reason why it can't be made to
work cleanly. At worst case, you'd need a single nss module that could handle
both DNS and mDNS.
> >> Otherwise they have no "right" to use that name, even if
> >> it is only in a local network.
> >
> > WRONG! Once you register a name, you have the right to use it; you are
> > NOT required to provide ANY publicly available DNS records for it. Of
> > course, if you don't, it will only be useful internally; but there are
> > situations where that's desirable. (You also have the right to not use
> > it at all; in which case you are just preventing anyone else from using
> > it.)
>
> I was referring to the use of a domain with a real TLD that you didn't
> register at a domain registrar (and might belong to somebody else).
> Of course if you own a domain you can use it as you like.
You might be able to get by with using 'example.com'; but I wouldn't advise
trying it.
In any case; I don't think that we need to worry about people trying to use
unregistered domains. My point is that just because a domain is registered
doesn't mean that there are any unicast DNS servers providing authoritative
records for it. (Admittedly, it's probably a very good idea to at least have
one; even if it only contains the SOA.)
People will have good reasons to want to use a domain other than .local with
mDNS; and to use both that domain and .local at the same time. And quite
possibly to use multiple domains in additional to .local. Let's not get in
their way.
> We have been over this already and concluded that the mdns nss module
> should only allow (in its default state) queries to a few selected
> domains. SD records are just *plain* (m)dns records and will have to
> obey the same rules as any other records. _tcp.local. would be allow
> to be resolved via mDNS while _tcp.example.com would not.
> However, we *might* ship with a default configuration to the mdns nss
> module that would add {_tcp,_udp}.* to the set of domains that
> the nss module would allow to be resolved.
I think we need a third state where it only adds {_tcp,_udp}.$(domain) to the
list.
> A Service Discovery browser application that utilize the mDNS API
> directly would of course be allowed to do any type of query.
> But queries going through the more generalized NSS environment should
> be restricted by default.
Hmmm. Yes, I think that's a valid distinction. The nss_dns module and the
dns-sd library need not have the same set of default restrictions.
Applications using the nsswitch only are unlikely to be using DNS-SD at all;
and cannot be expected to be able to cope with delegation to a multicast
address. Those using libdns_sd are almost certain to be mDNS-aware; and the
library can handle the choice of mDNS -vs- unicast for particular queries (and
the potential recursion needed to resolve them.)
But that means that some of the configuration choices will need to be available
to the dns-sd library. (E.g., Whether to use mDNS only for .local, or also for
_{tcp,udp}.DOMAIN, _{tcp,udp}.*, or for everything.)
-Pat
More information about the freebsd-net
mailing list