<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc4861 PUBLIC "" "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4861.xml">
<!ENTITY rfc5175 PUBLIC "" "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5175.xml">
<!ENTITY rfc6105 PUBLIC "" "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6105.xml">
<!ENTITY rfc2119 PUBLIC "" "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY rfc8174 PUBLIC "" "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY rfc6146 PUBLIC "" "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6146.xml">
<!ENTITY rfc6147 PUBLIC "" "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6147.xml">
<!ENTITY I-D.bz-v4goawayflag SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.bz-v4goawayflag.xml">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="std" docName="draft-ietf-6man-ipv6only-flag-03" updates="5175"> 

<front>

<title abbrev="IPv6-Only Flag">IPv6 Router Advertisement IPv6-Only Flag</title>


<author fullname="Robert M. Hinden" initials="R" surname="Hinden">
      <organization>Check Point Software</organization>
      <address>
        <postal>
          <street>959 Skyway Road</street>
          <!-- Reorder these if your country does things differently -->
          <city>San Carlos</city>
          <region>CA</region>
          <code>94070</code>
          <country>USA</country>
        </postal>
        <phone/>
	<facsimile/>
        <email>bob.hinden@gmail.com</email>
        <!-- uri and facsimile elements may also be added -->
      </address>
</author>

   <author fullname="Brian Carpenter" initials="B. E." surname="Carpenter">
     <organization abbrev="Univ. of Auckland"/>
     <address>
       <postal>
         <street>Department of Computer Science</street>
         <street>University of Auckland</street>
         <street>PB 92019</street>
         <city>Auckland</city>
         <region/>
         <code>1142</code>
         <country>New Zealand</country>
       </postal>
       <email>brian.e.carpenter@gmail.com</email>
     </address>
   </author>

<date day="" month="" year=""/>

<abstract>
  <t>This document specifies a Router Advertisement Flag to indicate to
  hosts that the administrator has configured the router to advertise that
  the link is IPv6-Only.
  This document updates RFC5175.</t>

</abstract>

</front>

<middle>

<section title="Introduction" anchor="Intro">

  <t>This document specifies a Router Advertisement Flag to indicate to
  hosts that the administrator has configured the router to advertise that
  the link is IPv6-Only.
  The flag does not apply to non-default IPv6 routers.
  </t>

  <t>Hosts that support IPv4 and IPv6, usually called dual stack hosts,
  need to also work efficiently on IPv6 only links.  That is, a link where there are
  no IPv4 routers and/or IPv4 services.  Dual stack is the default
  configuration for most current host operating systems such as Windows
  10, IOS, Android, Linux, and BSD, as well as devices such as printers.

  Monitoring of an IPv6-only link, for example at the IETF 100 meeting
  in Singapore, shows that current dual stack hosts will create local
  auto-configured IPv4 addresses and attempt to reach IPv4 services, even though they
  cannot configure a normal address using DHCP. This may be
  a problem for several reasons, depending on the equipment in use and its
  configuration, especially on large wireless networks:
  <list style="symbols">
  <t>It may result in an undesirable level of wasted Layer 2 broadcast traffic.</t>

  <t>In particular, this may overload switches in multi-segment wireless
  networks if the switches create IPv4 state for every dual stack host.</t>

  <t>Such traffic may drain battery power on wireless hosts that have no
  interest in link-local IPv4, ARP, and DHCPv4 relay traffic, but receive
  unwanted IPv4 packets.  <xref target="RFC7772"/> indicates how this
  risk might be quantified.</t>

  <t>Similarly, hosts may waste battery power on futile attempts to access services
  by sending IPv4 packets.</t>

  <t>On an IPv6-only link, IPv4 might be used for malicious purposes and pass
  unnoticed by IPv6-only monitoring mechanisms.</t>
  </list></t>
    
  <t>In managed networks whose equipment allows it, these problems could
  be mitigated by configuring the Layer 2 infrastructure to drop IPv4
  and ARP traffic by filtering Ethertypes 0x0800 and 0x806
  <xref target="IANA-Ethertype"/>.  IPv6 uses a different Ethertype,
  0x86DD, so this filtering will not interfere with IPv6 traffic.
  Depending on the equipment details, this would limit the traffic
  to the link from an IPv4 sender to the switch, and would drop all
  IPv4 and ARP broadcast packets at the switch.
  This document recommends using such mechanisms when available.</t>

  <t>However, hosts transmitting IPv4 packets would still do so, consuming
  their own battery power and some radio bandwidth.  The intent of this
  specification is to provide a mechanism that prevents such traffic,
  and also works on networks without
  the ability to filter L2 traffic, or where there are portions of a
  network without the ability to filter L2 traffic.  It may also be
  valuable on unmanaged networks using routers pre-configured for
  IPv6-only operations and where Layer 2 filtering is unavailable.
