draft-ietf-rtcweb-ip-handling-04.txt | draft-ietf-rtcweb-ip-handling-05.txt | |||
---|---|---|---|---|
Network Working Group J. Uberti | Network Working Group J. Uberti | |||
Internet-Draft G. Shieh | Internet-Draft Google | |||
Intended status: Standards Track Google | Intended status: Standards Track G. Shieh | |||
Expires: January 4, 2018 July 3, 2017 | Expires: August 15, 2018 Facebook | |||
February 11, 2018 | ||||
WebRTC IP Address Handling Requirements | WebRTC IP Address Handling Requirements | |||
draft-ietf-rtcweb-ip-handling-04 | draft-ietf-rtcweb-ip-handling-05 | |||
Abstract | Abstract | |||
This document provides information and requirements for how IP | This document provides information and requirements for how IP | |||
addresses should be handled by WebRTC implementations. | addresses should be handled by WebRTC implementations. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on January 4, 2018. | This Internet-Draft will expire on August 15, 2018. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 2 | 3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 2 | |||
4. Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
5. Detailed Design . . . . . . . . . . . . . . . . . . . . . . . 4 | 5. Detailed Design . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
6. Application Guidance . . . . . . . . . . . . . . . . . . . . 6 | 5.1. Principles . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 6 | 5.2. Modes and Recommendations . . . . . . . . . . . . . . . . 5 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 | 6. Implementation Guidance . . . . . . . . . . . . . . . . . . . 6 | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 7 | 7. Application Guidance . . . . . . . . . . . . . . . . . . . . 7 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 7 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 7 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 7 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 7 | |||
Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 8 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 9 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 7 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 7 | ||||
Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 9 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
1. Introduction | 1. Introduction | |||
One of WebRTC's key features is its support of peer-to-peer | One of WebRTC's key features is its support of peer-to-peer | |||
connections. However, when establishing such a connection, which | connections. However, when establishing such a connection, which | |||
involves connectivity tests using various IP addresses, WebRTC may | involves connection attempts from various IP addresses, WebRTC may | |||
allow a web application to learn additional information about the | allow a web application to learn additional information about the | |||
user compared to an application that only uses the Hypertext Transfer | user compared to an application that only uses the Hypertext Transfer | |||
Protocol (HTTP) [RFC7230]. This may be problematic in certain cases. | Protocol (HTTP) [RFC7230]. This may be problematic in certain cases. | |||
This document summarizes the concerns, and makes recommendations on | This document summarizes the concerns, and makes recommendations on | |||
how WebRTC implementations should best handle the tradeoff between | how WebRTC implementations should best handle the tradeoff between | |||
privacy and media performance. | privacy and media performance. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
3. Problem Statement | 3. Problem Statement | |||
In order to establish a peer-to-peer connection, WebRTC | In order to establish a peer-to-peer connection, WebRTC | |||
implementations use Interactive Connectivity Establishment (ICE) | implementations use Interactive Connectivity Establishment (ICE) | |||
[RFC5245], which gathers and exchanges all the IP addresses it can | [RFC5245], which attempts to discover multiple IP addresses using | |||
discover, using techniques like Session Traversal Utilities for NAT | techniques such as Session Traversal Utilities for NAT (STUN) | |||
(STUN) [RFC5389] and Traversal Using Relays around NAT (TURN) | [RFC5389] and Traversal Using Relays around NAT (TURN) [RFC5766], and | |||
[RFC5766], in order to check the connectivity of each local-address- | then checks the connectivity of each local-address-remote-address | |||
remote-address pair and select the best one. The addresses that are | pair in order to select the best one. The addresses that are | |||
gathered usually consist of an endpoint's private physical/virtual | collected usually consist of an endpoint's private physical/virtual | |||
addresses and its public Internet addresses. | addresses and its public Internet addresses. | |||
These addresses are exposed upwards to the web application, so that | These addresses are exposed upwards to the web application, so that | |||
they can be communicated to the remote endpoint. This allows the | they can be communicated to the remote endpoint for its checks. This | |||
application to learn more about the local network configuration than | allows the application to learn more about the local network | |||
it would from a typical HTTP scenario, in which the web server would | configuration than it would from a typical HTTP scenario, in which | |||
only see a single public Internet address, i.e. the address from | the web server would only see a single public Internet address, i.e., | |||
which the HTTP request was sent. | the address from which the HTTP request was sent. | |||
The information revealed falls into three categories: | The information revealed falls into three categories: | |||
1. If the client is behind a Network Address Translator (NAT), the | 1. If the client is multihomed, additional public IP addresses for | |||
client's private IP addresses, typically [RFC1918] addresses, can | the client can be learned. In particular, if the client tries to | |||
be learned. | hide its physical location through a Virtual Private Network | |||
(VPN), and the VPN and local OS support routing over multiple | ||||
interfaces (a "split-tunnel" VPN), WebRTC will discover not only | ||||
the public address for the VPN, but also the ISP public address | ||||
over which the VPN is running. | ||||
2. If the client tries to hide its physical location through a | 2. If the client is behind a Network Address Translator (NAT), the | |||
Virtual Private Network (VPN), and the VPN and local OS support | client's private IP addresses, often [RFC1918] addresses, can be | |||
routing over multiple interfaces (i.e., a "split-tunnel" VPN), | learned. | |||
WebRTC will discover the public address for the VPN as well as | ||||
the ISP public address that the VPN runs over. | ||||
3. If the client is behind a proxy (a client-configured "classical | 3. If the client is behind a proxy (a client-configured "classical | |||
application proxy", as defined in [RFC1919], Section 3), but | application proxy", as defined in [RFC1919], Section 3), but | |||
direct access to the Internet is also supported, WebRTC's STUN | direct access to the Internet is also supported, WebRTC's STUN | |||
checks will bypass the proxy and reveal the public address of the | checks will bypass the proxy and reveal the public IP address of | |||
client. | the client. | |||
Of these three concerns, #2 is the most significant concern, since | Of these three concerns, #1 is the most significant, because for some | |||
for some users, the purpose of using a VPN is for anonymity. | users, the purpose of using a VPN is for anonymity. However, | |||
However, different VPN users will have different needs, and some VPN | different VPN users will have different needs, and some VPN users | |||
users (e.g. corporate VPN users) may in fact prefer WebRTC to send | (e.g., corporate VPN users) may in fact prefer WebRTC to send media | |||
media traffic directly, i.e., not through the VPN. | traffic directly, i.e., not through the VPN. | |||
#3 is a less common concern, as proxy administrators can control this | #2 is considered to be a less significant concern, given that the | |||
behavior through organization firewall policy if desired, coupled | local address values often contain minimal information (e.g., | |||
with the fact that forcing WebRTC traffic through a proxy will have | 192.168.0.2), or have built-in privacy protection (e.g., the | |||
negative effects on both the proxy and on media quality. For | [RFC4941] IPv6 addresses recommended by | |||
situations where this is an important consideration, use of a RETURN | [I-D.ietf-rtcweb-transports]). | |||
proxy, as described below, can be an effective solution. | ||||
#1 is considered to be the least significant concern, given that the | #3 is the least common concern, as proxy administrators can already | |||
local address values often contain minimal information (e.g. | control this behavior through organizational firewall policy, and | |||
192.168.0.2), or have built-in privacy protection (e.g. [RFC4941] | generally, forcing WebRTC traffic through a proxy server will have | |||
IPv6 addresses). | negative effects on both the proxy and on media quality. | |||
Note also that these concerns predate WebRTC; Adobe Flash Player has | Note also that these concerns predate WebRTC; Adobe Flash Player has | |||
provided similar functionality since the introduction of RTMFP | provided similar functionality since the introduction of RTMFP | |||
[RFC7016] in 2008. | [RFC7016] in 2008. | |||
4. Goals | 4. Goals | |||
Being peer-to-peer, WebRTC represents a privacy-enabling technology, | WebRTC's support of secure peer-to-peer connections facilitates | |||
and therefore we want to avoid solutions that disable WebRTC or make | deployment of decentralized systems, which can have privacy benefits. | |||
it harder to use. This means that WebRTC should be configured by | As a result, we want to avoid blunt solutions that disable WebRTC or | |||
default to only reveal the minimum amount of information needed to | make it significantly harder to use. This document takes a more | |||
establish a performant WebRTC session, while providing options to | nuanced approach, with the following goals: | |||
reveal additional information upon user consent, or further limit | ||||
this information if the user has specifically requested this. | ||||
Specifically, WebRTC should: | ||||
o Provide a privacy-friendly default behavior which strikes the | o Provide a framework for understanding the problem so that controls | |||
right balance between privacy and media performance for most users | might be provided to make different tradeoffs regarding | |||
and use cases. | performance and privacy concerns with WebRTC. | |||
o For users who care more about one versus the other, provide a | o Using that framework, define settings that enable peer-to-peer | |||
means to customize the experience. | communications, each with a different balance between performance | |||
and privacy. | ||||
o Finally, provide recommendations for default settings that provide | ||||
reasonable performance without also exposing addressing | ||||
information in a way that might violate user expectations. | ||||
5. Detailed Design | 5. Detailed Design | |||
The key principles for the design are listed below: | 5.1. Principles | |||
1. By default, WebRTC should follow normal IP routing rules, to the | The key principles for our framework are stated below: | |||
extent that this is easy to determine (i.e., not considering | ||||
proxies). This can be accomplished by binding local sockets to | ||||
the wildcard addresses (0.0.0.0 for IPv4, :: for IPv6), which | ||||
allows the OS to route WebRTC traffic the same way as it would | ||||
HTTP traffic, and allows only the 'typical' public addresses to | ||||
be discovered. | ||||
2. By default, support for direct connections between hosts (i.e., | 1. By default, WebRTC traffic should follow typical IP routing, | |||
without traversing a NAT or relay server) should be maintained. | i.e., WebRTC should use the same interface used for HTTP traffic, | |||
To accomplish this, the local IPv4 and IPv6 addresses of the | and only the system's 'typical' public addresses should be | |||
interface used for outgoing STUN traffic should still be surfaced | visible to the application. However, in the interest of optimal | |||
as candidates, even when binding to the wildcard addresses as | media quality, it should be possible to enable WebRTC to make use | |||
mentioned above. The appropriate addresses here can be | of all network interfaces to determine the ideal route. | |||
discovered by the common trick of binding sockets to the wildcard | ||||
addresses, connect()ing those sockets to some well-known public | ||||
IP address, and then reading the bound local addresses via | ||||
getsockname(). This approach requires no data exchange; it | ||||
simply provides a mechanism for applications to retrieve the | ||||
desired information from the kernel routing table. | ||||
3. Determining whether a web proxy is in use is a complex process, | 2. By default, WebRTC should be able to negotiate direct peer-to- | |||
as the answer can depend on the exact site or address being | peer connections between endpoints (i.e., without traversing a | |||
contacted. Furthermore, web proxies that support UDP are not | NAT or relay server), by providing a minimal set of local IP | |||
widely deployed today. As a result, when WebRTC is made to go | addresses to the application for use in the ICE process. This | |||
through a proxy, it typically needs to use TCP, either ICE-TCP | ensures that applications that need true peer-to-peer routing for | |||
bandwidth or latency reasons can operate successfully. However, | ||||
it should be possible to suppress these addresses (with the | ||||
resultant impact on direct connections) if desired. | ||||
[RFC6544] or TURN-over-TCP [RFC5766]. Naturally, this has | 3. By default, WebRTC traffic should not be sent through proxy | |||
attendant costs on media quality as well as proxy performance, | servers, due to the media quality problems associated with | |||
and should be avoided where possible. | sending WebRTC traffic over TCP, which is almost always used when | |||
communicating with proxies, as well as proxy performance issues | ||||
that may result from proxying WebRTC's long-lived, high-bandwidth | ||||
connections. However, it should be possible to force WebRTC to | ||||
send its traffic through a configured proxy if desired. | ||||
4. RETURN [I-D.ietf-rtcweb-return] is a proposal for explicit | 5.2. Modes and Recommendations | |||
proxying of WebRTC media traffic. When RETURN proxies are | ||||
deployed, media and STUN checks will go through the proxy, but | ||||
without the performance issues associated with sending through a | ||||
typical web proxy. | ||||
Based on these ideas, we define four specific modes of WebRTC | Based on these ideas, we define four specific modes of WebRTC | |||
behavior, reflecting different media quality/privacy tradeoffs: | behavior, reflecting different media quality/privacy tradeoffs: | |||
Mode 1: Enumerate all addresses: WebRTC MUST bind to all interfaces | Mode 1: Enumerate all addresses: WebRTC MUST use all network | |||
individually and use them all to attempt communication with | interfaces to attempt communication with STUN servers, TURN | |||
STUN servers, TURN servers, or peers. This will converge on | servers, or peers. This will converge on the best media | |||
the best media path, and is ideal when media performance is | path, and is ideal when media performance is the highest | |||
the highest priority, but it discloses the most information. | priority, but it discloses the most information. | |||
Mode 2: Default route + associated local addresses: WebRTC MUST | Mode 2: Default route + associated local addresses: WebRTC MUST | |||
follow the kernel routing table rules (e.g., by binding | follow the kernel routing table rules, which will typically | |||
solely to the wildcard address), which will typically cause | cause media packets to take the same route as the | |||
media packets to take the same route as the application's | application's HTTP traffic. In addition, the private IPv4 | |||
HTTP traffic. In addition, any private IPv4 and IPv6 | and IPv6 addresses associated with the kernel-chosen | |||
addresses associated with the kernel-chosen interface MUST | interface MUST be discovered and provided to the | |||
be discovered through getsockname, as mentioned above, and | application. This ensures that direct connections can still | |||
provided to the application. This ensures that direct | be established in this mode. | |||
connections can still be established in this mode. | ||||
Mode 3: Default route only: This is the the same as Mode 2, except | Mode 3: Default route only: This is the the same as Mode 2, except | |||
that the associated private address MUST NOT be provided. | that the associated private addressses MUST NOT be provided; | |||
This may cause traffic to hairpin through a NAT, fall back | the only IP addresses gathered are those discovered via | |||
to the application TURN server, or fail altogether, with | mechanisms like STUN and TURN (on the default route). This | |||
resulting quality implications. | may cause traffic to hairpin through a NAT, fall back to an | |||
application TURN server, or fail altogether, with resulting | ||||
quality implications. | ||||
Mode 4: Force proxy: This forces all WebRTC media traffic through a | Mode 4: Force proxy: This is the same as Mode 3, but all WebRTC | |||
proxy, if one is configured. If the proxy does not support | media traffic is forced through a proxy, if one is | |||
UDP (as is the case for all HTTP and most SOCKS [RFC1928] | configured. If the proxy does not support UDP (as is the | |||
proxies), or the WebRTC implementation does not support UDP | case for all HTTP and most SOCKS [RFC1928] proxies), or the | |||
proxying, the use of UDP will be disabled, and TCP will be | WebRTC implementation does not support UDP proxying, the use | |||
used to send and receive media through the proxy. Use of | of UDP will be disabled, and TCP will be used to send and | |||
TCP will result in reduced quality, in addition to any | receive media through the proxy. Use of TCP will result in | |||
performance considerations associated with sending all | reduced media quality, in addition to any performance | |||
WebRTC media through the proxy server. | considerations associated with sending all WebRTC media | |||
through the proxy server. | ||||
The recommended defaults are as follows: | ||||
Mode 1 MUST only be used when user consent has been provided; this | Mode 1 MUST only be used when user consent has been provided; this | |||
thwarts the typical drive-by enumeration attacks. The details of | allows trusted WebRTC applications to achieve optimal network | |||
this consent are left to the implementation; one potential mechanism | performance, but significanly limites the network information exposed | |||
is to tie this consent to getUserMedia consent. | to arbitrary web pages. The details of this consent are left to the | |||
implementation; one potential mechanism is to tie this consent to | ||||
getUserMedia consent. | ||||
In cases where user consent has not been obtained, Mode 2 SHOULD be | In cases where user consent has not been obtained, Mode 2 SHOULD be | |||
used. This allows applications to still achieve direct connections | used. This allows applications to still achieve direct connections | |||
in many cases, even without consent (e.g., data channel | in many cases, even without consent (e.g., streaming or data channel | |||
applications). However, user agents MAY choose a stricter default | applications). However, implementations MAY choose a stricter | |||
policy in certain circumstances. | default policy in certain circumstances. | |||
Note that when a RETURN proxy is configured for the interface | Note that these defaults can still be used even for organizations | |||
associated with the default route, Mode 2 and 3 will cause any | that want all external WebRTC traffic to traverse a proxy, simply by | |||
external media traffic to go through the RETURN proxy. While the | setting an organizational firewall policy that allows WebRTC traffic | |||
RETURN approach gives the best performance, a similar result can be | to only leave through the proxy. This provides a way to ensure the | |||
achieved for non-RETURN proxies via an organization firewall policy | proxy is used for any external traffic, but avoids the performance | |||
that only allows external WebRTC traffic to leave through the proxy | issues of Mode 4 (where all media is forced through said proxy) for | |||
(typically, over TCP). This provides a way to ensure the proxy is | intra-organization traffic. | |||
used for any external traffic, but avoids the performance issues of | ||||
Mode 4, where all media is forced through said proxy, for intra- | ||||
organization traffic. | ||||
6. Application Guidance | 6. Implementation Guidance | |||
This section provides guidance to WebRTC implementations on how to | ||||
implement the policies described above. | ||||
When trying to follow typical IP routing, the simplest approach is to | ||||
bind the sockets used for p2p connections to the wildcard addresses | ||||
(0.0.0.0 for IPv4, :: for IPv6), which allows the OS to route WebRTC | ||||
traffic the same way as it would HTTP traffic. STUN and TURN will | ||||
work as usual, and host candidates can be determined as mentioned | ||||
below. | ||||
In order to discover the correct local IP addresses, implementations | ||||
can use the common trick of binding sockets to the wildcard | ||||
addresses, connect()ing those sockets to the IPv4/IPv6 addresses of | ||||
the web application (obtained by resolving the host component of its | ||||
URI [RFC3986]) and then reading the bound local addresses via | ||||
getsockname(). This requires no data exchange; it simply provides a | ||||
mechanism for applications to retrieve the desired information from | ||||
the kernel routing table. | ||||
Use of the web application IPs ensures the right local IPs are | ||||
selected, regardless of where the application is hosted (e.g., on an | ||||
intranet). If the client is behind a proxy and cannot resolve the | ||||
IPs via DNS, the IPv4/v6 addresses of the proxy can be used instead. | ||||
If the web application was loaded from a file:// URI [RFC8089], the | ||||
implementation can fall back to a well-known DNS name or IP address. | ||||
7. Application Guidance | ||||
The recommendations mentioned in this document may cause certain | The recommendations mentioned in this document may cause certain | |||
WebRTC applications to malfunction. In order to be robust in all | WebRTC applications to malfunction. In order to be robust in all | |||
scenarios, the following guidelines are provided for applications: | scenarios, the following guidelines are provided for applications: | |||
o Applications SHOULD deploy a TURN server with support for both UDP | o Applications SHOULD deploy a TURN server with support for both UDP | |||
and TCP connections to the server. This ensures that connectivity | and TCP connections to the server. This ensures that connectivity | |||
can still be established, even when Mode 3 or 4 are in use, | can still be established, even when Mode 3 or 4 are in use, | |||
assuming the TURN server can be reached. | assuming the TURN server can be reached. | |||
o Applications SHOULD detect when they don't have access to the full | o Applications SHOULD detect when they don't have access to the full | |||
set of ICE candidates by checking for the presence of host | set of ICE candidates by checking for the presence of host | |||
candidates. If no host candidates are present, Mode 3 or 4 above | candidates. If no host candidates are present, Mode 3 or 4 above | |||
is in use; this knowledge can be useful for diagnostic purposes. | is in use; this knowledge can be useful for diagnostic purposes. | |||
7. Security Considerations | 8. Security Considerations | |||
This document is entirely devoted to security considerations. | This document is entirely devoted to security considerations. | |||
8. IANA Considerations | 9. IANA Considerations | |||
This document requires no actions from IANA. | This document requires no actions from IANA. | |||
9. Acknowledgements | 10. Acknowledgements | |||
Several people provided input into this document, including Bernard | Several people provided input into this document, including Bernard | |||
Aboba, Harald Alvestrand, Ted Hardie, Matthew Kaufmann, Eric | Aboba, Harald Alvestrand, Ted Hardie, Matthew Kaufmann, Eric | |||
Rescorla, Adam Roach, and Martin Thomson. | Rescorla, Adam Roach, and Martin Thomson. | |||
10. References | 11. References | |||
10.1. Normative References | 11.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
10.2. Informative References | 11.2. Informative References | |||
[I-D.ietf-rtcweb-return] | [I-D.ietf-rtcweb-transports] | |||
Schwartz, B. and J. Uberti, "Recursively Encapsulated TURN | Alvestrand, H., "Transports for WebRTC", draft-ietf- | |||
(RETURN) for Connectivity and Privacy in WebRTC", draft- | rtcweb-transports-17 (work in progress), October 2016. | |||
ietf-rtcweb-return-02 (work in progress), March 2017. | ||||
[RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G., | [RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G., | |||
and E. Lear, "Address Allocation for Private Internets", | and E. Lear, "Address Allocation for Private Internets", | |||
BCP 5, RFC 1918, DOI 10.17487/RFC1918, February 1996, | BCP 5, RFC 1918, DOI 10.17487/RFC1918, February 1996, | |||
<http://www.rfc-editor.org/info/rfc1918>. | <https://www.rfc-editor.org/info/rfc1918>. | |||
[RFC1919] Chatel, M., "Classical versus Transparent IP Proxies", | [RFC1919] Chatel, M., "Classical versus Transparent IP Proxies", | |||
RFC 1919, DOI 10.17487/RFC1919, March 1996, | RFC 1919, DOI 10.17487/RFC1919, March 1996, | |||
<http://www.rfc-editor.org/info/rfc1919>. | <https://www.rfc-editor.org/info/rfc1919>. | |||
[RFC1928] Leech, M., Ganis, M., Lee, Y., Kuris, R., Koblas, D., and | [RFC1928] Leech, M., Ganis, M., Lee, Y., Kuris, R., Koblas, D., and | |||
L. Jones, "SOCKS Protocol Version 5", RFC 1928, | L. Jones, "SOCKS Protocol Version 5", RFC 1928, | |||
DOI 10.17487/RFC1928, March 1996, | DOI 10.17487/RFC1928, March 1996, | |||
<http://www.rfc-editor.org/info/rfc1928>. | <https://www.rfc-editor.org/info/rfc1928>. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
Resource Identifier (URI): Generic Syntax", STD 66, | ||||
RFC 3986, DOI 10.17487/RFC3986, January 2005, | ||||
<https://www.rfc-editor.org/info/rfc3986>. | ||||
[RFC4941] Narten, T., Draves, R., and S. Krishnan, "Privacy | [RFC4941] Narten, T., Draves, R., and S. Krishnan, "Privacy | |||
Extensions for Stateless Address Autoconfiguration in | Extensions for Stateless Address Autoconfiguration in | |||
IPv6", RFC 4941, DOI 10.17487/RFC4941, September 2007, | IPv6", RFC 4941, DOI 10.17487/RFC4941, September 2007, | |||
<http://www.rfc-editor.org/info/rfc4941>. | <https://www.rfc-editor.org/info/rfc4941>. | |||
[RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | |||
(ICE): A Protocol for Network Address Translator (NAT) | (ICE): A Protocol for Network Address Translator (NAT) | |||
Traversal for Offer/Answer Protocols", RFC 5245, | Traversal for Offer/Answer Protocols", RFC 5245, | |||
DOI 10.17487/RFC5245, April 2010, | DOI 10.17487/RFC5245, April 2010, | |||
<http://www.rfc-editor.org/info/rfc5245>. | <https://www.rfc-editor.org/info/rfc5245>. | |||
[RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | |||
"Session Traversal Utilities for NAT (STUN)", RFC 5389, | "Session Traversal Utilities for NAT (STUN)", RFC 5389, | |||
DOI 10.17487/RFC5389, October 2008, | DOI 10.17487/RFC5389, October 2008, | |||
<http://www.rfc-editor.org/info/rfc5389>. | <https://www.rfc-editor.org/info/rfc5389>. | |||
[RFC5766] Mahy, R., Matthews, P., and J. Rosenberg, "Traversal Using | [RFC5766] Mahy, R., Matthews, P., and J. Rosenberg, "Traversal Using | |||
Relays around NAT (TURN): Relay Extensions to Session | Relays around NAT (TURN): Relay Extensions to Session | |||
Traversal Utilities for NAT (STUN)", RFC 5766, | Traversal Utilities for NAT (STUN)", RFC 5766, | |||
DOI 10.17487/RFC5766, April 2010, | DOI 10.17487/RFC5766, April 2010, | |||
<http://www.rfc-editor.org/info/rfc5766>. | <https://www.rfc-editor.org/info/rfc5766>. | |||
[RFC6544] Rosenberg, J., Keranen, A., Lowekamp, B., and A. Roach, | ||||
"TCP Candidates with Interactive Connectivity | ||||
Establishment (ICE)", RFC 6544, DOI 10.17487/RFC6544, | ||||
March 2012, <http://www.rfc-editor.org/info/rfc6544>. | ||||
[RFC7016] Thornburgh, M., "Adobe's Secure Real-Time Media Flow | [RFC7016] Thornburgh, M., "Adobe's Secure Real-Time Media Flow | |||
Protocol", RFC 7016, DOI 10.17487/RFC7016, November 2013, | Protocol", RFC 7016, DOI 10.17487/RFC7016, November 2013, | |||
<http://www.rfc-editor.org/info/rfc7016>. | <https://www.rfc-editor.org/info/rfc7016>. | |||
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
RFC 7230, DOI 10.17487/RFC7230, June 2014, | RFC 7230, DOI 10.17487/RFC7230, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7230>. | <https://www.rfc-editor.org/info/rfc7230>. | |||
[RFC8089] Kerwin, M., "The "file" URI Scheme", RFC 8089, | ||||
DOI 10.17487/RFC8089, February 2017, | ||||
<https://www.rfc-editor.org/info/rfc8089>. | ||||
Appendix A. Change log | Appendix A. Change log | |||
Changes in draft -05: | ||||
o Separated framework definition from implementation techniques. | ||||
o Removed RETURN references. | ||||
o Use origin when determining local IPs, rather than a well-known | ||||
IP. | ||||
Changes in draft -04: | Changes in draft -04: | |||
o Rewording and cleanup in abstract, intro, and problem statement. | o Rewording and cleanup in abstract, intro, and problem statement. | |||
o Added 2119 boilerplate. | o Added 2119 boilerplate. | |||
o Fixed weird reference spacing. | o Fixed weird reference spacing. | |||
o Expanded acronyms on first use. | o Expanded acronyms on first use. | |||
skipping to change at page 9, line 36 ¶ | skipping to change at page 10, line 29 ¶ | |||
Justin Uberti | Justin Uberti | |||
747 6th St S | 747 6th St S | |||
Kirkland, WA 98033 | Kirkland, WA 98033 | |||
USA | USA | |||
Email: justin@uberti.name | Email: justin@uberti.name | |||
Guo-wei Shieh | Guo-wei Shieh | |||
747 6th St S | 1101 Dexter Ave | |||
Kirkland, WA 98033 | Seattle, WA 98109 | |||
USA | USA | |||
Email: guoweis@google.com | Email: guoweis@facebook.com | |||
End of changes. 53 change blocks. | ||||
171 lines changed or deleted | 212 lines changed or added | |||
This html diff was produced by rfcdiff 1.46. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |