wiki:org/sponsors/Sponsor55

Sponsor 55

Project Title: Improving the Tor network’s IPv6 support

Project Period: February 1st, 2020 - August 15th, 2020

The goal of this project is to improve the Tor network’s IPv6 support. Doing so will improve the network’s censorship resistance, its privacy properties, its usefulness for the technical community, its alignment with global migration towards IPv6, with benefits for more than a million Tor users in the RIPE community.

Users in the RIPE region make up more than half of all Tor users--during 2018, more than 51% of Tor’s daily users connected from a RIPE country. Conservatively, that’s more than one million average daily users. During 2018, of the top 10 countries with the largest average daily Tor user bases, seven of those countries are in the RIPE service region. Germany was the largest average daily user group last year—with 17.5% of all Tor users connecting from Germany. United Arab Emirates was third, making up 10.49% of Tor users. Russia was fourth (10.42% of Tor users), France was fifth (4.12% of Tor users), Ukraine was sixth (3.96% of Tor users), the United Kingdom was eighth (2.62% of Tor users), and the Netherlands was ninth, (2.22% of Tor users).

Meetings

Weekly meetings during the network meetings on Monday, 17000 UTC in #tor-meeting in irc.oftc.net

Pad for weekly meeting agenda and notes

Project Goals/Activities

Objective 1: Increase the number of Tor network relays that support IPv6.

By the numbers, about 29% of Tor’s relay bandwidth supports IPv6--but functionally, only 20% of Tor’s available bandwidth supports IPv6. This is because some Guard relays are also Exit relays, and as such, they are only used as Exits by Tor clients. These limitations mean that even if an Exit relay supports IPv6, it doesn’t functionally increase the Tor network’s client to Guard IPv6 bandwidth.

In order to better support IPv6, we aim to increase the client to Guard relay bandwidth that supports IPv6 to 33%. Reaching this goal (and completing this project) is the first step in a longer-term effort to implement “fast fallback,” which will make sure that Tor clients first try IPv4 and then try IPv6 after a short delay, using whichever option works.

To increase the functional relay bandwidth that supports IPv6, we need to improve the way we handle configuration for dual stack Tor relays (relays that support both IPv4 and IPv6). As it stands, dual stack relays require some manual configuration, which can be a setup barrier for relay operators. Automating relay IPv6 address discovery and reachability checks will help operators to run more dual stack relays more easily and, over time, increase the number of relays that support IPv6.

  • O1.1 Propose and implement IPv6 ORPort reachability checks on relays • O1.2 Make relays figure out their own IPv6 address • O1.3 Integration test Tor relays over IPv6 using chutney • O1.4 Measure the number of Tor relays that support IPv6 reachability checks • O1.5 Measure the number of connections, and consumed bandwidth, using IPv4 and IPv6

Teams involved:

  • network team
  • metrics team

Project Tracking

In the network team's roadmap filtered by Sponsor 55.

Tickets by objective and activity

O1.1 Propose and implement IPv6 ORPort reachability checks on relays

Ticket Summary Status Owner Points Actual Points Reviewer
#33220 Prop 311: 3. Allow Relay IPv6 Extends assigned teor 3
#33221 Prop 311: 4. Ensure Relay and Bridge IPv6 ORPorts are Reachable assigned teor 10
#33229 Prop 311: 6.1. Test IPv6 ORPort Reachability on the Tor Network assigned 2
#33230 Prop 311: 6.1. Ask Relay Operators to Test IPv6 Reachability assigned 0.5
#33880 Confusing "Your relay has a very large number of connections to other relays" relay message assigned nickm 0.5
#33898 Stop modifying addr on connections, and delete real_addr assigned nickm 1
#34445 Split assumereachable into self and authority components assigned nickm .2
#34446 TestingTorNetwork should not set AssumeReachable 1 assigned nickm .1
#33226 Prop 311: 5. Declare Support for Subprotocol Version "Relay=3" closed teor 0.5 1
#33285 Make sure relay protocol lists are sorted closed teor 0.3 0.4 nickm
#33633 Move extend and reachability code to the relay module closed teor 0.5 1.0 nickm
#33817 Perform Basic Relay IPv6 Extends closed teor 1 3.2 nickm
#33899 Allow IPv6 addresses to be canonical closed teor 0.5 0.3 nickm
#33900 Check for invalid zero IPv4 addresses and ports in extend cells closed teor 0
#33901 Allow IPv6 extend cells closed teor 0.5 0.5 ahf
#33917 Make IF_BUG_ONCE() support ALL_BUGS_ARE_FATAL closed teor 0.2 0.2 ahf
#33956 Define and use TOR_ADDRPORT_BUF_LEN closed neel 0.5 teor
#32588 Setting ORPort [ipv6]:auto mistakenly advertises port 94 merge_ready teor 1 1.1 nickm, teor
#33919 Write unit tests for channel_matches_target_addr_for_extend() needs_revision 0.5 nickm
#33043 Prop 306: Keep bridge IPv6 behaviour in sync with client behaviour new
#33905 Adjust "large number of connections to other relays" warnings new 0.5
#34137 Make sure inform_testing_reachability() reports the correct ports new 1

