Commit Graph

7098 Commits

Author SHA1 Message Date
Brian Warner
9057c7301c incorporate dawuud's feedback
* remove anonymity-roadmap
* remove old torsocks section
* minor edits
2016-08-30 08:55:09 -07:00
Brian Warner
f54d2a81a8 fix TOC, remove empty "Legacy I2P" section 2016-08-30 08:55:09 -07:00
Brian Warner
327bef3383 update tor/i2p docs to match current config syntax
This removes the section that describes automatic configuration using
transport-agnostic endpoint-centric tub.port strings. That was the
approach where tub.port used "onion:80:hiddenServiceDir=PATH", and
Foolscap was able to query the generated Listener to find out what
address it was supposed to advertise. We considered this for a long
time, but in the end decided to use a more static approach, where
foolscap/tahoe never try to guess it's location: Tahoe always requires
tub.location= to be set.

When we get automatic configuration implemented, it'll be a simple CLI
argument, something like "tahoe create-server --listen=tor".

Instead, this document now explains how to configure Tor to create the
hidden service, then how to copy the generated .onion address into the
tahoe config.

This also removes a lot of other text that seems irrelevant now, and
refers the user to the tahoe.cfg docs (configuration.rst) instead of
including all the `[tor]`/`[i2p]` docs inline.

Closes ticket:2815
2016-08-30 08:55:09 -07:00
str4d
52e35852b1 Update connection config docs to match the current ticket:517 syntax 2016-08-30 08:55:09 -07:00
str4d
f075fa0e85 Remove references to closed tickets 2016-08-30 08:55:09 -07:00
str4d
21013284c9 Improved section on performance and security issues 2016-08-30 08:55:09 -07:00
str4d
24beb033d6 Update content to match current design 2016-08-30 08:55:09 -07:00
str4d
1edb6331c1 [node]anonymize -> [node]anonymous 2016-08-30 08:55:09 -07:00
str4d
3661fc72cf Updated I2P content 2016-08-30 08:55:08 -07:00
str4d
aa8de0737c ToC and headings 2016-08-30 08:55:08 -07:00
str4d
0fdae0b96a Configuration details 2016-08-30 08:55:08 -07:00
str4d
d09173cbf7 Expanded explanation of [node]anonymize 2016-08-30 08:55:08 -07:00
str4d
8cc2307d80 Spelling, rST layout fixes 2016-08-30 08:55:08 -07:00
str4d
1a3f4f2f35 I2P information 2016-08-30 08:55:08 -07:00
Daira Hopwood
8d1fa17d70 Add more info to docs about usage with tor 2016-08-30 08:55:08 -07:00
David Stainton
cb44f883e5 Fix formatting 2016-08-30 08:55:08 -07:00
David Stainton
4f0b7e0f83 Removed I2P ticket info because it belongs in a trac ticket 2016-08-30 08:55:08 -07:00
Daira Hopwood
3126d49d32 Rename tor.rst to anonymity-configuration.rst.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2016-08-30 08:55:08 -07:00
str4d
f3bc270a4e Changes required for safe txi2p use 2016-08-30 08:55:08 -07:00
David Stainton
832a798374 Fix formatting 2016-08-30 08:55:08 -07:00
David Stainton
3242a67c3f Add anonymity roadmap 2016-08-30 08:55:08 -07:00
David Stainton
ce889d5834 Change option name to anonymize for ticket #1010 2016-08-30 08:55:08 -07:00
Daira Hopwood
ed38d69302 Add more details in the Tor integration section 2016-08-30 08:55:08 -07:00
Daira Hopwood
92c908d332 Attempt to fix formating for torsocks section 2016-08-30 08:55:08 -07:00
David Stainton
2a82c2c63c Add more Torsocks Tahoe Tor usage documentation 2016-08-30 08:55:08 -07:00
David Stainton
5859a17efc Add legacy torsocks usage 2016-08-30 08:55:08 -07:00
David Stainton
9a6fe0edbd Minor corrections of index and indention 2016-08-30 08:55:08 -07:00
David Stainton
856f4ce266 Articulated more configuration subtleties 2016-08-30 08:55:08 -07:00
David Stainton
39820821ce Minor cleanup and added some links 2016-08-30 08:55:08 -07:00
David Stainton
02899f7e59 Add Tor usage and configuration documentation
Written by Zooko and I.
We need to add more technical citations and have it
reviewed for inaccuracies by Tor developers.
2016-08-30 08:55:08 -07:00
Brian Warner
fea8b627dd if tub.port is empty, don't listen
Updated config docs. Added errors if we're not listening but were told
to enable storage, helper, or if we're the Introducer server.

