Network Working Group                                          Louis Chan
   INTERNET-DRAFT
   Intended status: Standard Track                                Juniper Networks
   Expires: Sep 6, 2023                                           Mar 7, 2023
   
   
   
                     Enhanced Port Forwarding functions with CGNAT
                         draft-chan-tsvwg-eipf-cgnat-02.txt
   
   
   Abstract
   
      There is a need for peer-to-peer (P2P) communication under the use of CGNAT in
      service providers. With the combination of home gateway, this becomes NAT444.
   
      In RFC5128, methods of using UDP hole punching solves the problem partially when
      EIM (Endpoint-Independent Mapping) is supported in NAT device in the path, and
      there exists a common rendezvous server.
   
      The success rate of UDP hole punching is high, but not TCP hole punching in
      practical world. Also, the P2P solution requires a common server in the public
      internet to exchange the IP and port information.
   
      In this draft, a method is described to achieve incoming TCP or UDP session without
      a common rendezvous server in NAT444 situation.
   
   
   
   Status of this Memo
   
      This Internet-Draft is submitted in full conformance with the provisions of BCP 78
      and BCP 79.
   
      Internet-Drafts are working documents of the Internet Engineering Task Force
      (IETF).  Note that other groups may also distribute working documents as Internet-
      Drafts.  The list of current Internet-Drafts is at
      http://datatracker.ietf.org/drafts/current/.
   
      Internet-Drafts are draft documents valid for a maximum of six months and may be
      updated, replaced, or obsoleted by other documents at any time.  It is
      inappropriate to use Internet-Drafts as reference material or to cite them other
      than as "work in progress."
   
      This Internet-Draft will expire on Sep 6, 2023.
   
   Copyright Notice
   
      Copyright (c) 2023 IETF Trust and the persons identified as the document authors.
      All rights reserved.
   
   
   
   
   
   
   Chan                      Expires Sep 6, 2023                    [Page 1]


   Internet-Draft          draft-chan-tsvwg-eipf-cgnat-02              March 2023
   
   
   
      This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating
      to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of
      publication of this document.  Please review these documents carefully, as they
      describe your rights and restrictions with respect to this document.  Code
      Components extracted from this document must include Simplified BSD License text as
      described in Section 4.e of the Trust Legal Provisions and are provided without
      warranty as described in the Simplified BSD License.
   
   
   
   Table of Contents
   
   
      1. Introduction ...................................................... 2
      2. Conventions used in this document ................................. 3
      3. Port acquiring procedure in Application ........................... 3
      4. Endpoint Independent Port Forwarding (EIPF) Enhancement ........... 4
         4.1. When this EIPF feature enabled in CGNAT together with EIM .... 4
         4.2. When this feature is enabled in CGNAT with both EIM and EIF .. 4
      5. Co-existence with established session in CGNAT .................... 5
      6. Requirement on CGNAT and RG ....................................... 6
         6.1. CGNAT requirement ............................................ 6
         6.2. RG requirement ............................................... 6
      7. Other considerations .............................................. 6
      8. Retrieval of IP and port information via HTTP ..................... 6
         8.1. IP and port - URI /ipport/ ................................... 7
         8.2. IP and port range - URI /ipportrange/ ........................ 7
      9. Compatibility ..................................................... 8
      10. Security Considerations .......................................... 8
      11. References ....................................................... 8
         11.1. Normative References ........................................ 8
         11.2. Informative References ...................................... 8
      12. Acknowledgments .................................................. 9
   
   1. Introduction
   
      The purpose of this document is to describe to a way to allow incoming TCP or UDP
      sessions under NAT444 situation.
   
      The success rate of TCP and UDP session would be guaranteed under this proposal.
   
      There would be two sections in the draft.
   
      - The first section describes a procedure for an application in end device to
        detect and allocate TCP or UDP port for its use for incoming session. The
        required tools are STUN [RFC5389] and UPNP [RFC6970].
   
      - The second section describes a method for residential gateway RG to discover the
        usable port range under a CGNAT deployment with port-block-allocation. In turn,
        the home gateway could allocate TCP or UDP to the end devices via UPNP, NAT-PMP
        [RFC6886] or PCP [RFC6887].
   
   Chan                      Expires Sep 6, 2023                    [Page 2]


   Internet-Draft          draft-chan-tsvwg-eipf-cgnat-02              March 2023
   
   
   
   2. Conventions used in this document
   
      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 RFC 2119 [RFC2119].
   
      In this document, these words will appear with that interpretation only when in ALL
      CAPS. Lower case uses of these words are not to be interpreted as carrying
      significance described in RFC 2119.
   
   
   
   3. Port acquiring procedure in Application
   
   
           PC1-----RG-------CGNAT------Internet------PC2
                                          |
                                          +-----STUN server
   
   
      - Private network: PC1: 192.168.1.10, RG: 192.168.1.1
      - WAN: RG: 10.1.1.20, CGNAT: 10.1.1.1
      - CGNAT: public IP 100.1.1.1, PBA (port block allocation for RG) 1024-1055
      - PC2: public IP 201.1.1.10
   
   
   
      Here is an example of step to acquire a TCP or UDP port
   
      -  Application in PC1 sends a STUN request to STUN servers in public internet. The
         STUN server would reply the XOR-mapped-address. E.g.
   
                    100.1.1.1:1024             ;public ip is 100.1.1.1 with port 1024
   
        This detects both public IP address and the UDP port available. This assumes the
        same TCP port is also available since most CGNAT implementations allocate the
        same port number for both TCP and UDP with EIM enabled.
   
        The application will then send UPNP request to residential gateway RG,
        192.168.1.1, for port forward TCP port 1024 to the local device IP,
        192.168.1.10.
   
   
      - CGNAT, due to PBA allocation and allow incoming session enabled, TCP traffic
        sent to 100.1.1.1:1024 as destination would be forwarded to RG 10.1.1.20:1024
        without changing port value, when EIPF function is enabled. Then, RG would pass
        the TCP traffic to PC1 with 192.168.10.1:1024 as destination due to the
        registration of UPNP. In this case, PC2 could initiate a direct TCP session to
        PC1 via 100.1.1.1:1024.
   
   
   
   Chan                      Expires Sep 6, 2023                    [Page 3]


   Internet-Draft          draft-chan-tsvwg-eipf-cgnat-02              March 2023
   
        Please note that in PBA allocation, 100.1.1.1:1024-1055 port range is always
        associated with this RG 10.1.1.20 only. This port range is not shared with other
        RGs or private IP.
   
      - UDP would work in the same way. Any host in the internet could create TCP or UDP
        session directly with the application in PC1
   
      The above procedure assumes both RG and CGNAT have EIM capability enabled.
   
      The application in PC1, optionally, could release the UPNP mapping after finishing
      the session.
   
   
   
   4. Endpoint Independent Port Forwarding (EIPF) Enhancement
   
   4.1. When this EIPF feature enabled in CGNAT together with EIM
   
      - It is possible that the public IP:PORT is already used in
        established outgoing connections. This is possible when port
        resource is re-usable.
      - If there is a packet with destination 100.1.1.1:1024 in inbound direction, CGNAT
        first would check if there is an existing session established. If yes, it should
        follow the session table for translation. This session might be created by other
        outgoing session which could potentially share the same 100.1.1.1:1024 port.
      - if there is no matching session in the CGNAT, it is a new incoming session. Then
        the associated TCP or UDP port is UNCHANGED, and just change the destination IP
        to 10.1.1.20.
      - It is working like port forward function in a NAT44
      - In the example, any IP source address, 202.1.1.1 or 222.1.1.1, sending traffic
        to 100.1.1.1:1024. CGNAT would translate the traffic as 10.1.1.20:1024 as
        destination.
      - UDP hole punching would be compatible if the UDP session is still in RG and
        CGNAT session table. Port 1024 would follow the translation.
   
   4.2. When this feature is enabled in CGNAT with both EIM and EIF
   
      - EIF (Endpoint-Independent Filtering), described in RFC5128, will happen only if
        the external host already has a session through EIM.
      - The TCP or UDP port is kept UNCHANGED for any other external hosts sending
        inbound traffic.
      - For example, there is a session originated from PC1 to PC3, 201.1.1.20
   
            PC1-----------RG----------CGNAT-----------Internet---------PC3
                                                          |
                                                          +---------------------PC4
   
        Src: 192.168.1.10:3333    10.1.1.20:4444           100.1.1.1:1033
   
        Dst: 201.1.1.20:5555      201.1.1.20:5555          201.1.1.20:5555
   
   
   
   
   Chan                      Expires Sep 6, 2023                    [Page 4]


   Internet-Draft          draft-chan-tsvwg-eipf-cgnat-02              March 2023
   
        When PC3 sends traffic with different source port, 201.1.1.20:6666 and
        destination 100.1.1.1:1033, CGNAT should honor the EIF behavior. It would be
        translated back to 10.1.1.20:4444.
   
        When other host without any session established through EIM, and it sends
        traffic with destination port 1033, the port 1033 should not be changed at
        CGNAT.
   
        When PC4 send traffic to 100.1.1.1:1033, the port 1033 is kept UNCHANGED. PC4
        has no previous established sessions with PC1. This follows the EIPF behavior.
   
        This implementation is an optional with EIF enabled.
   
        Another option is to make EIPF and EIF exclusive. EIPF could be just implemented
        with or without EIM enabled.
   
   5. Co-existence with established session in CGNAT
   
      It is allowed that a TCP or UDP port could be shared with outgoing sessions from
      CGNAT perspective. Here is an illustration based on the example in section 3.
   
      Behind RG, there are additional PC1a, 192.168.1.11 and PC1b, 192.168.1.12, and all
      of these can share port 1024 for outgoing at CGNAT. For example,
   
             dest ip:port    src ip:port@PC        src ip:port@RG   src ip:port@CGNAT
       PC1a  2.2.2.2:888     192.168.1.11:1234     10.1.1.20:4444   100.1.1.1:1024
       PC1b  3.3.3.3:999     192.168.1.12:5678     10.1.1.20:5555   100.1.1.1:1024
   
      there are two sessions appeared in internet (src 100.1.1.1:1024, dst 2.2.2.2:888)
      and (src 100.1.1.1:1024, dst 3.3.3.3:999).
   
      In fact, it is possible to have more sessions from PC1a or PC1b sharing port 1024
      as long as destination IP:port is different. It is up to CGNAT implementation.
   
   
   
      Since sessions are created in NAT tables inside RG and CGNAT, these sessions will
      co-exist with any new incoming sessions, providing that no clash of IP and port
      pairs.
   
   
   
      When PC2, initiates a session (src 201.1.1.10:6666, dst 100.1.1.1:1024) toward PC1,
      CGNAT will look up the local NAT session table first. If there is no match, it is a
      new session, and accepted with EIPF behavior.
   
   
   
      RG will do the same. Traffic with destination port 1024 will be forwarded to device
      who make a reservation via UPNP or NAT-PMP.
   
   
   
   Chan                      Expires Sep 6, 2023                    [Page 5]


   Internet-Draft          draft-chan-tsvwg-eipf-cgnat-02              March 2023
   
   6. Requirement on CGNAT and RG
   
   6.1. CGNAT requirement
   
      For CGNAT, the mandatory requirement is that one public IP:port must only associate
      with one private IP. This allows unique translation in the incoming direction. EIM
      or EIF are optional features, and it is discussed in Section 4.
   
      It should be noted that same UDP and TCP port should be assigned to the same
      private IP. Otherwise, the device behind RG is required to perform STUN based on
      TCP, which is less commonly available today.
   
      Port block allocation, in the example, is not mandatory but recommended in fixed
      line use case.
   
   6.2. RG requirement
   
      For RG, it is mandatory to support port forwarding with UPNP. NAT-PMP support is
      optional but recommended.
   
      EIM support is optional. If EIM is support, it would be a fallback means with UDP
      hole punching.
   
   
   
   
   
   7. Other considerations
   
      In this draft, it assumes the port number that STUN procedure detects externally
      via UDP, is also available for TCP. In practical world, this is likely the case.
   
      When the port is successfully allocated from RG, the application should make a
      verification of the incoming connection via other means. If CGNAT supports hair-
      pinning session, it could be verified without external help.
   
      And how the IP and port information is conveyed to third parties is not discussed
      here. It is out the scope of this document.
   
      There is a chance that RG would receive new private IP due to reboot or IP refresh.
      And there is a chance of change in CGNAT translation due to failure recovery. In
      this case, it is the responsibility of application to detect such change. It is
      advised that the application should periodically detect any IP change.
   
   
   
   8. Retrieval of IP and port information via HTTP
   
      The internet service provider host a HTTP web server for the enquiry of IP and port
      information. Two URI's are suggested
   
   
   
   
   Chan                      Expires Sep 6, 2023                    [Page 6]


   Internet-Draft          draft-chan-tsvwg-eipf-cgnat-02              March 2023
   
   8.1. IP and port - URI /ipport/
   
      With the URI /ipport/, the HTTP response is clear text with IP:PORT, where IP is
      the external public IP address and the PORT is external port as seen.
   
      For example, the response is
   
      100.1.1.1:1040
   
      The HTTP response should be human readable with a web browser.
   
      Although TCP port 1040 is seen here, it is assumed that UDP port 1040 is also
      available from CGNAT for incoming mapping.
   
   8.2. IP and port range - URI /ipportrange/
   
      With the URI /ipportrange/, the HTTP response is clear text with
   
      IP:PORT_START:PORT_END<LF>
   
      IP:PORT_START:PORT_END<LF>
   
      IP:PORT_START .. ..
   
      Where <LF> is ASCII character for line feed.
   
      The response is a human readable format in a normal web browser.
   
      For examples, here are valid responses
   
      a) Single line
   
      100.1.1.1:1024:1031
   
      Port range 1024 to 1031 assigned for both TCP and UDP.
   
      b) Two lines
   
      100.1.1.1:1024:1031
   
      100.1.1.1:1064:1071
   
      Port ranges 1024 to 1031 and range 1064 and 1071 are assigned for both TCP and UDP.
   
   
   
      It is possible to have multiple port block allocated to the same private IP address
      from CGNAT perspective.
   
      If the RG device or application could not support multiple entries of IP and port
      range, it should take one of the lines, preferably the first line.
   
   
   
   Chan                      Expires Sep 6, 2023                    [Page 7]


   Internet-Draft          draft-chan-tsvwg-eipf-cgnat-02              March 2023
   
      Human user or RG could use this information to plan for incoming services. For
      example, when PC1 requests a TCP 8888 port forward from RG via UPNP [RFC6970], NAT-
      PMP [RFC6886] or PCP [RFC6887], RG would counter offer another TCP port 1031.
   
   
   
   
   
   9. Compatibility
   
      There would be no obvious compatibility problem with existing implementation
      methods.
   
      There is a possibility when more than 2 level of NAT is used. This is not scoped in
      this document.
   
   
   
   10. Security Considerations
   
      When EIPF is enabled in CGNAT, more incoming traffic would be allowed sending to
      RG.
   
      It would be the RG as the gatekeeper for blocking unwanted sessions. This would be
      the same scenario as public IP is assigned.
   
      For the CGNAT, there would be more session attempt to handle. Incoming session
      limit or attempted session per seconds kind of parameters could be considered as
      security measure. Optionally, it is allowed to open the port only when STUN
      procedure for the port is seen.
   
   
   
   11. References
   
   11.1. Normative References
   
      [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels",
                BCP 14, RFC 2119, March 1997.
   
   11.2. Informative References
      [RFC5128] Srisuresh, P., Ford, B., and D. Kegel, "State of Peer-to-
                Peer (P2P) Communication across Network Address
                Translators (NATs)", March 2008.
   
   
      [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing,
                 "Session Traversal Utilities for NAT (STUN)", October 2008.
   
   
      [RFC6886] S. Cheshire and M. Krochmal. "NAT Port Mapping Protocol (NAT-PMP)",
                April 2013.
   
   Chan                      Expires Sep 6, 2023                    [Page 8]


   Internet-Draft          draft-chan-tsvwg-eipf-cgnat-02              March 2023
   
      [RFC6887] Wing, D., Cheshire, S., Boucadair, M., Penno, R., and P.
                Selkirk, "Port Control Protocol (PCP)", April 2013.
   
   
      [RFC6970] Boucadair, M., Penno, R., and D. Wing, "Universal Plug and
                Play (UPnP) Internet Gateway Device - Port Control
                Protocol Interworking Function (IGD-PCP IWF)", July 2013
   
   
   
   
   
   
   12. Acknowledgments
   
   
           The following people have contributed to this document:
   
   
   
   
   
   
        Author's Address
   
        Louis Chan (editor)
           Juniper Networks
           Suite 3001-7, 30/F, Tower 2
           Time Square, Causeway Bay
           Hong Kong
   
           Phone: +852-38562100
           Email: louisc@juniper.net
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   Chan                      Expires Sep 6, 2023                    [Page 9]