</t>
  
  <t>An assumption of this document is that no IPv4 DHCP server or relay
  is active on the link, because it is an IPv6-only link. If this assumption
  is false, the DHCP option to disable IPv4 stateless auto-configuration
  <xref target="RFC2563"/> could be used.</t>
  
  <t>The remainder of this document therefore assumes that neither effective
  Layer 2 filtering nor the RFC 2563 DHCP option is applicable to the link
  concerned.</t>

  <t>Because there is no IPv4 support on IPv6-only routers, the only way to notify
  the dual stack hosts that this link is IPv6-Only is to use an IPv6 mechanism.  An
  active notification will be much more precise than attempting to deduce
  this fact by the lack of IPv4 responses or traffic.</t>
  
  <t>This document therefore defines a mechanism that a router administrator can
  use to inform hosts that this is an IPv6-Only link on their default
  routers such that they can disable IPv4 on this link, mitigating all of the
  above problems.</t>

  <t>IPv4-only hosts, and dual-stack hosts that do not recognize the new
  flag, may continue to attempt IPv4 operations, in particular IPv4
  discovery protocols typically sent as link-layer broadcasts. This
  legacy traffic cannot be prevented by any IPv6 mechanism. The value of
  the new flag is limited to hosts that recognize it.</t>
  
  <t>A possible subsidiary use of the IPv6-Only flag is using it to trigger
  IPv6-Only testing and validation on a link.</t>

  <t>This document specifies a new flag for Router Advertisement Flag
  <xref target="RFC5175"/>.  It updates <xref target="RFC5175"/> to add
  this flag.
  </t>

</section>

<section title="Requirements Language">

  <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14
   <xref target="RFC2119"/>
   <xref target="RFC8174"/>
   when, and only when, they appear in all
   capitals, as shown here.</t>

</section>

<section title="Applicability Statements">
 

  <t>This OPTIONAL mechanism is designed to allow administrators to notify hosts
  that the link is IPv6-Only.  It SHOULD be only used in IPv6-Only links (see below
  for definition).
  </t>
  
  <t>Dual stack hosts that have a good reason to use IPv4, for example
  for a specific IPv4 link-local service, can attempt to do so.  Therefore
  respect of the IPv6-Only flag is recommended, not mandatory, for hosts.
  </t>

  <t>Administrators SHOULD only use this mechanism if they are certain
   that the link is IPv6-Only.  For example, in cases where there is a
   need to continue to use IPv4, when there are intended to be
   IPv4-only hosts or IPv4 routers on the link, setting this flag to
   1 is a configuration error.</t>
  
 
  <t>This mechanism is intended to be compatible with link-layer solutions that
  filter out IPv4 traffic.</t>

</section>