closes ticket:2816
2016-08-29 22:28:55 -07:00
Brian Warner
2d8a1e865b docs/config: use "#" to number sections
so I don't have to renumber everything when inserting/removing a
section.. wish I knew about this .rst trick earlier
2016-08-29 18:16:31 -07:00
Brian Warner
2d358f2e35 Disable foolscap "gifts"
"gifts" are third-party references (where Alice sends Bob a reference to
Carol, and Carol lives in a different Tub than either Alice or Bob).
Tahoe doesn't currently use these, and they make it possible for e.g. a
server to provoke a client into making a connection to an IP address of
the server's choosing. If the client isn't configured otherwise, this
would use raw TCP (revealing the client's IP address) even if the
connection to the server used Tor.

A connection policy of `tcp: tor` would block this, but it seems like a
good idea to disable gifts entirely.

closes ticket:2810
2016-08-28 18:15:30 -07:00
Brian Warner
095120112d Merge 2788-connection-handlers: add Tor/I2P support
This adds client-side support for automatically connecting to Tor and
I2P -hosted servers (when the server advertises a "tor:" or "i2p:"
-style connection hint, and when the necessary extra libraries are
installed, and when a Tor/I2P daemon is running and reachable at the
default location).

The new `[connections]` section of `tahoe.cfg` can include `tcp: tor` to
make all TCP connections use Tor instead. This ought to hide the
client's IP address from servers and the Introducer.

The new `[tor]` and `[i2p]` sections of `tahoe.cfg` will control how
Tor/I2P connections are made (whether to spin up a new Tor daemon, what
port to use to connect to an existing one, etc). `configuration.rst`
explains the possible syntax. Note that only the default I2P connection
method is implemented in Foolscap-0.12.2, but not the alternatives, so
many options that are legal syntax for `tahoe.cfg` will not work yet.

It also enables the `connections` section of `private/servers.yaml` to
override the connection-handler mapping.

refs ticket:517
closes ticket:2788
2016-08-28 18:06:15 -07:00
Brian Warner
a099b9237d tor: socks.port is now a (restricted) endpoint string
Foolscap has limitations that prevent us from accepting anything but a
TCP endpoint, but that will change in the future, so make the tahoe.cfg
syntax accept an endpoint, but then reject non-TCP ones. See the ticket
for details: refs ticket:2813.

This depends upon the new `foolscap.connections.tor.socks_port(host,
port)` API in foolscap-0.12.2, so it bumps the dependency to that (the
previous commit depended upon 0.12.1, but I hadn't gotten around to
updating the dep before now).
2016-08-28 16:30:31 -07:00
Brian Warner
bc079a71eb implement+test I2P setup
Note that many of the Foolscap handler-creation functions are still
stubbed out, so Tahoe won't be able to honor the full range of config
syntax until foolscap support is complete.
2016-08-28 03:16:43 -07:00
Brian Warner
15e5ca0e99 exercise TCP/Tor-related tahoe.cfg parsing
This exercises everything about _make_tcp_handler() and
_make_tor_handler() except for when txtorcon cannot be imported.
2016-08-28 03:16:40 -07:00
Brian Warner
eb230d1e5f setup.py: add 'tox' and 'i2p' extras
Now you can do `pip install tahoe-lafs[tor]` to get tor support.

The necessary support libraries are also installed with `[test]`, so
unit tests can rely upon importing txtorcon and friends.
2016-08-28 02:42:51 -07:00
Brian Warner
c56a0a4ba9 fix unicode handling in server_id from YAML
YAML, like JSON, is all-unicode. StorageFarmBroker.set_static_servers()
is defined to take an all-unicode dictionary (the "storage:" key from
private/servers.yaml), so the server_id keys it gets will be unicode.
NativeStorageServer is defined to accept server_ids which are bytes (at
least it is now). The tests were only passing bytes into
set_static_servers(), whereas a real launch passed unicode in, causing a
problem when NativeStorageServer tried to base32.a2b() the pubkey and
choked on the unicode it received.

This fixes set_static_servers() to convert the server_id to bytes, and
changes NativeStorageServer to assert that it gets bytes. It also fixes
the test to match real usage more closely.
2016-08-28 02:42:51 -07:00
Brian Warner
3cc8daf5bd implement full range of Tor handlers 2016-08-28 02:42:47 -07:00
Brian Warner
73d5376b6a Implement basic connection handlers (tor/i2p)
The node now attempts to create Tor/I2P connection handlers (if the
right libraries are available), and will use them for tor/i2p FURL hints
by default. For now it only creates default handlers: there is not yet
any code to interpret the `[tor]`/`[i2p]` sections of tahoe.cfg which
would let you override that process.

The node also parses the `[connections]` section, allowing `tcp: tor` to
use Tor for all outbound TCP connections. It defaults to `tcp: tcp`, of
course.

Static storage-server connections will now honor the `connections:`
overrides in `servers.yaml`, allowing specific servers to use TCP where
they would normally be restricted to Tor.

refs ticket:2788
refs ticket:517
2016-08-28 02:41:44 -07:00
Brian Warner
2db38e0cf3 document tor/i2p/connections 2016-08-28 02:41:44 -07:00
Brian Warner
30b421d48b test_client: improve coverage slightly 2016-08-28 02:39:39 -07:00
Brian Warner
cac99569e9 factor out "Tub maker"
This adds Node._create_tub(), which knows how to make a Tub with all the
right options and connection handlers that were specified in
tahoe.cfg (the connection handlers are disabled for now, but they'll get
implemented soon).

The new Node.create_main_tub() calls it. This main Tub is used:

* to connect to the Introducer
* to host the Helper (if enabled)
* to host the Storage Server (if enabled)

Node._create_tub() is also passed into the StorageFarmBroker, which
passes it into each NativeStorageServer, to create the (separate) Tub
for each server connection. _create_tub knows about the options, and
NativeStorageServer can override the connection handlers. This way we
don't need to pass tub options or default handlers into Client,
StorageFarmBroker, or NativeStorageServer.

A number of tests create NativeStorageServer objects: these were updated
to match the new arguments. test_storage_client was simplified because
we no longer need to mock out the Tub() constructor.
2016-08-27 17:36:55 -07:00
Brian Warner
8cf53d2d12 derive permutation seed from pubkey/server_id 2016-08-27 13:08:18 -07:00
Brian Warner
386edeb405 Merge 2788-load-static-servers: add servers.yaml
Closes tahoe-lafs/tahoe-lafs#319 (in rebased form, with some additional
tests and better docs)

