| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 | 
							- Filename: 117-ipv6-exits.txt
 
- Title: IPv6 exits
 
- Author: coderman
 
- Created: 10-Jul-2007
 
- Status: Accepted
 
- Target: 0.2.1.x
 
- Overview
 
-    Extend Tor for TCP exit via IPv6 transport and DNS resolution of IPv6
 
-    addresses.  This proposal does not imply any IPv6 support for OR
 
-    traffic, only exit and name resolution.
 
- Contents
 
- 0. Motivation
 
-    As the IPv4 address space becomes more scarce there is increasing
 
-    effort to provide Internet services via the IPv6 protocol.  Many
 
-    hosts are available at IPv6 endpoints which are currently
 
-    inaccessible for Tor users.
 
-    Extending Tor to support IPv6 exit streams and IPv6 DNS name
 
-    resolution will allow users of the Tor network to access these hosts.
 
-    This capability would be present for those who do not currently have
 
-    IPv6 access, thus increasing the utility of Tor and furthering
 
-    adoption of IPv6.
 
- 1. Design
 
- 1.1. General design overview
 
-    There are three main components to this proposal.  The first is a
 
-    method for routers to advertise their ability to exit IPv6 traffic.
 
-    The second is the manner in which routers resolve names to IPv6
 
-    addresses.  Last but not least is the method in which clients
 
-    communicate with Tor to resolve and connect to IPv6 endpoints
 
-    anonymously.
 
- 1.2. Router IPv6 exit support
 
-    In order to specify exit policies and IPv6 capability new directives
 
-    in the Tor configuration will be needed.  If a router advertises IPv6
 
-    exit policies in its descriptor this will signal the ability to
 
-    provide IPv6 exit.  There are a number of additional default deny
 
-    rules associated with this new address space which are detailed in
 
-    the addendum.
 
-    When Tor is started on a host it should check for the presence of a
 
-    global unicast IPv6 address and if present include the default IPv6
 
-    exit policies and any user specified IPv6 exit policies.
 
-    If a user provides IPv6 exit policies but no global unicast IPv6
 
-    address is available Tor should generate a warning and not publish the
 
-    IPv6 policies in the router descriptor.
 
-    It should be noted that IPv4 mapped IPv6 addresses are not valid exit
 
-    destinations.  This mechanism is mainly used to interoperate with
 
-    both IPv4 and IPv6 clients on the same socket.  Any attempts to use
 
-    an IPv4 mapped IPv6 address, perhaps to circumvent exit policy for
 
-    IPv4, must be refused.
 
- 1.3. DNS name resolution of IPv6 addresses (AAAA records)
 
-    In addition to exit support for IPv6 TCP connections, a method to
 
-    resolve domain names to their respective IPv6 addresses is also
 
-    needed.  This is accomplished in the existing DNS system via AAAA
 
-    records.  Routers will perform both A and AAAA requests when
 
-    resolving a name so that the client can utilize an IPv6 endpoint when
 
-    available or preferred.
 
-    To avoid potential problems with caching DNS servers that behave
 
-    poorly all NXDOMAIN responses to AAAA requests should be ignored if a
 
-    successful response is received for an A request.  This implies that
 
-    both AAAA and A requests will always be performed for each name
 
-    resolution.
 
-    For reverse lookups on IPv6 addresses, like that used for
 
-    RESOLVE_PTR, Tor will perform the necessary PTR requests via
 
-    IP6.ARPA.
 
-    All routers which perform DNS resolution on behalf of clients
 
-    (RELAY_RESOLVE) should perform and respond with both A and AAAA
 
-    resources.
 
-    [NOTE: In a future version, when we extend the behavior of RESOLVE to
 
-     encapsulate more of real DNS, it will make sense to allow more
 
-     flexibility here. -nickm]
 
- 1.4. Client interaction with IPv6 exit capability
 
- 1.4.1. Usability goals
 
-    There are a number of behaviors which Tor can provide when
 
-    interacting with clients that will improve the usability of IPv6 exit
 
-    capability.  These behaviors are designed to make it simple for
 
-    clients to express a preference for IPv6 transport and utilize IPv6
 
-    host services.
 
- 1.4.2. SOCKSv5 IPv6 client behavior
 
-    The SOCKS version 5 protocol supports IPv6 connections.  When using
 
-    SOCKSv5 with hostnames it is difficult to determine if a client
 
-    wishes to use an IPv4 or IPv6 address to connect to the desired host
 
-    if it resolves to both address types.
 
-    In order to make this more intuitive the SOCKSv5 protocol can be
 
-    supported on a local IPv6 endpoint, [::1] port 9050 for example.
 
-    When a client requests a connection to the desired host via an IPv6
 
-    SOCKS connection Tor will prefer IPv6 addresses when resolving the
 
-    host name and connecting to the host.
 
-    Likewise, RESOLVE and RESOLVE_PTR requests from an IPv6 SOCKS
 
-    connection will return IPv6 addresses when available, and fall back
 
-    to IPv4 addresses if not.
 
-    [NOTE: This means that SocksListenAddress and DNSListenAddress should
 
-     support IPv6 addresses.  Perhaps there should also be a general option
 
-     to have listeners that default to 127.0.0.1 and 0.0.0.0 listen
 
-     additionally or instead on ::1 and :: -nickm]
 
- 1.4.3. MAPADDRESS behavior
 
-    The MAPADDRESS capability supports clients that may not be able to
 
-    use the SOCKSv4a or SOCKSv5 hostname support to resolve names via
 
-    Tor.  This ability should be extended to IPv6 addresses in SOCKSv5 as
 
-    well.
 
-    When a client requests an address mapping from the wildcard IPv6
 
-    address, [::0], the server will respond with a unique local IPv6
 
-    address on success.  It is important to note that there may be two
 
-    mappings for the same name if both an IPv4 and IPv6 address are
 
-    associated with the host.  In this case a CONNECT to a mapped IPv6
 
-    address should prefer IPv6 for the connection to the host, if
 
-    available, while CONNECT to a mapped IPv4 address will prefer IPv4.
 
-    It should be noted that IPv6 does not provide the concept of a host
 
-    local subnet, like 127.0.0.0/8 in IPv4.  For this reason integration
 
-    of Tor with IPv6 clients should consider a firewall or filter rule to
 
-    drop unique local addresses to or from the network when possible.
 
-    These packets should not be routed, however, keeping them off the
 
-    subnet entirely is worthwhile.
 
- 1.4.3.1. Generating unique local IPv6 addresses
 
-    The usual manner of generating a unique local IPv6 address is to
 
-    select a Global ID part randomly, along with a Subnet ID, and sharing
 
-    this prefix among the communicating parties who each have their own
 
-    distinct Interface ID.  In this style a given Tor instance might
 
-    select a random Global and Subnet ID and provide MAPADDRESS
 
-    assignments with a random Interface ID as needed.  This has the
 
-    potential to associate unique Global/Subnet identifiers with a given
 
-    Tor instance and may expose attacks against the anonymity of Tor
 
-    users.
 
-    Tor avoid this potential problem entirely MAPADDRESS must always
 
-    generate the Global, Subnet, and Interface IDs randomly for each
 
-    request.  It is also highly suggested that explicitly specifying an
 
-    IPv6 source address instead of the wildcard address not be supported
 
-    to ensure that a good random address is used.
 
- 1.4.4. DNSProxy IPv6 client behavior
 
-    A new capability in recent Tor versions is the transparent DNS proxy.
 
-    This feature will need to return both A and AAAA resource records
 
-    when responding to client name resolution requests.
 
-    The transparent DNS proxy should also support reverse lookups for
 
-    IPv6 addresses.  It is suggested that any such requests to the
 
-    deprecated IP6.INT domain should be translated to IP6.ARPA instead.
 
-    This translation is not likely to be used and is of low priority.
 
-    It would be nice to support DNS over IPv6 transport as well, however,
 
-    this is not likely to be used and is of low priority.
 
- 1.4.5. TransPort IPv6 client behavior
 
-    Tor also provides transparent TCP proxy support via the Trans*
 
-    directives in the configuration.  The TransListenAddress directive
 
-    should accept an IPv6 address in addition to IPv4 so that IPv6 TCP
 
-    connections can be transparently proxied.
 
- 1.5. Additional changes
 
-    The RedirectExit option should be deprecated rather than extending
 
-    this feature to IPv6.
 
- 2. Spec changes
 
- 2.1. Tor specification
 
-    In '6.2. Opening streams and transferring data' the following should
 
-    be changed to indicate IPv6 exit capability:
 
-       "No version of Tor currently generates the IPv6 format."
 
-    In '6.4. Remote hostname lookup' the following should be updated to
 
-    reflect use of ip6.arpa in addition to in-addr.arpa.
 
-       "For a reverse lookup, the OP sends a RELAY_RESOLVE cell containing an
 
-        in-addr.arpa address."
 
-    In 'A.1. Differences between spec and implementation' the following
 
-    should be updated to indicate IPv6 exit capability:
 
-       "The current codebase has no IPv6 support at all."
 
-    [NOTE: the EXITPOLICY end-cell reason says that it can hold an ipv4 or an
 
-     ipv6 address, but doesn't say how.  We may want a separate EXITPOLICY2
 
-     type that can hold an ipv6 address, since the way we encode ipv6
 
-     addresses elsewhere ("0.0.0.0 indicates that the next 16 bytes are ipv6")
 
-     is a bit dumb. -nickm]
 
-    [Actually, the length field lets us distinguish EXITPOLICY. -nickm]
 
- 2.2. Directory specification
 
-    In '2.1. Router descriptor format' a new set of directives is needed
 
-    for IPv6 exit policy.  The existing accept/reject directives should
 
-    be clarified to indicate IPv4 or wildcard address relevance.  The new
 
-    IPv6 directives will be in the form of:
 
-       "accept6" exitpattern NL
 
-       "reject6" exitpattern NL
 
-    The section describing accept6/reject6 should explain that the
 
-    presence of accept6 or reject6 exit policies in a router descriptor
 
-    signals the ability of that router to exit IPv6 traffic (according to
 
-    IPv6 exit policies).
 
-    The "[::]/0" notation is used to represent "all IPv6 addresses".
 
-    "[::0]/0" may also be used for this representation.
 
-    If a user specifies a 'reject6 [::]/0:*' policy in the Tor
 
-    configuration this will be interpreted as forcing no IPv6 exit
 
-    support and no accept6/reject6 policies will be included in the
 
-    published descriptor.  This will prevent IPv6 exit if the router host
 
-    has a global unicast IPv6 address present.
 
-    It is important to note that a wildcard address in an accept or
 
-    reject policy applies to both IPv4 and IPv6 addresses.
 
- 2.3. Control specification
 
-    In '3.8. MAPADDRESS' the potential to have to addresses for a given
 
-    name should be explained.  The method for generating unique local
 
-    addresses for IPv6 mappings needs explanation as described above.
 
-    When IPv6 addresses are used in this document they should include the
 
-    brackets for consistency.  For example, the null IPv6 address should
 
-    be written as "[::0]" and not "::0".  The control commands will
 
-    expect the same syntax as well.
 
-    In '3.9. GETINFO' the "address" command should return both public
 
-    IPv4 and IPv6 addresses if present.  These addresses should be
 
-    separated via \r\n.
 
- 2.4. Tor SOCKS extensions
 
-    In '2. Name lookup' a description of IPv6 address resolution is
 
-    needed for SOCKSv5 as described above.  IPv6 addresses should be
 
-    supported in both the RESOLVE and RESOLVE_PTR extensions.
 
-    A new section describing the ability to accept SOCKSv5 clients on a
 
-    local IPv6 address to indicate a preference for IPv6 transport as
 
-    described above is also needed.  The behavior of Tor SOCKSv5 proxy
 
-    with an IPv6 preference should be explained, for example, preferring
 
-    IPv6 transport to a named host with both IPv4 and IPv6 addresses
 
-    available (A and AAAA records).
 
- 3. Questions and concerns
 
- 3.1. DNS A6 records
 
-    A6 is explicitly avoided in this document.  There are potential
 
-    reasons for implementing this, however, the inherent complexity of
 
-    the protocol and resolvers make this unappealing.  Is there a
 
-    compelling reason to consider A6 as part of IPv6 exit support?
 
-    [IMO not till anybody needs it. -nickm]
 
- 3.2. IPv4 and IPv6 preference
 
-    The design above tries to infer a preference for IPv4 or IPv6
 
-    transport based on client interactions with Tor.  It might be useful
 
-    to provide more explicit control over this preference.  For example,
 
-    an IPv4 SOCKSv5 client may want to use IPv6 transport to named hosts
 
-    in CONNECT requests while the current implementation would assume an
 
-    IPv4 preference.  Should more explicit control be available, through
 
-    either configuration directives or control commands?
 
-    Many applications support a inet6-only or prefer-family type option
 
-    that provides the user manual control over address preference.  This
 
-    could be provided as a Tor configuration option.
 
-    An explicit preference is still possible by resolving names and then
 
-    CONNECTing to an IPv4 or IPv6 address as desired, however, not all
 
-    client applications may have this option available.
 
- 3.3. Support for IPv6 only transparent proxy clients
 
-    It may be useful to support IPv6 only transparent proxy clients using
 
-    IPv4 mapped IPv6 like addresses.  This would require transparent DNS
 