<section title="IPv6-Only Definition" anchor="IPv6-Only">


  <t>
    IPv6-Only is defined to mean that no other versions of internet
    protocol than IPv6 are intentionally running directly on the link.  Today this effectively
    simply means that IPv4 is not running on the link, and it includes:
  </t>

  <?rfc subcompact="yes" ?>

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

  <t>No IPv4 traffic on the Link</t>
  <t>No IPv4 routers on the Link</t>
  <t>No DHCPv4 servers on the Link</t>
  <t>No IPv4 accessible services on the Link</t>
  <t>All IPv4 and ARP traffic may be blocked at Layer 2 by the administrator</t>

  </list></t>
  </list></t>

  <?rfc subcompact="no" ?>

<t>It is expected that on IPv6-Only networks it will be common for access to IPv4 external
services to be reached by techniques such as
NAT64 <xref target="RFC6146"/>
and DNS64 <xref target="RFC6147"/>
at the edge of the network.  This
is beyond the scope of this document.</t>

<t>Note that IPv6-Only provides no information about other network protocols	
than IP running directly over the link layer.  It is out of scope of this specification
whether any such protocol is running on the link or whether any protocol is
tunneled over IPv6.</t>

</section>


<section title="IPv6-Only Flag" anchor="IPv6">

<t>RFC5175 currently defines the flags in the NDP Router Advertisement
message and these flags are registered in the IANA IPv6 ND Router
Advertisement flags Registry <xref target="IANA-RF"/>.  This currently
contains the following one-bit flags defined in published RFCs:</t>

<figure><artwork align="left"><![CDATA[
    0 1 2 3 4 5 6 7
   +-+-+-+-+-+-+-+-+
   |M|O|H|Prf|P|R|R|
   +-+-+-+-+-+-+-+-+
]]></artwork></figure>

   <?rfc subcompact="yes" ?>
  <t><list>
  <t><list hangIndent="5" style="hanging">
   <t hangText="M ">Managed Address Configuration Flag <xref target="RFC4861"/></t>
   <t hangText="O ">Other Configuration Flag <xref target="RFC4861"/></t>
   <t hangText="H ">Mobile IPv6 Home Agent Flag [RFC3775]</t>
   <t hangText="Prf">Router Selection Preferences [RFC4191]</t>
   <t hangText="P ">Neighbor Discovery Proxy Flag [RFC4389]</t>
   <t hangText="R ">Reserved</t>
  </list></t>
  </list></t>
  <?rfc subcompact="no" ?>
  
 <t>This document defines bit 6 to be the IPv6-Only Flag:</t>

  <?rfc subcompact="yes" ?>
  <t><list>
   <t><list hangIndent="5" style="hanging">
   <t hangText="6 ">IPv6-Only Flag</t>
  </list></t>
  </list></t>
  <?rfc subcompact="no" ?>

  <t>This flag has two values.  These are:</t>

<?rfc subcompact="yes" ?>
<t><list>
   <t><list hangIndent="5" style="hanging">
   <t hangText="0 ">This is not an IPv6-Only link</t>
   <t hangText="1 ">This is an IPv6-Only link</t>
  </list></t>
</list></t>
  <?rfc subcompact="no" ?>

<t>RFC 5175 requires that unused flag bits be set to
zero. Therefore, a router that does not support the new flag will not
appear to assert that this is an IPv6-Only link.</t>
  
<t>Hosts receiving the Router Advertisement SHOULD only process this flag
if the advertising router is a Default Router.  Specifically, if the
Lifetime field in the Router Advertisement is not zero, otherwise it
SHOUD be ignored.  This is done to allow some IPv6 routers to advertise
information without being a Default Router and providing IPv6
connectivity.</t>

<t>Note that although this mechanism uses one of only two reserved flag
bits in the RA, an extension mechanism is defined in Section 4 of
<xref target="RFC5175"/> in case additional flags are ever required for
future extensions.</t>


</section>

<section anchor="ops" title="Router and Operational Considerations">

<t>Default IPv6 routers that are on an IPv6-Only link SHOULD be
configured to set the IPv6-Only flag to 1 on interfaces on this link.  In
all other cases the flag SHOULD NOT be set to 1.
</t>

