Loading changes/ticket32637 0 → 100644 +6 −0 Original line number Diff line number Diff line o Minor features (IPv6, client): - Make Tor clients tell dual-stack exits that they prefer IPv6 connections. This change is equivalent to setting the PreferIPv6 flag on SOCKSPorts (and most other listener ports). Tor Browser has been setting this flag for some time, and we want to remove a client distinguisher at exits. Closes ticket 32637. doc/tor.1.txt +14 −10 Original line number Diff line number Diff line Loading @@ -1703,7 +1703,9 @@ The following options are useful only for clients (that is, if connections via SOCKS. Set it to "auto" to have Tor pick a port for you. This directive can be specified multiple times to bind to multiple addresses/ports. If a unix domain socket is used, you may quote the path using standard C escape sequences. quote the path using standard C escape sequences. Most flags are off by default, except where specified. Flags that are on by default can be disabled by putting "No" before the flag name. (Default: 9050) + + NOTE: Although this option allows you to specify an IP address Loading Loading @@ -1757,14 +1759,16 @@ The following options are useful only for clients (that is, if Other recognized __flags__ for a SocksPort are: **NoIPv4Traffic**;; Tell exits to not connect to IPv4 addresses in response to SOCKS requests on this connection. **IPv6Traffic**;; Tell exits to allow IPv6 addresses in response to SOCKS requests on this connection, so long as SOCKS5 is in use. (SOCKS4 can't handle IPv6.) **PreferIPv6**;; requests on this connection. (Allowing IPv4 is the default.) **NoIPv6Traffic**;; Tell exits to not connect to IPv6 addresses in response to SOCKS requests on this connection. This option is only relevant when SOCKS5 is in use, because SOCKS4 can't handle IPv6. (Allowing IPv6 is the default.) **NoPreferIPv6**;; Tells exits that, if a host has both an IPv4 and an IPv6 address, we would prefer to connect to it via IPv6. (IPv4 is the default.) we would prefer to connect to it via IPv4. (IPv6 is the default in recent versions of Tor.) **NoDNSRequest**;; Do not ask exits to resolve DNS addresses in SOCKS5 requests. Tor will connect to IPv4 addresses, IPv6 addresses (if IPv6Traffic is set) and Loading Loading @@ -1802,11 +1806,11 @@ The following options are useful only for clients (that is, if **UseDNSCache**;; Tells the client to use any cached DNS answers we have when making requests via this connection. **PreferIPv6Automap**;; **NoPreferIPv6Automap**;; When serving a hostname lookup request on this port that should get automapped (according to AutomapHostsOnResolve), if we could return either an IPv4 or an IPv6 answer, prefer an IPv6 answer. (On by default.) an IPv4 answer. (Tor prefers IPv6 by default.) **PreferSOCKSNoAuth**;; Ordinarily, when an application offers both "username/password authentication" and "no authentication" to Tor via SOCKS5, Tor Loading src/app/config/config.c +2 −1 Original line number Diff line number Diff line Loading @@ -5886,6 +5886,7 @@ port_cfg_new(size_t namelen) port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t) + namelen + 1); cfg->entry_cfg.ipv4_traffic = 1; cfg->entry_cfg.ipv6_traffic = 1; cfg->entry_cfg.prefer_ipv6 = 1; cfg->entry_cfg.dns_request = 1; cfg->entry_cfg.onion_traffic = 1; cfg->entry_cfg.prefer_ipv6_virtaddr = 1; Loading Loading @@ -6133,7 +6134,7 @@ port_parse_config(smartlist_t *out, /* This must be kept in sync with port_cfg_new's defaults */ int no_listen = 0, no_advertise = 0, all_addrs = 0, bind_ipv4_only = 0, bind_ipv6_only = 0, ipv4_traffic = 1, ipv6_traffic = 1, prefer_ipv6 = 0, dns_request = 1, ipv4_traffic = 1, ipv6_traffic = 1, prefer_ipv6 = 1, dns_request = 1, onion_traffic = 1, cache_ipv4 = 0, use_cached_ipv4 = 0, cache_ipv6 = 0, use_cached_ipv6 = 0, Loading src/core/mainloop/connection.c +1 −1 Original line number Diff line number Diff line Loading @@ -1516,7 +1516,7 @@ connection_listener_new(const struct sockaddr *listensockaddr, if (type != CONN_TYPE_AP_LISTENER) { lis_conn->entry_cfg.ipv4_traffic = 1; lis_conn->entry_cfg.ipv6_traffic = 1; lis_conn->entry_cfg.prefer_ipv6 = 0; lis_conn->entry_cfg.prefer_ipv6 = 1; } if (connection_add(conn) < 0) { /* no space, forget it */ Loading src/test/test_config.c +2 −0 Original line number Diff line number Diff line Loading @@ -4158,6 +4158,8 @@ test_config_parse_port_config__ports__ports_given(void *data) /* Test entry port defaults as initialised in port_parse_config */ tt_int_op(port_cfg->entry_cfg.dns_request, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.ipv4_traffic, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.ipv6_traffic, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.prefer_ipv6, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.onion_traffic, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.cache_ipv4_answers, OP_EQ, 0); tt_int_op(port_cfg->entry_cfg.prefer_ipv6_virtaddr, OP_EQ, 1); Loading Loading
changes/ticket32637 0 → 100644 +6 −0 Original line number Diff line number Diff line o Minor features (IPv6, client): - Make Tor clients tell dual-stack exits that they prefer IPv6 connections. This change is equivalent to setting the PreferIPv6 flag on SOCKSPorts (and most other listener ports). Tor Browser has been setting this flag for some time, and we want to remove a client distinguisher at exits. Closes ticket 32637.
doc/tor.1.txt +14 −10 Original line number Diff line number Diff line Loading @@ -1703,7 +1703,9 @@ The following options are useful only for clients (that is, if connections via SOCKS. Set it to "auto" to have Tor pick a port for you. This directive can be specified multiple times to bind to multiple addresses/ports. If a unix domain socket is used, you may quote the path using standard C escape sequences. quote the path using standard C escape sequences. Most flags are off by default, except where specified. Flags that are on by default can be disabled by putting "No" before the flag name. (Default: 9050) + + NOTE: Although this option allows you to specify an IP address Loading Loading @@ -1757,14 +1759,16 @@ The following options are useful only for clients (that is, if Other recognized __flags__ for a SocksPort are: **NoIPv4Traffic**;; Tell exits to not connect to IPv4 addresses in response to SOCKS requests on this connection. **IPv6Traffic**;; Tell exits to allow IPv6 addresses in response to SOCKS requests on this connection, so long as SOCKS5 is in use. (SOCKS4 can't handle IPv6.) **PreferIPv6**;; requests on this connection. (Allowing IPv4 is the default.) **NoIPv6Traffic**;; Tell exits to not connect to IPv6 addresses in response to SOCKS requests on this connection. This option is only relevant when SOCKS5 is in use, because SOCKS4 can't handle IPv6. (Allowing IPv6 is the default.) **NoPreferIPv6**;; Tells exits that, if a host has both an IPv4 and an IPv6 address, we would prefer to connect to it via IPv6. (IPv4 is the default.) we would prefer to connect to it via IPv4. (IPv6 is the default in recent versions of Tor.) **NoDNSRequest**;; Do not ask exits to resolve DNS addresses in SOCKS5 requests. Tor will connect to IPv4 addresses, IPv6 addresses (if IPv6Traffic is set) and Loading Loading @@ -1802,11 +1806,11 @@ The following options are useful only for clients (that is, if **UseDNSCache**;; Tells the client to use any cached DNS answers we have when making requests via this connection. **PreferIPv6Automap**;; **NoPreferIPv6Automap**;; When serving a hostname lookup request on this port that should get automapped (according to AutomapHostsOnResolve), if we could return either an IPv4 or an IPv6 answer, prefer an IPv6 answer. (On by default.) an IPv4 answer. (Tor prefers IPv6 by default.) **PreferSOCKSNoAuth**;; Ordinarily, when an application offers both "username/password authentication" and "no authentication" to Tor via SOCKS5, Tor Loading
src/app/config/config.c +2 −1 Original line number Diff line number Diff line Loading @@ -5886,6 +5886,7 @@ port_cfg_new(size_t namelen) port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t) + namelen + 1); cfg->entry_cfg.ipv4_traffic = 1; cfg->entry_cfg.ipv6_traffic = 1; cfg->entry_cfg.prefer_ipv6 = 1; cfg->entry_cfg.dns_request = 1; cfg->entry_cfg.onion_traffic = 1; cfg->entry_cfg.prefer_ipv6_virtaddr = 1; Loading Loading @@ -6133,7 +6134,7 @@ port_parse_config(smartlist_t *out, /* This must be kept in sync with port_cfg_new's defaults */ int no_listen = 0, no_advertise = 0, all_addrs = 0, bind_ipv4_only = 0, bind_ipv6_only = 0, ipv4_traffic = 1, ipv6_traffic = 1, prefer_ipv6 = 0, dns_request = 1, ipv4_traffic = 1, ipv6_traffic = 1, prefer_ipv6 = 1, dns_request = 1, onion_traffic = 1, cache_ipv4 = 0, use_cached_ipv4 = 0, cache_ipv6 = 0, use_cached_ipv6 = 0, Loading
src/core/mainloop/connection.c +1 −1 Original line number Diff line number Diff line Loading @@ -1516,7 +1516,7 @@ connection_listener_new(const struct sockaddr *listensockaddr, if (type != CONN_TYPE_AP_LISTENER) { lis_conn->entry_cfg.ipv4_traffic = 1; lis_conn->entry_cfg.ipv6_traffic = 1; lis_conn->entry_cfg.prefer_ipv6 = 0; lis_conn->entry_cfg.prefer_ipv6 = 1; } if (connection_add(conn) < 0) { /* no space, forget it */ Loading
src/test/test_config.c +2 −0 Original line number Diff line number Diff line Loading @@ -4158,6 +4158,8 @@ test_config_parse_port_config__ports__ports_given(void *data) /* Test entry port defaults as initialised in port_parse_config */ tt_int_op(port_cfg->entry_cfg.dns_request, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.ipv4_traffic, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.ipv6_traffic, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.prefer_ipv6, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.onion_traffic, OP_EQ, 1); tt_int_op(port_cfg->entry_cfg.cache_ipv4_answers, OP_EQ, 0); tt_int_op(port_cfg->entry_cfg.prefer_ipv6_virtaddr, OP_EQ, 1); Loading