Internet Engineering Task Force SIP WG Internet DraftJ.Rosenberg,J.Weinberger,H.Schulzrinne draft-ietf-sip-nat-01.txt dynamicsoft,ColumbiaJ. Rosenberg dynamicsoft J. Weinberger dynamicsoft H. Schulzrinne Columbia U.November 21, 2001 Expires: Maydraft-ietf-sip-nat-02.txt July 1, 2002SIP ExtensionsExpires: January 2003 An Extension to the Session Initiation Protocol (SIP) forNAT TraversalSymmetric Response Routing STATUS OF THIS MEMO This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. 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". The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt To view the list Internet-Draft Shadow Directories, see http://www.ietf.org/shadow.html. AbstractIn this draft, we discuss how SIP can traverse existing, non-SIP aware NATs. Our approach is to make SIP "NAT friendly" with two minor extensions.Thefirst allows forSession Initiation Protocol (SIP) operates over UDP and TCP. When used with UDP, responses toUDPrequeststo go backare returned to the sourceport ofaddress therequest. The second allows a registrar to userequest came from, but from thesource IP address andportinstead ofwritten into theContact in a REGIS- TER. 1 Introduction The problem of getting applications through NATs has received a lottopmost Via header ofattention [1]. Getting SIP [2] through NATs is particularly trou- blesome. There are several ways to solvetheproblem. One of theserequest. This behavior isto embed an ALG in all NATs. However, this hasnothappened. The top commercial NAT products continue to be SIP-unaware. Even if SIP ALG support were added tomorrow, theredesirable in many cases, most notably, when the client isstill a huge installed based of NATs that do not understand SIP. Asbehind aresult, there is going to beNAT. This extension defines along period of time during which users will be behind NATs that are ignorant of SIP, probably at least two to three years. The SIP com- munity cannot waitnew parameter forubiquituous deployment of SIP aware NATs. Another solution is to ubiquitously deploy IPv6, intheexpectationVia header, called rport, thatthis will eliminate the need for NATs. Whether this expectation is realistic or not is one question, but the timeframes for such deployment are long. Yet another solution is to use midcom [3], withallows auser agent or proxy controlling the firewall. This solution is, architecturally, much better than usage of ALGs, but will take even longerclient toubiquitously deploy. Therefore,request that theapproach taken is to make SIP "NAT Friendly" through some backwards compatible extensions. These extensions generally operate by informing aserverto ignore an IP address present insend theSIP message, and instead useresponse back to the source IP address andport. This follows the recommendations of [4]. Of course, the harder problem isport where thetraversalrequest came from. Table ofthe media streams through NAT. That problem is covered separately.Contents 1 Introduction ........................................ 3 2Reference Architecture Consider the standard SIP "trapezoid" of Figure 1.Terminology ......................................... 3 3 Client Behavior ..................................... 3 4 Server Behavior ..................................... 4 5 Syntax .............................................. 4 6 Example ............................................. 5 7 Security Considerations ............................. 6 8 IANA Considerations ................................. 6 9 Acknowledgements .................................... 6 10 Author's Addresses .................................. 7 11 Normative References ................................ 7 12 Informative References .............................. 7 1 Introduction Theclient UA 1, is behind a NAT, NAT 1. It sends all requestsSession Initiation Protocol (SIP) [1] operates over UDP and TCP. When used with UDP, responses tolocal outbound proxy 1. Thoserequests areforwarded to terminating proxy 2, which then sends themreturned to thecalled party, UA 2, who is also behind a NAT. Getting SIP through in this configuration involves two parts. The first is gettingsource address the request came from, but fromUA 1 to Proxy 1, and the response back. The second is getting the INVITE from Proxy 2 to UA 2, and the response back. The solution for the first problem is "Via Received Ports". This solution followstheusage of the received parameter inport written into the topmost Via header(which handles IP addresses), but for ports. The solu- tion forof thesecond problemrequest. This behavior is not desirable in many cases, most notably, when thenew Translate header, which allows aclientto tellis behind aregistrar to ignoreNAT. In that case, theContact header, and instead register an address obtained fromresponse will not properly traverse theIP address and port fromNAT, since it will not match the binding established with theREGISTERrequest.The sections below describe these extensionsRelated to this, there is currently no way inmore detail. 3 Via Ports +-------+ +-------+ | | | | | Proxy |------------- | Proxy | | 1 | | 2 | | | | | / +-------+ +-------+ / \ / \ +------------------+ +------------------------+ .....+------------------+... ..+------------------------+.. . / NAT 1 . . NAT 2 \ . . / . . \ . . / . . \ . . +-------+ . . +-------+ . . | | . . | | . . | | . . | | . . | UA 1 | . . | UA 2 | . . | | . . | | . . +-------+ . . +-------+ . . Domain A . . Domain B . ............................ .............................. Figure 1: Reference Configuration The first problem withSIPtraversal through NATs is sending a request fromfor a clientbehind a NATto learn, from aserver on the outside (UA 1 to proxy 1). SIP specifies that for UDP, theresponseis sentto its request, the source portnumberthat the server saw in theVia header andrequest. Currently, SIP does provide the client with the source IP address that therequest came from. However, due to NAT, the port numberserver saw in theVia header will be wrong.request. Thismeans that the response will not be sent toinformation is conveyed in theproper location. How- ever, with TCP, responses are sent overreceived parameter in theconnectiontopmost Via header of theINVITE arrived on.response. Thismeans that a response sent over the TCP connection will be received properly by a caller behind a NAT. Therefore, one solutioninformation has proved useful fortraversalbasic NAT traversal, debugging purposes, and support ofrequests from inside to outside is to use persistent TCP connections.multi-homed hosts. However,many VoIP endpoints do not sup- port TCP, so a UDP based solution is desirable. Our approachit isto defineincomplete without the port information. This extension defines a new parameter for the Viaheader parameter,header, called rport, that allows a client to request that theresponse port, encoded as "rport". This parameter is inserted by clients (which can be proxies or UACs) when they wish forserver send the responseto be sentback to the source IP address and port where the requestwas sentcame from. The rport parameter isinserted with no valueanalagous toflag this feature. When received at a server which understands this extension,theserver (which can bereceived parameter, except rport contains aproxy or UAS) MUST insert theport number, not therequest was received from as the value ofIP address. 2 Terminology In thisparameter. Ifdocument, theVia maddr parameter is not present, that port MUST be usedkey words "MUST", "MUSTNOT", "REQUIRED", "SHALL", "SHALLNOT", "SHOULD", "SHOULDNOT", "RECOMMENDED", "MAY", and "OPTIONAL" are tosend the response, instead of the portbe interpreted as described inthe sent-by field. If the maddr Via parameter is present, the rport parameter is ignored for sending the response,RFC 2119 [2] and indicate requirement levels for compliant SIP implementations. 3 Client Behavior The client behavior specified here affects theprocedurestransport processing defined in[2] are used. response-port = ``rport'' [``='' 1*DIGIT]Section 18.1 of SIP [1]. A clientinserting thecompliant to this specification (clients include UACs and proxies) MAY include an rportintoparameter in the top Via header of requests it generates. This parameter MUSTwaithave no value; it serves as a flag to indicate to the server that this extension is supported and requested forresponses onthesockettransaction. When the client sends the request, if the request is senton, andusing UDP, the client MUSTalso list, inbe prepared to receive thesent-by field,response on thelocal port of thatsame socket the request was sentfrom. The latter is mandatory for backwards compatibility. Consider an example. A client sends an INVITE which looks like: INVITE sip:user@domain SIP/2.0 Via: SIP/2.0/UDP 10.1.1.1:4540;rport This INVITE is sent with a source port of 4540 and source IP of 10.1.1.1. The request is natted, so thaton. Specifically, it MUST be prepared to receive thesourceresponse on the same IPappears as 68.44.20.1address andthe sourceportas 9988. This is received at a proxy. The proxy forwards the request, but not before appending a value to the rport parameterpresent in theproxied request: INVITE sip:user@domain2 SIP/2.0 Via: SIP/2.0/UDP proxy.domain.com Via: SIP/2.0/UDP 10.1.1.1:4540;received=68.44.20.1;rport=9988 This request generates a response, which arrives at the proxy: SIP/2.0 200 OK Via: SIP/2.0/UDP proxy.domain.com Via: SIP/2.0/UDP 10.1.1.1:4540;received=68.44.20.1;rport=9988 The proxy strips its top Via, and then examines the next one. It con- tains both a received param, and an rport. The result is that the follow response is sent tosource IP address68.44.20.1,and source port9988: SIP/2.0 200 OK Via: SIP/2.0/UDP 10.1.1.1:4540;received=68.44.20.1;rport=9988 The NAT rewrites the destination addressofthis packet back to IP 10.1.1.1, port 4540, and is received by the client. This works fine whentheserver supports this extension, so long as there are no nats betweenrequest. For backwards compatibility, the clientand server. Consider a server that does not understand it. In this case, it will ignore the rport parameter, and send the following responseMUST still be prepared toIP 10.1.1.1, port 4540: SIP/2.0 200 OK Via: SIP/2.0/UDP 10.1.1.1:4540;rport As specified by SIP, thisreceive a responseis sent to the source IP of the request, andon the port indicated in theVia header. Since the client is listen- ing on 4540,sent-by field of theresponse is received correctly.topmost Via, as specified in Section 18.1.1 of SIP [1]. In the case wherethe server does not support the extension, butthere is anatNAT between the client andtheserver,the response is sent to the source IP and port in the Via, which will be dropped by the nat. This is the same behavior exhibited by SIP today. As a result, our extension is backwards compatible,inthe sense that it always works at least as well as baseline SIP. When both sides support it, and there is a nat in the middle, traversal works correctly. Fororder for the response to always be received, the NAT binding must remain in existence for the duration of the transaction. Most UDP NATbind- ingsbindings appear to have a timeout of about one minute. Therefore, non-INVITE transactions will have no problem. For INVITE transactions, the client may need to retransmit its INVITE every 20 seconds or so, even after receiving a provisional response, in order to keep the binding open to receive the final response.Because of the increased network traffic generated to keep the UDP bindings active, it is RECOMMENDED that TCP be used instead, as it generates much less data. 4 Contact Translation The received port parameter will allow requests initiated from inside the NAT (and their responses), to work. However, getting requests from a proxy outside the NAT, to a host inside,OPEN ISSUE: This is awful. Perhaps adifferent story. The problem has to do with registrations. In Figure 1, the callee, UA 2, will receive requests atfurther sign thatUA because it had previously sent a REGISTER request totheregistrar, whichonly real answer isco-located with proxy 2. This registration contains a Contact header which lists the address where the incoming requests should be sent to. However, in the case of NAT,TCP? Or, perhaps thisaddress will be wrong. It will contain a domain name or IP address that is within the private space of domain B. Thus, the REGISTER might look like: REGISTER sip:B.com SIP/2.0 From: sip:ua2B.com To: sip:ua2B.com Contact: sip:ua2@10.0.1.100 This address isbelongs in sipping-nat-scenarios, notreachable byhere. 4 Server Behavior The server behavior specified here affects theproxy. To solve this problem, we need two things. First, we need a per- sistent "connection" to be established from UA 2 to proxy 2. Secondly, we needtransport processing defined in Section 18.2 of SIP [1]. When away for incoming requests destined for UA 2server compliant tobe routed over this connection. To addressthisfirst problem, clients have to send REGISTER requests overspecification (which can be aTCP or TLS connection,proxy oruse UDP along with the response port parameter inUAS) receives a request, it examines the topmost Via header. IfTCP is used,thisconnection is kept open indefinitely. We further recommend thatVia header contains an rport parameter with no value, it MUST insert theproxy/registrar hold this connection in a table, whereport thetable is indexed byrequest was received from as theremote sidevalue ofthe transport connection. For UDP, the client holds on to the socket, and uses it for REGISTER refreshes and to receive incoming calls. The server also holds onthis parameter. This is analagous to the"connection". In the case of UDP, that means thatway in which a serverstores the local IP/port thatwill insert therequest was received on, and indexes it byreceieved parameter with the source IPand portaddress the request wassentreceived from.WhenIn fact, theproxy wishes to send a packet to someserveratMUST insert a received parameter containing the source IP addressM, port N, transport O, it looks up the tuple (M,N,O) inthat thetable to seerequest came from, even ifa connection already exists, and then uses it. The NAT bindings are kept fresh through REGISTER refreshes (see Sec- tion 4.1). Now, a connection is available for contacting the user. However, this connection must be associated with sip:ua2@B.com. Unfortunately,it isnot. Calls for sip:ua2@B.com are translated to sip:ua2@10.0.1.100, which does not correspondidentical to theremote side connection used to send the REGISTER, as seen by the proxy. Thats becausevalue ofNAT, which will maketheremote side appear to be a publically routable address. To handlesent-by field. Note that thisproblem, the proxy could, in principal, record the IP address and port from the remote sideprocessing takes place independent of theconnection usedtransport protocol. When a server attempts to send aREGISTER. Then, it can create a Contact entry of the form sip:bob@[ip-addr]:[port], where [ip-addr] and [port] are the IP addressresponse over an unreliable unicast transport, such as UDP, andport of the remote side of the connection. However, this is assuming that the registration is for the purposes of connecting the address in the To field with the machine the connection is coming from. That may not be the intent of the registration. The registra- tion may be used to set up a call forwarding service, for example. As a result, itthere isour proposal that clients be allowed to explicitly ask a proxy to create a Contact entry corresponding to the machine a REGISTERno Via maddr parameter present, but there issent from. To do that, the UA insertsboth aTranslate header into the request. This header containsreceived parameter and an rport parameter, theURL (whichresponse MUST beone of the Contact URLs) that issent tobe translated, along with a parameter that indicates the type of NAT the client is behind. translate-header = ``Translate'' ``:'' ``<'' addr-spec ``>'' [``;'' ``nat'' ``='' nat-types] nat-types = ``sym'' | ``cone'' If a registrar receives a REGISTER request with a translate header, it MUST find the matching Contact header (using standard URL matching rules [2]) in the REGISTER request, and MUST replace the host value withthe IP address listed in the receivedparameter of the bottom-most Via, if present, else the host fromparameter, and theVia sent-by field. Theportof the Contact MUST be replaced within the rportparameter from the bottom- most Via, if present, else the value from the sent-by field, if present, else 5060.parameter. Thisis the actual Contact stored in the regis- tration database,effectively adds a new processing step between bullets two andreturned to the clientthree inthe response. Using the bottom-most Via to obtain the source IP and source portSection 18.2.2 ofthe client allowsSIP [1]. 5 Syntax The syntax for thecase where the registrar and the outbound proxy are not co-located. If no matching Contact was found in the REGISTER, the Translate header is ignored. The nat-type parameter is an optionalrport parameterthat tells the regis- trar what type of NAT the client is behind.is: response-port = "rport" [EQUAL 1*DIGIT] Thisinformation is very helpful for some faul tolerance and scalability scenarios, described below. The means by whichextends theclient can determine which type of nat it is behind are outside the scopeexisting definition ofthis specification. Any 2xx response to a request that contained a Translate header, and resulted in a translation (because there was a matching Contact), MUST include a Translate header in the response. This header MUST contain the translated URL. Of course, the same URL will also appear amongst the Contacts inthe2xx. The TranslateVia headerin the 2xx is neededparameters, so thata UAC can determine the value of the translated Con- tact when there are more than one registered contacts.its BNF now looks like: via-params = via-ttl / via-maddr / via-received / via-branch / response-port / via-extension 6 Example Consideronce more the architecture of Figure 1. The callee hasanIP address of 10.0.1.100. Itexample. A client sends an INVITE which looks like: INVITE sip:user@domain SIP/2.0 Via: SIP/2.0/UDP 10.1.1.1:4540;rport This INVITE is sent with aREGISTER from port 2234 tosource port5060 on the proxy. This connection goes through the NAT,of 4540 andthesource IP address of 10.1.1.1. The request isrewritten to 77.2.3.88,natted, so that the source IP appears as 68.44.20.1 and the source portto 2937. The registration looks like: REGISTER sip:ua2@Y.com SIP/2.0 From: sip:ua2@Y.com To: sip:ua2@Y.com Via: SIP/2.0/UDP 10.0.1.100;rport Translate: sip:ua2@10.0.1.100:2234 Contact: sip:ua2@10.0.1.100:2234as 9988. This is received at a proxy. The proxyY then stores the socketforwards therequest was received on intorequest, but not before appending atable, indexed by the source port: (77.2.3.88,2397,UDP) -> [referencevalue toUDP socket] It fills inthe rportparameter, and adds the received parameter, to the top Via. It also translates the Contact header to sip:ua2@77.2.3.88:2397, and stores thatparameter in theregistration database. It then responds to the REGISTER:proxied request: INVITE sip:user@domain2 SIP/2.0200 OK From: sip:ua2@Y.com To: sip:ua2@Y.comVia: SIP/2.0/UDP10.0.1.100;rport=2397;received=77.2.3.88 Translate: sip:ua2@77.2.3.88:2397 Contact: sip:ua2@77.2.3.88:2397proxy.domain.com Via: SIP/2.0/UDP 10.1.1.1:4540;received=68.44.20.1;rport=9988 Thisresponse is sent to 77.2.3.88:2397 because of the rport. The NAT translates this to 10.0.1.00:2234,request generates a response, whichis then received by the client. Now, when an INVITEarrivesfor sip:ua2@Y.com, it is looked up inat theregistration database.proxy: SIP/2.0 200 OK Via: SIP/2.0/UDP proxy.domain.com Via: SIP/2.0/UDP 10.1.1.1:4540;received=68.44.20.1;rport=9988 Thecontact is extracted, and theproxytries to send the request to that address. To do so, it checksstrips itsconnec- tion table to an open connection to the IP address, porttop Via, andtran- sport wherethen examines therequest is destined. In this case, suchnext one. It contains both aconnection is available,received param, andthe request is forwarded over it. Because it is over a connection withanexisting NAT binding, it is properly routed through the NAT.rport. Theresponse from the callee is also routed over the same connection. If the UA is behind a symmetric NAT, the proxy that the user is con- nected to needs to record route incoming and outgoing INVITE requests. 4.1 Refresh Interval Since the connection used for the registrationsresult isheld persistently in order to receive incoming calls, the NAT binding must be main- tained. To avoid timeout, data must traverse the NAT overthatcon- nection with some minimum period. When UDP is used, registrations will need to be refreshed at least once every minute. The clients SHOULD include an Expires header or parameter with this value. For TCP, a longer interval can be used. 10 minutes is RECOMMENDED. To test whether the interval is short enough, proxy servers MAY attempt to send OPTIONS requests to the client shortly before the registration expires. IftheOPTIONS requests generates nofollowing responseat all, the server SHOULD lower the value of the Expires header in the next registration. Servers SHOULD cache and reuse the largest successful refresh interval that they discover for a given Contact value. 4.2 Routing to the Ingress Proxy A complication arises when a domain supports multiple proxy servers. Consider the scenario shown in Figure 2 A user joe in domain.com is behind a NAT. In DNS, domain.com contains an SRV entry that points to three servers, 1.domain.com, 2.domain.com and 3.domain.com. When the user registers, they will resolve domain.com to one of these. Assume its 1.domain.com. As a result of this, the connection state is stored proxy 1. In the case of TCP, this connection state is important. Unless calls for joe@domain.com arrive to proxy 1, they won't be routable to the UA. In the case of UDP, whether it is important or not depends on the type of NAT the userisbehind. One type of NAT, which we call "sym- metric", treats UDP much like TCP. When A sends a request from inside to B on the outside, UDP messages backsent toA must come from B, with a sourceIP address 68.44.20.1, portequal to9988: SIP/2.0 200 OK Via: SIP/2.0/UDP 10.1.1.1:4540;received=68.44.20.1;rport=9988 The NAT rewrites the destinationportaddress ofmessages from A to B. In the other case, which we call "cone", which is described in [5], UDP messagesthis packet back toA can have any sourceIP 10.1.1.1, port 4540, andIP address. If the userisbehind a NAT that operates in cone mode, any of the proxies in the proxy farm will be able to reach the customer through the NAT. All will send requests to the public IP address and port binding createdreceived by theNAT, but with different source IP addresses and ports.client. 7 Security Considerations Sincesource addressing doesn't matter, things work well. Inthiscase, the proxy need not even store connection state as described in Section 4. If the user is behind a NAT that operates in symmetric mode, calls to the user must come in through the proxy that the user registered to. In orderextension merely adds source port information toenable this, we recommend that the location server data- base store not only the contact, but the proxy that the user con- nected to. When a call comes in for that user,theproxy receiving the INVITE looks up the usersource address information already present inthe database. The database entry indicates the proxy the user is connected to (call this the connected proxy). If the connected proxy is not the proxy which received the INVITE, the proxy that received the INVITE uses a route header to force the call through the connected proxy. In the case where joe registered at proxy1, and the incoming INVITE arrived at proxy 2, the request sent by proxy 2 would look like: INVITE sip:proxy1.domain.com SIP/2.0 -- // \\ / \ | DB | | | \ / \\ // -- +-----+ +-----+ +-----+ | | | | | | domain.com |Proxy| |Proxy| |Proxy| | 1 | | 2 | | 3 | +-----+ +-----+ +-----+ +-------------------------+ | NAT | +-------------------------+ +-----+ | | |UA | | | +-----+ Figure 2: Multiple Proxy Configuration Route: sip:joe@22.1.20.3:3038 This request will first go to proxy1, and from there, over the exist- ing connection to joe. An alternate approach, instead of Route headers, is to simply have the proxy which received the request forward it to the one that the user registered with, without modifying the request URI. This will cause the receiving proxy to perform the location server lookup a second time, which is inefficient. However,SIP, it does notrely on the usage of pre-loaded routes. The differing proxy behaviors for symmetric and cone NATs explains the presence of the nat-type attribute in the Translate header. Assuming the client can determine which type it is behind it can sim- ply inform the proxy, allowing it to take the proper action. 4.3 INVITE Usage The 200 OK response to the REGISTER request contains the SIP URL that the registrar placed into the database. This address has the impor- tant property that it is routable to the client from the proxy on the public side of the NAT. As a result, the client needs to place this URL as the Contact header in its INVITE requests and 2xx responsesappear toINVITE, so that it can be reached from the proxy on the outside. 5 Securityadd any additional security considerations. 8 IANA ConsiderationsArguably, the usage of receive ports and the Translate header improve security. In normal SIP usage, a rogue UA or proxy can send registra- tions that contain Contacts that point to a different phone. Or, they can send an INVITEThere are no IANA Considerations associated witha Via header that contains the echo port, or some other port, on the machine. These can be used to launch attacks. The receive port and Translate header insure that only the entity that sent the requet, is the one to receive further messages. 6this specification. 9 Acknowledgements The authors would like to thank Rohan Mahy for his comments andcon- tributionscontributions to this work.7 Changes since draft-ietf-sip-nat-00 o Described resolution of conflict between rport and maddr parameter. o Specified that the registrar use the bottom-most Via rport and received parameter to obtain the source IP and port. o Specified that the Translate header needs to appear in 2xx REGISTER responses. 8 Changes since draft-rosenberg-sip-entfw-02 o Split entfw into three. This is piece 1, which covers the pure SIP extensions. o Changed syntax of Translate header. Allow any URL type, and require usage of angle brackets to distinguish URL from header parameters. o Clarified that record-routing of INVITE at the proxy is not needed if UDP is used and the client is behind a full cone NAT.Full Copyright Statement Copyright (c) The Internet Society(2001).(2002). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, thisdocu- mentdocument itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose ofdevelop- ingdeveloping Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OFMER- CHANTABILITYMERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.910 Author's Addresses Jonathan Rosenberg dynamicsoft 72 Eagle Rock Avenue First Floor East Hanover, NJ 07936 email: jdrosen@dynamicsoft.com Joel Weinberger dynamicsoft 72 Eagle Rock Avenue First Floor East Hanover, NJ 07936 email: jweinberger@dynamicsoft.com Henning Schulzrinne Columbia University M/S 0401 1214 Amsterdam Ave. New York, NY 10027-7003 email: schulzrinne@cs.columbia.edu10 Bibliography11 Normative References [1]M. Holdrege and P. Srisuresh, "Protocol complications with the IP network address translator (NAT)," Internet Draft, Internet Engineer- ing Task Force, Oct. 2000. Work in progress. [2] M. Handley, H. Schulzrinne, E. Schooler, andJ. Rosenberg, H. Schulzrinne, et al. , "SIP:sessionSession initiation protocol,"Request for Comments 2543, Internet Engineering Task Force, Mar. 1999. [3] P. Srisuresh, J. Kuthan, J. Rosenberg, A. Molitor, and A. Rayhan, "Middlebox communication architecture and framework,"Internet Draft, Internet Engineering Task Force,Oct. 2001.Feb. 2002. Work in progress.[4] D. Senie, "NAT friendly application design guidelines," Internet Draft,[2] S. Bradner, "Key words for use in RFCs to indicate requirement levels," RFC 2119, Internet Engineering Task Force, Mar.2001. Work1997. 12 Informative References Full Copyright Statement Copyright (c) The Internet Society (2002). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist inprogress. [5] J. Rosenberg, R. Mahy,its implementation may be prepared, copied, published andC. Huitema, "Traversal using nat relay (turn),"distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the InternetDraft,Society or other InternetEngineering Task Force, Nov. 2001. Workorganizations, except as needed for the purpose of developing Internet standards inprogress.which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.