From 5a563b38d5e173664b39ac75738db1a416cf018e Mon Sep 17 00:00:00 2001 From: Jim Newsome Date: Wed, 9 Feb 2022 09:59:51 -0600 Subject: [PATCH] Use onion services --- .gitlab-ci.yml | 13 +++++++++++++ simulate.py | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2c8d869..3a7698a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -78,6 +78,9 @@ variables: description: "Scaling factor for background traffic, relative to the tmodel. Generally ought to be tuned s.t. the 'goodput' graph in the final results match today's tor network. See https://gitlab.torproject.org/jnewsome/sponsor-61-sims/-/issues/2#note_2751926" + PL_ONION_SERVICE_USER_SCALE: + value: '' + description: "Scaling factor for onion service users (doesn't change per-user load)" # Default suitable for real results is 60m. # Using 31m for faster iteration, (and slightly past a 5m mark to get latest consensus) PL_SIM_TIME: @@ -885,6 +888,16 @@ workflow: PL_TOR_REPO: 'https://gitlab.torproject.org/mikeperry/tor.git' PL_TOR_BRANCH: 'nocmux-ss50-icw2-newma10d2-delta4-mr525base' PL_TOR_COMMIT: '8a835c5af0132aa0d433cfb7b945322c74ef6cbe' + - if: '$PL_PRESET == "baseline-2022-03-rc2"' + variables: + PL_SLUG: 'baseline-2022-03-rc2' + PL_TOR_BRANCH: 'main' + # tor-0.4.7.3-alpha + PL_TOR_COMMIT: 'a2971919ade15e077a0744772708d11f0332dd11' + PL_SHADOW_COMMIT: '9eef66b4da7c78c31fa7d93c2982311a55f0abd4' + # Supports hidden services + PL_TORNETTOOLS_COMMIT: 'fa36f57ebc4db81559132c5cd8cd7bfc2f92406f' + PL_ONION_SERVICE_USER_SCALE: '1.0' # Don't run an unrecognized preset" - when: never diff --git a/simulate.py b/simulate.py index c079049..8957032 100644 --- a/simulate.py +++ b/simulate.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 +import glob import logging import os import random @@ -77,7 +78,12 @@ def apply_bandwidth_overrides(shadow_config_path, overrides): host_config['bandwidth_down'] = down yaml.dump(config, stream=open(shadow_config_path, 'w')) -def main(): +def glob1(pattern): + rv = glob.glob(pattern) + assert(len(rv) == 1) + return rv[0] + +def main(): # Generate sim config run('''apt-get install -y bsdmainutils libevent-dev libssl-dev python3 python3-pip python3-pyparsing wget xz-utils zlib1g-dev''') run('''pip3 install -r jobs/src/tornettools/requirements.txt''') @@ -105,7 +111,27 @@ def main(): run('''while [ ! -f /var/lib/tor/simdir/hostname ]; do echo "Waiting for simdir service"; sleep 1; done''') run('''echo simdir service: $(cat /var/lib/tor/simdir/hostname)''') - run('''tornettools --seed $TRIAL_NUM generate jobs/network-data/relayinfo_staging_*.json jobs/network-data/userinfo_staging_*.json jobs/network-data/networkinfo_staging.gml jobs/network-data/tmodel --network_scale $SCALE --prefix $SIMDIR --tor jobs/opt/tor/bin/tor --torgencert jobs/opt/tor/bin/tor-gencert --process_scale $PROCESS_SCALE --load_scale $LOAD_SCALE''') + params = [ + 'tornettools', + '--seed', getenv('TRIAL_NUM'), + 'generate', + glob1('jobs/network-data/relayinfo_staging_*.json'), + glob1('jobs/network-data/userinfo_staging_*.json'), + 'jobs/network-data/networkinfo_staging.gml', + 'jobs/network-data/tmodel', + '--network_scale', getenv('SCALE'), + '--prefix', getenv('SIMDIR'), + '--tor', 'jobs/opt/tor/bin/tor', + '--torgencert', 'jobs/opt/tor/bin/tor-gencert', + '--process_scale', getenv('PROCESS_SCALE'), + '--load_scale', getenv('LOAD_SCALE'), + ] + # Optionally add the --onion_service_user_scale flag. The baseline version + # of tornettools doesn't support this flag, so we don't add it by default. + onion_service_user_scale = getenv('PL_ONION_SERVICE_USER_SCALE') + if onion_service_user_scale != '': + params.extend(['--onion_service_user_scale', onion_service_user_scale]) + run(params) # Run simulation run('''apt-get install -y libevent-2.1-7 libssl1.1 zlib1g libglib2.0-0 libigraph0v5 libprocps8 stow sysstat python3 python3-pip''') @@ -140,7 +166,11 @@ def main(): # Enable guards. # FIXME: Also need to set process scale to 1.0. See # https://gitlab.torproject.org/jnewsome/sponsor-61-sims/-/issues/5 - run('''sed -i 's/UseEntryGuards.*/UseEntryGuards 1/' $SIMDIR/conf/tor.client.torrc''') + run(['sed', '-i', 's/UseEntryGuards.*/UseEntryGuards 1/', f"{getenv('SIMDIR')}/conf/tor.client.torrc"]) + # Also enable guards for onionservices, if using a tornettools that supports onionservices. + if os.path.exists(f"{getenv('SIMDIR')}/conf/tor.onionservice.torrc"): + run(['sed', '-i', 's/UseEntryGuards.*/UseEntryGuards 1/', f"{getenv('SIMDIR')}/conf/tor.onionservice.torrc"]) + # Override authority configs with recent consensus params, from # https://consensus-health.torproject.org/#consensusparams: -- GitLab