<t>The intent is that the administrator of the router configures the
router to set the IPv6-Only flag if she/he wants to tell the hosts on the
link that the link is IPv6-Only.  This is a configuration flag, it is not
something that the router decides on it's own.
Routers MAY log a configuration error if the flag is set and IPv4 is
still active on the routers interface to the link.
</t>

<t>Operators of large IPv6-only wireless links are advised to also use
Layer 2 techniques to drop IPv4 and ARP packets (Ethertypes 0x0800 and
0x806) at all switches, and to ensure that IPv4
and ARP features are disabled in all switches.</t>
</section>

<section anchor="hosts" title="Host Behavior Considerations">

<!--
<t>As noted above, the IPv4 Unavailable flag is advisory. Hosts may vary in
their treatment of it.</t>
-->


<t>If there are multiple IPv6 default routers on a link, they might
send different values of the flag. If at least one IPv6 default router
sends the flag with value 0, a dual stack host SHOULD NOT assume that the
link is IPv6-Only.  

<!-- 
If all IPv6 default routers send the flag with value 1,
a dual stack host may assume that IPv4 is not available.
-->

If all IPv6 default routers send the flag with value 1, a dual stack
host SHOULD assume that this is an IPv6-Only link.
</t>


<t>A host that receives only RAs with the
flag set to 1 SHOULD NOT attempt any IPv4 operations, unless it subsequently
receives at least one RA with the flag set to zero. As soon as such an RA
is received, IPv4 operations SHOULD be started.</t>


<t>A host MAY choose to delay all IPv4 operations at start-up until a
reasonable time has elapsed for RA messages to arrive.  If all RAs
received have the flag set, a host SHOULD also choose to not attempt IPv4
operations until an application asks it to, specifically delay
performing DHCPV4 until it gets a request from an application to use
IPv4.  This would avoid attempting to obtain IPv4 addresses if there are
no applications trying to use IPv4.
</t>

<t>In all of the above, the flag's value is considered valid for the lifetime of the
default router concerned, unless a subsequent RA delivers a different flag value.
If a default router expires (i.e., no RA is received that refreshes its lifetime),
the host must remove this router's flag value from consideration. If the result
is that all surviving default routers have the flag set to 1, the host
SHOULD assume that the link is IPv6-Only. In other words, at any given time, the state
of the flag as seen by the host is the logical AND of the flags sent by all
unexpired default IPv6 routers.</t>

<t>This also means that if all default routers have set the flag, the
flag for the host is thereby set.  If the lifetimes of all the routers
subsequently expire, then the state of the flag for the host becomes
cleared.</t>

</section>

<section anchor="IANA" title="IANA Considerations">

<t>IANA is requested to assign the new Router Advertisement flag defined
in <xref target="IPv6"/> of this document.  Bit 6 is the next available
bit in this registry, IANA is requested to use this bit unless there is a
reason to use another bit in this registry.
</t>

<t>IANA is also requested to register this new flag bit in the IANA IPv6 ND Router
Advertisement flags Registry <xref target="IANA-RF"/>.</t>

</section>