O1.2 Make relays figure out their own IPv6 address

Ticket Summary Status Owner Points Actual Points Reviewer
#33233 Prop 312: 3.2.1. Make the Address torrc Option Support IPv6 Literals assigned 1
#33234 Prop 312: 3.2.1. Make the Address torrc Option Resolve IPv6 Hostnames assigned 2
#33235 Prop 312: 3.2.1. Test Address torrc Option Configurations assigned 1
#33236 Prop 312: 3.2.2. Use Advertised ORPort IPv4 Address in Descriptors assigned 1
#33238 Prop 312: 3.2.3. Use Local Interface IPv6 Address assigned 1
#33239 Prop 312: 3.2.3 Limit Directory Authority Addresses to Address and ORPort assigned 1
#33240 Prop 312: 3.2.4. Use Own Hostname IPv6 Addresses assigned 1
#33241 Prop 312: 3.2.5. Use Directory Header IPv6 Addresses assigned 4
#33245 Prop 312: 3.2.6. Add an AddressDisableIPv6 torrc option assigned 1
#33246 Prop 312: 3.2.7. Automatically Enable an IPv6 ORPort assigned 1
#33247 Prop 312: 3.2.7. Publish IPv4 Descriptor on Guessed IPv6 Reachability Failure assigned 0.5
#33252 Prop 312: 5.1. Test Relay IPv6 Addresses Discovery on the Tor Network assigned 1
#33253 Prop 312: 5.1. Ask Relay Operators to Test IPv6 Addresses Discovery assigned 0.5
#33768 Make tor_inet_pton() handle bad addresses consistently on Windows assigned dgoulet 1
#32720 How much bandwidth does a user use to bootstrap and maintain dir info? How has that changed over time? closed nickm ahf
#33073 Write a proposal for Tor Relays to Automatically Find their IPv6 Address closed teor 2 3.5
#33091 Remove redundant checks in ip_address_changed() closed teor 0.1 0.1
#33679 Make sure every address function that takes for_listening supports IPv6 closed MrSquanchee 0.5 0.3 dgoulet
#33789 Before making changes, move router pick address functions to their own C file closed dgoulet 1 nickm
#5940 Figure out own IPv6 address new
#33237 Prop 312: 3.2.2. Stop Directory Authorities Resolving *Port Hostnames new 1
#33248 Prop 312: 3.5.5. Detailed Address Resolution Logs new 0.5

O1.3 Integration test Tor relays over IPv6 using chutney