-    proxy using IPv6 transport and the ability to map A record responses
 
-    into IPv4 mapped IPv6 like addresses in the manner described in the
 
-    "NAT-PT" RFC for a traditional Basic-NAT-PT with DNS-ALG.  The
 
-    transparent TCP proxy would thus need to detect these mapped addresses
 
-    and connect to the desired IPv4 host.
 
-    The IPv6 prefix used for this purpose must not be the actual IPv4
 
-    mapped IPv6 address prefix, though the manner in which IPv4 addresses
 
-    are embedded in IPv6 addresses would be the same.
 
-    The lack of any IPv6 only hosts which would use this transparent proxy
 
-    method makes this a lot of work for very little gain.  Is there a
 
-    compelling reason to support this NAT-PT like capability?
 
- 3.4. IPv6 DNS and older Tor routers
 
-    It is expected that many routers will continue to run with older
 
-    versions of Tor when the IPv6 exit capability is released.  Clients
 
-    who wish to use IPv6 will need to route RELAY_RESOLVE requests to the
 
-    newer routers which will respond with both A and AAAA resource
 
-    records when possible.
 
-    One way to do this is to route RELAY_RESOLVE requests to routers with
 
-    IPv6 exit policies published, however, this would not utilize current
 
-    routers that can resolve IPv6 addresses even if they can't exit such
 
-    traffic.
 
-    There was also concern expressed about the ability of existing clients
 
-    to cope with new RELAY_RESOLVE responses that contain IPv6 addresses.
 
-    If this breaks backward compatibility, a new request type may be
 
-    necessary, like RELAY_RESOLVE6, or some other mechanism of indicating
 
-    the ability to parse IPv6 responses when making the request.
 
- 3.5. IPv4 and IPv6 bindings in MAPADDRESS
 
-    It may be troublesome to try and support two distinct address mappings
 
-    for the same name in the existing MAPADDRESS implementation.  If this
 
-    cannot be accommodated then the behavior should replace existing
 
-    mappings with the new address regardless of family.  A warning when
 
-    this occurs would be useful to assist clients who encounter problems
 
-    when both an IPv4 and IPv6 application are using MAPADDRESS for the
 
-    same names concurrently, causing lost connections for one of them.
 
- 4. Addendum
 
- 4.1. Sample IPv6 default exit policy
 
-    reject 0.0.0.0/8
 
-    reject 169.254.0.0/16
 
-    reject 127.0.0.0/8
 
-    reject 192.168.0.0/16
 
-    reject 10.0.0.0/8
 
-    reject 172.16.0.0/12
 
-    reject6 [0000::]/8
 
-    reject6 [0100::]/8
 
-    reject6 [0200::]/7
 
-    reject6 [0400::]/6
 
-    reject6 [0800::]/5
 
-    reject6 [1000::]/4
 
-    reject6 [4000::]/3
 
-    reject6 [6000::]/3
 
-    reject6 [8000::]/3
 
-    reject6 [A000::]/3
 
-    reject6 [C000::]/3
 
-    reject6 [E000::]/4
 
-    reject6 [F000::]/5
 
-    reject6 [F800::]/6
 
-    reject6 [FC00::]/7
 
-    reject6 [FE00::]/9
 
-    reject6 [FE80::]/10
 
-    reject6 [FEC0::]/10
 
-    reject6 [FF00::]/8
 
-    reject *:25
 
-    reject *:119
 
-    reject *:135-139
 
-    reject *:445
 
-    reject *:1214
 
-    reject *:4661-4666
 
-    reject *:6346-6429
 
-    reject *:6699
 
-    reject *:6881-6999
 
-    accept *:*
 
-    # accept6 [2000::]/3:* is implied
 
- 4.2. Additional resources
 
-    'DNS Extensions to Support IP Version 6'
 
-    http://www.ietf.org/rfc/rfc3596.txt
 
-    'DNS Extensions to Support IPv6 Address Aggregation and Renumbering'
 
-    http://www.ietf.org/rfc/rfc2874.txt
 
-    'SOCKS Protocol Version 5'
 
-    http://www.ietf.org/rfc/rfc1928.txt
 
-    'Unique Local IPv6 Unicast Addresses'
 
-    http://www.ietf.org/rfc/rfc4193.txt
 
-    'INTERNET PROTOCOL VERSION 6 ADDRESS SPACE'
 
-    http://www.iana.org/assignments/ipv6-address-space
 
-    'Network Address Translation - Protocol Translation (NAT-PT)'
 
-    http://www.ietf.org/rfc/rfc2766.txt
 
 
  |