<section title="Security Considerations" anchor="Security">

  <t>
  This document shares the security issues with other parts of IPv6
  Neighbor Discovery.  <xref target="RFC6104"/> discusses certain attacks
  and mitigations. General techniques to protect Router Advertisement
  traffic such as Router Guard <xref target="RFC6105"/> are useful in
  protecting against these vulnerabilities.</t>

  <t>A bad actor could use this mechanism to attempt turn off IPv4 service on a
  link that is intentionally using IPv4,  by sending Router Advertisements
  with the IPv6-Only Flag set to 1.  In that case, as long as there are
  one or more routers
  sending Router Advertisements with this Flag set to 0, they would override
  this attack given the mechanism in <xref target="IPv6"/>.  Specifically a host
  would only turn off IPv4 service if it wasn't hearing any Router
  Advertisement with the Flag set to 0. If the advice in <xref target="ops"/> is
  followed, this attack will fail. In a situation where the bad actor has control
  of all routers on the link and sends Router Advertisements
  with the IPv6-Only Flag set to 1 from all of them, the attack will succeed,
  but so will many other forms of router-based attack.
  </t>
  
  <t>Conversely, a bad actor could use this mechanism to turn on, or
  pretend to turn on, IPv4 service on an IPv6-only link, by sending
  Router Advertisements with the Flag set to 0. However, this is really
  no different than what such a bad actor can do anyway, if they have the
  ability to configure a bogus router in the first place. The advice in
  <xref target="ops"/> will minimize such an attack by limiting it to a
  single link.</t>
  
  <t>Note that manipulating the Router Preference <xref target="RFC4191"/> will not affect either of these attacks: any
  IPv6-Only Flag of 0 will always override all Flags set to 1.</t>
  
  <t>The new flag is neutral from an IPv6 privacy viewpoint, since it does not affect
  IPv6 operations in any way. From an IPv4 privacy viewpoint, it has the potential
  benefit of suppressing unnecessary traffic that might reveal the existence of
  a host and the correlation between its hardware and IPv4 addresses.  It
  should be noted that hosts that don't support this flag are not
  protected from IPv4-based attacks.
  </t>

</section>


<section title="Acknowledgments" anchor="Ack">

    <t>A closely related proposal was published earlier as <xref target="I-D.ietf-sunset4-noipv4"/>.</t>

    <t>Helpful comments were received from
    Lorenzo Colitti,
    David Farmer,
    Fernando Gont,
    Nick Hilliard,
    Erik Kline,
    Jen Linkova,
    Veronika McKillop,
    George Michaelson,
    Michael Richardson,
    Mark Smith,
    Barbara Stark,
    Tatuya Jinmei,
    Ole Troan,
    James Woodyatt,
    and other members of the 6MAN working group.</t>

    <t>Bjoern Zeeb has also produced a variant of this proposal and
    proposed an IPv6 transition plan in <xref target="I-D.bz-v4goawayflag"/>.
    </t>
   
</section>

