diff --git a/config/example.yaml b/config/example.yaml index 34a543b..81e5c20 100644 --- a/config/example.yaml +++ b/config/example.yaml @@ -75,8 +75,11 @@ chain: # newnym_interval: 0 # periodic NEWNYM (seconds, 0 = manual only) # Multi-Tor round-robin -- distribute traffic across multiple Tor nodes. -# When present, the first hop in each listener's chain is replaced at -# connection time by round-robin selection from this list. +# When present, the first hop in each listener's chain is REPLACED at +# connection time by round-robin selection from this list. The first hop +# specified in each listener's chain acts as a fallback only; tor_nodes +# takes precedence for both client traffic and pool health tests. +# Connection pools are pre-warmed for every node listed here. # tor_nodes: # - socks5://10.200.1.1:9050 # - socks5://10.200.1.254:9050 @@ -110,7 +113,7 @@ chain: # - localhost # exact hostname # - .local # domain suffix # chain: -# - socks5://127.0.0.1:9050 +# - socks5://127.0.0.1:9050 # first hop (overridden by tor_nodes) # - [pool:clean, pool:mitm] # random choice per connection # - [pool:clean, pool:mitm] # independent random choice # diff --git a/src/s5p/server.py b/src/s5p/server.py index 09f069a..e3290e8 100644 --- a/src/s5p/server.py +++ b/src/s5p/server.py @@ -208,6 +208,7 @@ async def _handle_client( else: effective_chain = list(listener.chain) fhp = first_hop_pool + # tor_nodes round-robin overrides the listener's first hop if tor_rr and effective_chain: node = tor_rr.next() effective_chain[0] = node