[tahoe-lafs-trac-stream] [Tahoe-LAFS] #517: make tahoe Tor- and I2P-friendly

Tahoe-LAFS trac at tahoe-lafs.org
Tue Sep 8 18:52:19 UTC 2015


#517: make tahoe Tor- and I2P-friendly
-------------------------+-------------------------------------------------
     Reporter:  warner   |      Owner:  ioerror
         Type:           |     Status:  new
  enhancement            |  Milestone:  undecided
     Priority:  minor    |    Version:  1.2.0
    Component:  code-    |   Keywords:  privacy anonymity anti-censorship
  network                |  i2p tor-protocol usability
   Resolution:           |
Launchpad Bug:           |
-------------------------+-------------------------------------------------

Comment (by warner):

 From today's meeting, folks seemed comfortable with the following
 tahoe.cfg syntax to configure the client side:

 {{{
 [node]
 anonymous = true

 [connections]
 tor.socks-proxy = HOST:PORT
 tor.(otherstuff)=??

 tcp.socks-proxy = HOST:PORT

 i2p.connect-proxy = URL
 }}}

 The presence of `[connections]tor.socks-proxy=` will cause Tahoe to
 install a Foolscap connection plugin that handles FURL connection-hints
 which begin with `tor:` by sending them to the given SOCKS5 proxy. The
 presence of `tcp.socks-proxy=` makes it remove all plugins and then
 install a similar plugin that handles `tcp:` connection hints. And the i2p
 plugin is similar, but uses an HTTP "CONNECT" proxy instead of SOCKS,
 since apparently that's how the I2P client does it.

 If `[node]anonymous` is true, we'll enforce two things, as per #1010:

 * `[node]tub.location` does not contain "AUTO"
 * `[connections]tcp.socks-proxy` is set

 (We could make this stronger: require tub.location to only contain `tor:`
 or `i2p:` hints, require the hostnames in tub.location to end in `.onion`
 or `.i2p`, and maybe require the tcp.socks-proxy to point at 127.0.0.1
 instead of some potentially-exterior host. But for now I think these two
 are sufficient)

 We'd like to allow tub.location to be empty. We need to make sure Foolscap
 can handle that (on both server and client sides), and then eventually we
 want `tahoe create-client` to leave tub.location and tub.port (meaning
 "don't listen at all").

 For this first step, we'll just do the client side, and only in tahoe.cfg.
 This should be enough to:

 * use a previously-configured (and running) Tor/I2P client
 * manually configure Tor/I2P to forward inbound connections to a tahoe
 server
 * advertise `tor:` or `i2p:` connection hints (via `tub.listen`)
 * utilize `tor:` and `i2p:` connection hints from others

 In a second phase, we'll use the `tor.(otherstuff)` fields (which might
 not want to live in `[connections]`, I dunno) to launch a Tor daemon at
 node startup (maybe using a pre-configured base directory under
 `~/.tahoe/`, maybe with a config file that's built from the tahoe.cfg
 options). Then in the third phase, we make changes to the `tahoe create-
 client`/`tahoe create-node` arguments, to configure that Tor daemon (and
 allocate onion servers, etc).

 But for now, I think these tahoe.cfg changes will enable manual Tor/I2P
 setup without needing to figure out the `--tor-only` / `--listen-on-tor` /
 etc arguments just yet.

--
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/517#comment:34>
Tahoe-LAFS <https://Tahoe-LAFS.org>
secure decentralized storage


More information about the tahoe-lafs-trac-stream mailing list