One document matched: draft-ietf-homenet-hybrid-proxy-zeroconf-01.xml


<?xml version='1.0' ?>
<!--
Created:       Mon Jun 17 04:55:57 2013 mstenber
Last modified: Wed Sep  2 12:18:06 2015 mstenber
Edit time:     568 min
-->

<!--

- Terminology

 - is sloppy in general; for example, domain<>zone

 - no good term for 'base' DNS-SD domain which is used to look up domain search
 lists etc?

-->


<!DOCTYPE rfc SYSTEM 'rfc2629.dtd'>

<?rfc autobreaks="yes"?>
<?rfc compact="yes"?>
<?rfc strict='yes'?>
<?rfc subcompact="no"?>
<?rfc symrefs="yes"?>
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>

<rfc
    ipr='trust200902'
    docName='draft-ietf-homenet-hybrid-proxy-zeroconf-01'
    category='std'
    >
  <front>
    <title abbrev="Hybrid Proxy Network Zeroconf">
      Auto-Configuration of a Network of Hybrid Unicast/Multicast DNS-Based
      Service Discovery Proxy Nodes
    </title>
    <author initials="M" surname="Stenberg" fullname="Markus Stenberg">
      <organization>Independent</organization>
      <address>
        <postal>
          <street/>
          <city>Helsinki</city>
          <code>00930</code>
          <country>Finland</country>
        </postal>
        <email>markus.stenberg@iki.fi</email>
      </address>
    </author>
    <date month="September" year="2015" />
    <area>Internet</area>
    <workgroup>Homenet Working Group</workgroup>
    <keyword>IPv6</keyword>
    <keyword>Homenet</keyword>
    <keyword>DNS-SD</keyword>
    <keyword>mDNS</keyword>
    <abstract>

      <t>This document describes how a proxy functioning between Unicast
      DNS-Based Service Discovery and Multicast DNS can be automatically
      configured using an arbitrary network-level state sharing
      mechanism. </t>

    </abstract>
  </front>
  <middle>
    <section title="Introduction">

      <t>Section 3 ("Hybrid Proxy Operation") of <xref
      target="I-D.ietf-dnssd-hybrid"/> describes how to translate
      queries from Unicast DNS-Based Service Discovery described in <xref
      target="RFC6763"/> to Multicast DNS described in <xref
      target="RFC6762"/>, and how to filter the responses and translate
      them back to unicast DNS.</t>

      <t>This document describes what sort of configuration the
      participating hybrid proxy servers require, as well as how it can be
      provided using any network-wide state sharing mechanism such as
      link-state routing protocol or <xref
      target="I-D.ietf-homenet-hncp">Home Networking Control
      Protocol</xref>. The document also describes a naming scheme which
      does not even need to be same across the whole covered network to
      work as long as the specified conflict resolution works. The scheme
      can be used to provision both forward and reverse DNS zones which
      employ hybrid proxy for heavy lifting.</t>

      <t>This document does not go into low level encoding details of the
      Type-Length-Value (TLV) data that we want synchronized across a
      network. Instead, we just specify what needs to be available, and
      assume every node that needs it has it available.</t>

      <t>We go through the mandatory specification of the language used in
      <xref target="kwd"/>, then describe what needs to be configured in
      hybrid proxies and participating DNS servers across the network in
      <xref target="what"/>. How the data is exchanged using arbitrary
      TLVs is described in <xref target="how"/>. Finally, some overall
      notes on desired behavior of different software components is mentioned
      in <xref target="howto"/>. </t>

    </section>


    <section anchor="kwd" title='Requirements language'>

      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in
      this document are to be interpreted as described in <xref
      target='RFC2119' />.</t>

    </section>

    <section anchor="what" title="Hybrid proxy - what to configure">

      <t>Beyond the low-level translation mechanism between unicast and
      multicast service discovery, the hybrid proxy draft <xref
      target="I-D.ietf-dnssd-hybrid"/> describes just that there have
      to be NS records pointing to hybrid proxy responsible for each link
      within the covered network.</t>

      <t>In zero-configuration case, choosing the links to be covered is
      also non-trivial choice; we can use the border discovery
      functionality (if available) to determine internal and external
      links. Or we can use some other protocol's presence (or lack of it)
      on a link to determine internal links within the covered network, and
      some other signs (depending on the deployment) such as DHCPv6 Prefix
      Delegation (as described in <xref target="RFC3633"/>) to determine
      external links that should not be covered.</t>

      <t>For each covered link we want forward DNS zone delegation to an
      appropriate node which is connected to a link, and running hybrid
      proxy. Therefore the links' forward DNS zone names should be unique
      across the network. We also want to populate reverse DNS zone
      similarly for each IPv4 or IPv6 prefix in use. </t>

      <t>There should be DNS-SD browse domain list provided for the
      network's domain which contains each physical link only once,
      regardless of how many nodes and hybrid proxy implementations are
      connected to it. </t>

      <t>Yet another case to consider is the list of DNS-SD domains that we
      want hosts to enumerate for browse domain lists. Typically, it
      contains only the local network's domain, but there may be also other
      networks we may want to pretend to be local but are in different
      scope, or controlled by different organization. For example, a home
      user might see both home domain's services (TBD-TLD), as well as
      ISP's services under isp.example.com.</t>

      <section anchor="conflict" title="Conflict resolution within network">

        <t>Any naming-related choice on node may have conflicts in the
        network given that we require only distributed loosely synchronized
        database. We assume only that the underlying protocol used for
        synchronization has some concept of precedence between nodes
        originating conflicting information, and in case of conflict, the
        higher precedence node MUST keep the name they have chosen. The
        one(s) with lower precedence MUST either try different one (that is
        not in use at all according to the current link state information),
        or choose not to publish the name altogether.</t>

        <t>If a node needs to pick a different name, any algorithm works,
        although simple algorithm choice is just like the one described in
        Multicast DNS<xref target="RFC6762"/>: append -2, -3, and so forth,
        until there are no conflicts in the network for the given name.</t>

      </section>

      <section title="Per-link DNS-SD forward zone names">

        <t>How to name the links of a whole network in automated fashion? Two
        different approaches seem obvious:

        <list style="numbers">
          <t>
            Unique link name based - (unique-link).(domain).
          </t>
          <t>
            Node and link name - (link).(unique-node).(domain).
          </t>
        </list>

        The first choice is appealing as it can be much more friendly
        (especially given manual configuration). For example, it could mean
        just lan.example.com and wlan.example.com for a simple home
        network. The second choice, on the other hand, has a nice property
        of being local choice as long as node name can be made
        unique.</t>

        <t>The type of naming scheme to use can be left as implementation
        option. And the actual names themselves SHOULD be also overridable,
        if the end-user wants to customize them in some way. </t>

      </section>

      <section title="Reasonable defaults">

        <t>Note that any manual configuration, which SHOULD be possible,
        MUST override the defaults provided here or chosen by the creator
        of the implementation.</t>

        <section title="Network-wide unique link name (scheme 1)">

          <t>It is not obvious how to produce network-wide unique link
          names for the (unique-link).(domain) scheme. One option would be
          to base it on type of physical network layer, and then hope that
          the number of the networks won't be significant enough to confuse
          (e.g. "lan", or "wlan"). </t>

          <t>The network-wide unique link names should be only used in
          small networks. Given a larger network, after conflict
          resolution, identifying which link is 'lan-42.example.com' may be
          challenging.</t>
        </section>

        <section anchor="rname" title="Node name (scheme 2)">

          <t>Our recommendation is to use some short form which indicates
          the type of node it is, for example, "openwrt.example.com". As
          the name is visible to users, it should be kept as short as
          possible. In theory even more exact model could be helpful, for
          example, "openwrt-buffalo-wzr-600-dhr.example.com".  In practice
          providing some other records indicating exact node information
          (and access to management UI) is more sensible.</t>

        </section>

        <section anchor="lname" title="Link name (scheme 2)">

          <t>Recommendation for (link) portion of (link).(node).(domain)
          is to use physical network layer type as base, or possibly
          even just interface name on the node if it's descriptive
          enough. For example, "eth0.openwrt.example.com" and
          "wlan0.openwrt.example.com" may be good enough. </t>

        </section>
      </section>

    </section>
    <section anchor="how" title="TLVs">

      <t>To implement this specification fully, support for following three
      different TLVs is needed. However, only the DNS Delegated Zone TLVs
      MUST be supported, and the other two SHOULD be supported. </t>

      <section anchor="delegated-zone-tlv" title="DNS Delegated Zone TLV">

        <t>This TLV is effectively a combined NS and A/AAAA record for a
        zone. It MUST be supported by implementations conforming to this
        specification. Implementations SHOULD provide forward zone per link
        (or optimizing a bit, zone per link with Multicast DNS
        traffic). Implementations MAY provide reverse zone per prefix using
        this same mechanism. If multiple nodes advertise same reverse
        zone, it should be assumed that they all have access to the link
        with that prefix. However, as noted in <xref target="req"/>, mainly
        only the node with highest precedence on the link should publish
        this TLV.</t>

        <t>
          Contents:
          <list style="symbols">

            <t>Address field is IPv6 address (e.g. 2001:db8::3)
            or IPv4 address mapped to IPv6 address (e.g. ::FFFF:192.0.2.1)
            where the authoritative DNS server for Zone can be found. If
            the address field is all zeros, the Zone is under global DNS
            hierarchy and can be found using normal recursive name lookup
            starting at the authoritative root servers (This is mostly
            relevant with the S bit below).
            </t>

            <t>S-bit indicates that this delegated zone consists of
            a full DNS-SD domain, which should be used as base for DNS-SD
            domain enumeration (that is, (field)._dns-sd._udp.(zone)
            exists). Forward zones MAY have this set. Reverse zones MUST
            NOT have this set. This can be used to provision DNS search
            path to hosts for non-local services (such as those provided
            by ISP, or other manually configured service providers).
            </t>

            <t>B-bit indicates that this delegated zone should
            be included in network's DNS-SD browse list of domains at
            b._dns-sd._udp.(domain). Local forward zones SHOULD have this
            set. Reverse zones SHOULD NOT have this set.</t>

            <t>L-bit indicates that this delegated zone should
            be included in the network's DNS-SD legacy browse list of
            domains at lb._dns- sd._udp.(DOMAIN-NAME). Local forward zones
            SHOULD have this bit set, reverse zones SHOULD NOT.</t>

            <t>Zone is the label sequence of the zone, encoded
            according to section 3.1. ("Name space definitions") of <xref
            target="RFC1035"/>. Note that name compression is not required
            here (and would not have any point in any case), as we encode
            the zones one by one. The zone MUST end with an empty label. </t>

          </list>
        </t>

        <t>In case of a conflict (same zone being advertised by multiple
        parties with different address or bits), conflict should be
        addressed according to <xref target="conflict" />.</t>

      </section>

      <section anchor="domain-name-tlv" title="Domain Name TLV">

        <t>This TLV is used to indicate the base (domain) to be used for
        the network.  If multiple nodes advertise different ones, the
        conflict resolution rules in <xref target="conflict"/> should
        result in only the one with highest precedence advertising one,
        eventually. In case of such conflict, user SHOULD be notified
        somehow about this, if possible, using the configuration interface
        or some other notification mechanism for the nodes. Like the Zone
        field in <xref target="delegated-zone-tlv"/>, the Domain Name TLV's
        contents consist of a single DNS label sequence. </t>

        <t>This TLV SHOULD be supported if at all possible. It may be
        derived using some future DHCPv6 option, or be set by manual
        configuration. Even on nodes without manual configuration
        options, being able to read the domain name provided by a different
        node could make the user experience better due to consistent
        naming of zones across the network.</t>

        <t>By default, if no node advertises domain name TLV, hard-coded
        default (TBD) should be used.</t>

      </section>
      <section anchor="node-name-tlv" title="Node Name TLV">

        <t>This TLV is used to advertise a node's name. After the
        conflict resolution procedure described in <xref
        target="conflict"/> finishes, there should be exactly zero to one
        nodes publishing each node name. The contents of the TLV should
        be a single DNS label.</t>

        <t>This TLV SHOULD be supported if at all possible. If not
        supported, and another node chooses to use the (link).(node)
        naming scheme with this node's name, the contents of the
        network's domain may look misleading (but due to conflict
        resolution of per-link zones, still functional).</t>

        <t>If the node name has been configured manually, and there is a
        conflict, user SHOULD be notified somehow about this, if possible,
        using the configuration interface or some other notification
        mechanism for the nodes.</t>
      </section>

    </section>

    <section anchor="howto" title="Desirable behavior">

      <section title="DNS search path in DHCP requests">
        <t>The nodes following this specification SHOULD provide the used
        (domain) as one item in the search path to it's hosts, so that
        DNS-SD browsing will work correctly. They also SHOULD include any
        DNS Delegated Zone TLVs' zones, that have S bit set. </t>
      </section>

      <section title="Hybrid proxy">

        <t>The hybrid proxy implementation SHOULD support both forward
        zones, and IPv4 and IPv6 reverse zones. It SHOULD also detect
        whether or not there are any Multicast DNS entities on a link, and
        make that information available to the network zeroconf daemon (if
        implemented separately). This can be done by (for example)
        passively monitoring traffic on all covered links, and doing
        infrequent service enumerations on links that seem to be up, but
        without any Multicast DNS traffic (if so desired). </t>

        <t>Hybrid proxy nodes MAY also publish it's own name via
        Multicast DNS (both forward A/AAAA records, as well as reverse PTR
        records) to facilitate applications that trace network topology.
        </t>


      </section>
      <section anchor="req" title="Hybrid proxy network zeroconf daemon">

        <t>The daemon should avoid publishing TLVs about links that have no
        Multicast DNS traffic to keep the DNS-SD browse domain list as
        concise as possible. It also SHOULD NOT publish delegated zones for
        links for which zones already exist by another node with higher
        precedence.</t>

        <t>The daemon (or other entity with access to the TLVs) SHOULD
        generate zone information for DNS implementation that will be used
        to serve the (domain) zone to hosts. Domain Name TLV described in
        <xref target="domain-name-tlv"/> should be used as base for the
        zone, and then all DNS Delegated Zones described in <xref
        target="delegated-zone-tlv"/> should be used to produce the rest of
        the entries in zone (see <xref target="example-dns-zone"/> for example
        interpretation of the TLVs in <xref target="example-ospf"/>.</t>

      </section>

    </section>

    <section title="Security Considerations">

      <t>There is a trade-off between security and zero-configuration in
      general; if used network state synchronization protocol is not
      authenticated (and in zero-configuration case, it most likely is
      not), it is vulnerable to local spoofing attacks. We assume that this
      scheme is used either within (lower layer) secured networks, or with
      not-quite-zero-configuration initial set-up.</t>

      <t>If some sort of dynamic inclusion of links to be covered using
      border discovery or such is used, then effectively service discovery
      will share fate with border discovery (and also security issues if
      any).</t>

    </section>

    <section title="IANA Considerations">

      <t>This document has no actions for IANA.</t>

    </section>

  </middle>
  <back>
    <references title="Normative references">
      <?rfc include="reference.I-D.draft-ietf-dnssd-hybrid-00.xml"?>
      <?rfc include="reference.RFC.1035.xml"?>
      <?rfc include="reference.RFC.2119.xml"?>
      <?rfc include="reference.RFC.6762.xml"?>
      <?rfc include="reference.RFC.6763.xml"?>
    </references>
    <references title="Informative references">
      <?rfc include="reference.I-D.draft-ietf-homenet-hncp-09.xml"?>
      <?rfc include="reference.RFC.3633.xml"?>
      <?rfc include="reference.RFC.3646.xml"?>
    </references>

    <section title="Example configuration">

<section title="Used topology">
      <t>Let's assume home network that looks like this:</t>

      <figure>
        <artwork>
       |[0]
    +-----+
    | CER |
    +-----+
 [1]/    \[2]
   /      \
+-----+ +-----+
| IR1 |-| IR2 |
+-----+ +-----+
 |[3]|   |[4]|
        </artwork>
      </figure>

      <t>We're not really interested about links [0], [1] and [2], or the
      links between IRs. Given the optimization described in <xref
      target="delegated-zone-tlv"/>, they should not produce anything to
      network's Multicast DNS state (and therefore to DNS either) as there
      isn't any Multicast DNS traffic there.
      </t>

      <t>The user-visible set of links are [3] and [4];
      each consisting of a LAN and WLAN link.

      We assume that ISP provides 2001:db8:1234::/48 prefix to be delegated in
      the home via [0].
      </t>

</section>


<section title="Zero-configuration steps">

      <t>Given implementation that chooses to use the second naming scheme
      (link).(node).(domain), and no configuration whatsoever, here's
      what happens (the steps are interleaved in practice but illustrated
      here in order):</t>
      <t>
      <list style="numbers">

        <t>Network-level state synchronization protocol runs, nodes get
        effective precedences. For ease of illustration, CER winds up with
        2, IR1 with 3, and IR2 with 1. </t>

        <t>Prefix delegation takes place. IR1 winds up with
        2001:db8:1234:11::/64 for LAN and
        2001:db8:1234:12::/64 for WLAN. IR2 winds up with
        2001:db8:1234:21::/64 for LAN and
        2001:db8:1234:22::/64 for WLAN. </t>

        <t>IR1 is assumed to be reachable at 2001:db8:1234:11::1 and IR2 at
      2001:db8:1234:21::1. </t>


        <t>Each node wants to be called 'node' due to lack of
        branding in drafts. They announce that using the node name TLV
        defined in <xref target="node-name-tlv" />. They also
        advertise their local zones, but as that information may change,
        it's omitted here.</t>

        <t>Conflict resolution ensues. As IR1 has precedence over the rest,
        it becomes "node". CER and IR2 have to rename, and (depending on
        timing) one of them becomes "node-2" and other one "node-3". Let us
        assume IR2 is "node-2". During conflict resolution, each node
        publishes TLVs for it's own set of delegated zones. </t>

        <t>CER learns ISP-provided domain "isp.example.com" using DHCPv6
        domain list option defined in <xref target="RFC3646"/>. The
        information is passed along as S-bit enabled delegated zone
        TLV.</t>
      </list>
      </t>
    </section>

    <section anchor="example-ospf" title="TLV state">

      <t>Once there is no longer any conflict in the system, we wind up
      with following TLVs (NN is used as abbreviation for Node Name, and DZ
      for Delegated Zone TLVs):
      </t>

      <figure>
        <artwork>
(from CER)
DZ {s=1,zone="isp.example.com"}

(from IR1)
NN {name="node"}

DZ {address=2001:db8:1234:11::1, b=1,
    zone="lan.node.example.com."}
DZ {address=2001:db8:1234:11::1,
    zone="1.1.0.0.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa."}

DZ {address=2001:db8:1234:11::1, b=1,
    zone="wlan.node.example.com."}
DZ {address=2001:db8:1234:11::1,
    zone="2.1.0.0.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa."}

(from IR2)
NN {name="node-2"}

DZ {address=2001:db8:1234:21::1, b=1,
    zone="lan.node-2.example.com."}
DZ {address=2001:db8:1234:21::1,
    zone="1.2.0.0.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa."}

DZ {address=2001:db8:1234:21::1, b=1,
    zone="wlan.node-2.example.com."}
DZ {address=2001:db8:1234:21::1,
    zone="2.2.0.0.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa."}

        </artwork>
      </figure>

    </section>
    <section anchor="example-dns-zone" title="DNS zone">
      <t>In the end, we should wind up with following zone for
      (domain) which is example.com in this case, available at all nodes,
      just based on dumping the delegated zone TLVs as NS+AAAA records, and
      optionally domain list browse entry for DNS-SD:</t>
      <figure>
        <artwork>
b._dns_sd._udp PTR lan.node
b._dns_sd._udp PTR wlan.node

b._dns_sd._udp PTR lan.node-2
b._dns_sd._udp PTR wlan.node-2

node AAAA 2001:db8:1234:11::1
node-2 AAAA 2001:db8:1234:21::1

node NS node
node-2 NS node-2

1.1.0.0.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa. NS node.example.com.
2.1.0.0.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa. NS node.example.com.
1.2.0.0.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa. NS node-2.example.com.
2.2.0.0.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa. NS node-2.example.com.
        </artwork>
      </figure>
      <t>Internally, the node may interpret the TLVs as it chooses to, as
      long as externally defined behavior follows semantics of what's given
      in the above.</t>
    </section>

    <section anchor="interaction" title="Interaction with hosts">

      <t>So, what do the hosts receive from the nodes? Using
      e.g. DHCPv6 DNS options defined in <xref target="RFC3646"/>, DNS
      server address should be one (or multiple) that point at DNS server
      that has the zone information described in <xref
      target="example-dns-zone"/>. Domain list provided to hosts should
      contain both "example.com" (the hybrid-enabled domain), as well as the
      externally learned domain "isp.example.com".</t>

      <t>When hosts start using DNS-SD, they should check both
      b._dns-sd._udp.example.com, as well as b._dns-sd._udp.isp.example.com
      for list of concrete domains to browse, and as a result services from
      two different domains will seem to be available.</t>

    </section>
  </section>

    <section title="Implementation">

      <t>There is an prototype implementation of this draft at <eref
      target="https://github.com/sbyx/hnetd/">hnetd github
      repository</eref> which contains variety of other homenet WG-related
      things' implementation too.</t>

    </section>

    <section title="Why not just proxy Multicast DNS?">

      <t>Over the time number of people have asked me about how, why, and
      if we should proxy (originally) link-local Multicast DNS over
      multiple links.</t>

      <t>At some point I meant to write a draft about this, but I think I'm
      too lazy; so some notes left here for general amusement of people
      (and to be removed if this ever moves beyond discussion piece).</t>

      <section title="General problems">

        <t>There are two main reasons why Multicast DNS is not proxyable in
        the general case.</t>

        <t>First reason is the conflict resolution depends on the RRsets
        staying constant. That is not possible across multiple links (due
        to e.g. link-local addresses having to be filtered). Therefore,
        conflict resolution breaks, or at least requires ugly hacks to work
        around.</t>

        <t>A simple, but not really working workaround for this is to make
        sure that in conflict resolution, propagated resources always
        loses. Given that the proxy function only removes records, the
        result SHOULD be consistently original set of records winning. Even
        with that, the conflict resolution will effectively cease working,
        allowing for two instances of same name to exist (as both think
        they 'own' the name due to locally seen higher precedence). </t>

        <t>Given some more extra logic, it is possible to make this work by
        having proxies be aware of both the original record sets, and
        effectively enforcing the correct conflict resolution results by
        (for example) passing the unfiltered packets to the losing party
        just to make sure they renumber, or by altering the RR sets so that
        they will consistently win (by inserting some lower rrclass/rrtype
        records). As the conflicts happen only in rrclass=1/rrtype=28, it
        is easy enough to add e.g. extra TXT record (rrtype 16) to force
        precedence even when removing the later rrtype 28
        record. Obviously, this new RRset must never wind up near the
        host with the higher precedence, or it will cause spurious renaming
        loops.</t>

        <t>Second reason is timing, which is relatively tight in the
        conflict resolution phase, especially given lossy and/or high
        latency networks.</t>

      </section>
      <section title="Stateless proxying problems">

        <t>In general, typical stateless proxy has to involve flooding, as
        Multicast DNS assumes that most messages are received by every
        host. And it won't scale very well, as a result.
        </t>

        <t>The conflict resolution is also harder without state. It may
        result in Multicast DNS responder being in constant probe-announce
        loop, when it receives altered records, notes that it's the one
        that should own the record. Given stateful proxying, this would be
        just a transient problem but designing stateless proxy that won't
        cause this is non-trivial exercise.</t>

      </section>

      <section title="Stateful proxying problems">


        <t>One option is to write proxy that learns state from one link,
        and propagates it in some way to other links in the network. </t>

        <t>A big problem with this case lies in the fact that due to
        conflict resolution concerns above, it is easy to accidentally send
        packets that will (possibly due to host mobility) wind up at the
        originator of the service, who will then perform renaming. That can
        be alleviated, though, given clever hacks with conflict resolution
        order. </t>

        <t>The stateful proxying may be also too slow to occur within the
        timeframe allocated for announcing, leading to excessive later
        renamings based on delayed finding of duplicate services with same
        name</t>

        <t>A work-around exists for this though; if the game doesn't work
        for you, don't play it. One option would be simply not to propagate
        ANY records for which conflict has seen even once. This would work,
        but result in rather fragile, lossy service discovery
        infrastructure.</t>

        <t>There are some other small nits too; for example, Passive
        Observation Of Failure (POOF) will not work given stateful
        proxying. Therefore, it leads to requiring somewhat shorter TTLs,
        perhaps. </t>

      </section>
    </section>

    <section title="Acknowledgements">

      <t>Thanks to Stuart Cheshire for the original hybrid proxy draft and
      interesting discussion in Orlando, where I was finally convinced that
      stateful Multicast DNS proxying is a bad idea.</t>

      <t>Also thanks to Mark Baugher, Ole Troan, Shwetha Bhandari and Gert
      Doering for review comments.</t>

    </section>

    <section title="Changelog [RFC Editor: please remove]">
      <t>draft-ietf-homenet-hybrid-proxy-zeroconf-01:
      <list style="symbols">
        <t>Refreshed the draft while waiting on progress of
        draft-ietf-dnssd-hybrid.</t>
      </list>
      </t>
    </section>
  </back>
</rfc>

PAFTECH AB 2003-20262026-04-23 09:27:02