Ticket Summary Status Owner Points Actual Points Reviewer
#33231 Prop 311: 6.3. Test Legacy Relays Accept IPv6 Extends using Chutney assigned 1
#33598 chutney does not fail on some SOCKS errors assigned c 1
#4631 Idea to make consensus voting more resistant closed teor 0.5 0.2 nickm
#28208 Run bridges+hs-v23 for make test-network closed teor
#32792 Copy chutney CI diagnostics to Tor's chutney job closed teor 0.1 0.3 nickm
#33194 Sort Travis jobs in speed order closed teor
#33195 Require IPv6 tests in Travis CI closed teor 0.1 0.7 nickm
#33228 Prop 311: 6.1. Test IPv6 ORPort Reachability using Chutney closed teor 2
#33232 Test IPv4 Reachability using Chutney closed teor 2
#33250 Test IPv4 Address Detection using Chutney closed teor 1
#33251 Prop 312: 5.1. Test Relay IPv6 Addresses Discovery using Chutney closed teor 1
#33280 Add a "make test-network-ipv6" target, which runs IPv6 chutney networks closed teor
#33300 Add a basic IPv6 test to "make test-network" closed teor
#33302 Run bridges+hs-v23 as Chutney's default network closed teor 0.1 0.1 nickm
#33303 Travis: Only run IPv6 chutney tests on macOS closed teor
#33304 Chutney tries to convert empty pid string to integer closed 0.1 0.1
#33333 Add a mixed+hs-v23-ipv6 network to chutney closed teor 0.1 0.1 nickm
#33334 Add a mixed+hs-v23-ipv6 network to tor's test-network closed teor 0.2 0.3 nickm
#33353 Split chutney's diagnostics into a new script closed teor 0.2 0.2 nickm
#33358 Update dir-spec for consensus voting improvements closed teor 0.1 0.1 nickm
#33376 Update the networks in Chutney's CI to match Tor's new test-network* closed teor 0.1 0.1 nickm
#33379 Make chutney wait for all relays in the consensus before verifying closed teor 0.5 2.5 ahf
#33428 Make chutney check for relay microdescriptors before verifying closed teor 1 0.6 nickm
#33583 Stop setting AssumeReachable on chutney relays and bridges closed teor 0.5 0.3 ahf
#33595 Stop waiting for unchecked directory info closed 0.5
#33596 Fix or disable mixed+hs-v2 for Tor 0.3.5 closed 0.5
#33615 Wait for at least 60 seconds for 0.3.5 and earlier to bootstrap closed teor 0.2 0.5 ahf
#33675 Search microdescriptor files for relay ed25519 keys closed anuradha1904 0.5 0.2 teor
#33676 Stop waiting a set time for microdescriptors closed anuradha1904 0.5 teor
#33793 Avoid some race conditions when running chutney networks in series closed teor 0.3 0.3 ahf
#33918 Stop truncating IPv6 addresses in channel logs closed teor 0.1 0.1 ahf
#33957 Unexpected keyword argument 'bufsize' in subprocess.check_output() closed nickm
#33609 Check that onion services have successfully posted descriptors before verifying needs_review c 1 asn
#33825 Make Environ handle "in" and "get()" like a dict needs_revision 1
#33582 Make bridges wait until they have bootstrapped, before publishing their descriptor new 1
#34037 Make chutney check tor's logs for reachability self-test success new 2

O1.4 Measure the number of Tor relays that support IPv6 reachability checks

Ticket Summary Status Owner Points Actual Points Reviewer
#33262 Prop 313: 3. Write a Script that Counts IPv6 Relays in the Consensus assigned 1
#33268 Prop 313: 8.1. Test IPv6 Relay Consensus Counts on the Tor Network assigned 0.5
#33270 Prop 313: 8.1. Monitor IPv6 Relay Counts in the Consensus assigned 0.5
#33266 Prop 313: 7.2. Show IPv6 Relay Counts on Consensus Health new tom
#33269 Prop 313: 8.1. Check IPv6 Relay Consensus Counts Script new metrics-team 0.5

O1.5 Measure the number of connections, and consumed bandwidth, using IPv4 and IPv6

Ticket Summary Status Owner Points Actual Points Reviewer
#33263 Prop 313: 4. Collect IPv6 Bandwidth Stats on Relays and Bridges assigned 3
#33264 Prop 313: 5. Collect IPv6 Connection Stats on Relays assigned 5
#33265 Prop 313: 6. Update Directory Spec for IPv6 Stats assigned 0.5
#33272 Prop 313: 8.2. Test IPv6 Stats on the Tor Network assigned 0.5
#33159 Write a proposal for monitoring IPv6 closed teor 2 1
#33201 Tor relays ignore some local bytes in their statistics closed teor 0.1 0.1
#33214 ConnDirectionStatistics is off by default, but most relays report it closed 1
#33617 Add a BandwidthStatistics option and consensus parameter needs_revision MrSquanchee 1 asn
#33273 Prop 313: 8.2. Analyse and Monitor IPv6 Stats new metrics-team 3

Finished Sponsor 55 Tickets With No Objective

Ticket Summary Status Owner Points Actual Points Reviewer
#33056 Tor relays fail to understand /etc/resolv.conf ipv6 lines with % in them closed 1
#33222 Prop 311: 4.2. Implement IPv6 ORPort Reachability Self-Tests closed teor 6 4 nickm
#33227 Prop 311: 5.1. Update Tor Spec Relay Subprotocols closed teor 0.1 0.1 nickm
#33788 Check the return value of tor_inet_ntop() and tor_inet_ntoa() closed 1 nickm
#34200 Refactor tor's circuit path node selection checks closed teor 1 1.5 nickm
#34248 Declare HSIntro=5 in Tor's rust protover implementation closed 0.5 0.1 dgoulet
#34251 Fix edge case handling in Rust protover is supported closed 0.5 0.1 ahf

Total Time to complete this project

Capacity for the whole project:

  • 6 months of a network team engineer
  • 1.5 months of a metrics team engineer

Estimation:

  • Must-do Tickets estimated in 57 days
  • With 1 full time engineer in it is around 7 months
Last modified 5 months ago Last modified on Jun 2, 2020, 6:58:56 PM