<section anchor="changes" title="Change log [RFC Editor: Please remove]">
  
  <t><list>
  
  
  <t>draft-ietf-6man-ipv6only-flag-03, 2018-October-16:</t>

  <?rfc subcompact="yes" ?>

      <t><list style="symbols">

      <t>Reorganized text about problem statement and applicability</t>
      
      <t>Added note about shortage of flag bits</t>

      <t>Clarified text about logging configuration error in <xref target="ops"/></t>

      <t>Editorial changes.</t>

      </list></t>

  <?rfc subcompact="no" ?>


  <t>draft-ietf-6man-ipv6only-flag-02, 2018-August-14:</t>

  <?rfc subcompact="yes" ?>

      <t><list style="symbols">

      <t>Added text to <xref target="Security"/> to clarify that hosts
      not supporting this flag are not protected from IPv4-based attacks.</t>

      <t>Editorial changes.</t>

      </list></t>

  <?rfc subcompact="no" ?>

    <t>draft-ietf-6man-ipv6only-flag-01, 2018-June-29:</t>

  <?rfc subcompact="yes" ?>

      <t><list style="symbols">
      <t>Added text to section that defines what IPv6-Only includes to
      clarify that only other version of the Internet protocol are in scope.</t>

      <t>Added clarification if the lifetime of all routers expire.</t>

      <t>Editorial changes.</t>

      </list></t>

  <?rfc subcompact="no" ?>

  <t>draft-ietf-6man-ipv6only-flag-00, 2018-May-21:</t>

  <?rfc subcompact="yes" ?>

      <t><list style="symbols">

      <t>Changed the file name to
      draft-ietf-6man-ipv6only-flag to match the current tile and that it
      is a w.g. draft.</t>
      <t>Added new section that defines what IPv6-Only includes.</t>
      <t>Expanded description of using Layer 2 filter to block IPv4 and ARP
      traffic.</t>
      <t>Editorial changes.</t>

      </list></t>

  <?rfc subcompact="no" ?>

      <t>draft-hinden-ipv4flag-04, 2018-April-16:</t>

  <?rfc subcompact="yes" ?>

      <t><list style="symbols">

      <t>Changed the name of the document and flag to be the IPv6-Only flag.</t>

      <t>Rewrote text to make it affirmative that this is used by an
      administrator to tell the hosts that the link is IPv6-Only.</t>

      <t>Added an Applicability Statements section to scope the intend use.</t>

      <t>Changed requirement language to upper case, added Requirements
      Language section with references to [RFC2119] and [RFC8174].</t>

      <t>Editorial changes.</t>

      </list></t>

  <?rfc subcompact="no" ?>


      <t>draft-hinden-ipv4flag-03, 2018-Feb-15:</t>

  <?rfc subcompact="yes" ?>

      <t><list style="symbols">

      <t>Changed terminology to use "link" instead of "network".</t>

      <t>Improved text in Section 4. "Host Behavior Considerations" and added
      suggestion to only perform IPv4 if an application requests it.</t>

      <t>Added clarification that the bit is set because an administrator
      configured the router to send it.</t>

      <t>Editorial changes.</t>

      </list></t>
  <?rfc subcompact="no" ?>

      <t>draft-hinden-ipv4flag-02, 2018-Feb-15:</t>

  <?rfc subcompact="yes" ?>

      <t><list style="symbols">

      <t>Improved text in introduction.</t>

      <t>Added reference to current IANA registry in Section 2.</t>

      <t>Editorial changes.</t>

      </list></t>
  <?rfc subcompact="no" ?>


      <t>draft-hinden-ipv4flag-01, 2017-Dec-12</t>

  <?rfc subcompact="yes" ?>

      <t><list style="symbols">

      <t>Inverted name of flag from "Available" to "Unavailable".</t>

      <t>Added problem description and clarified scope.</t>

      <t>Added router and operational considerations.</t>

      <t>Added host behavior considerations.</t>

      <t>Extended security considerations.</t>

      <t>Added Acknowledgment section, including reference
      to prior sunset4 draft.</t>
      
      </list></t>
  <?rfc subcompact="no" ?>



      <t>draft-hinden-ipv4flag-00, 2017-Nov-17:</t>


  <?rfc subcompact="yes" ?>

      <t><list style="symbols">

      <t>Original version.</t>

      </list></t>

      </list></t>

  <?rfc subcompact="no" ?>
      
 </section>

</middle>

<back>

  <references title="Normative References">
    <?rfc include="reference.RFC.4861" ?>
    <?rfc include="reference.RFC.5175" ?>
    <?rfc include="reference.RFC.4191" ?>

    <?rfc include="reference.RFC.2119" ?>
    <?rfc include="reference.RFC.8174" ?>


  <reference anchor="IANA-RF" target="https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml#icmpv6-parameters-11">
     <front>
     <title>IPv6 ND Router Advertisement flags</title>
     <author/>
     <date/>
    </front>
  </reference>

  <reference anchor="IANA-Ethertype" target="https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml#ieee-802-numbers-1">
     <front>
     <title>Ether Types</title>
     <author/>
     <date/>
    </front>
  </reference>


  </references>

  <references title="Informative References">

    <?rfc include="reference.RFC.6105" ?>
    <?rfc include="reference.RFC.2563" ?>
    <?rfc include="reference.RFC.7772" ?>
    <?rfc include="reference.RFC.6104" ?>
    <?rfc include='reference.I-D.ietf-sunset4-noipv4'?>

    &rfc6146;
    &rfc6147;

    &I-D.bz-v4goawayflag;

  </references>


</back>

</rfc>