refs ticket:2788
2016-08-27 11:47:03 -07:00
Brian Warner
663e39593b static servers: tolerate missing nickname/versions
A minimally-defined static server only specifies server_id,
anonymous-storage-FURL, and permutation-seed-base32. But the WUI Welcome
page wouldn't render (it raised an exception) without also defining
nickname and version. This allows those values to be missing.
2016-08-27 11:34:32 -07:00
Brian Warner
859ce66a03 document private/servers.yaml (static servers) 2016-08-27 11:34:32 -07:00
Brian Warner
d75b9f822a Improve loading of static servers
This follows the latest comments in ticket:2788, moving the static
server definitions from "connections.yaml" to "servers.yaml". It removes
the "connections" and "introducers" blocks from that file, leaving it
responsible for just static servers (I think connections and introducers
can be configured from tahoe.cfg).

This feeds all the static server specs to the StorageFarmBroker in a
single call, rather than delivering them as simulated introducer
announcements. It cleans up the way handlers are specified too (the
handler dictionary is ignored, but that will change soon).
2016-08-26 18:05:03 -07:00
Brian Warner
f23660e178 NativeStorageServer: create with server_id, not key_s
They're the same thing, but knowing that is the responsibility of the
caller, not NativeStorageServer. Try to normalize on "server_id" as the
spelling. Remove support for missing key_s, now that we require V2
introductions.
2016-08-26 18:04:31 -07:00