summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/bug1090-general73
-rw-r--r--doc/tor.1.txt74
2 files changed, 131 insertions, 16 deletions
diff --git a/changes/bug1090-general b/changes/bug1090-general
new file mode 100644
index 0000000000..465631592c
--- /dev/null
+++ b/changes/bug1090-general
@@ -0,0 +1,73 @@
+ o Major features and bugfixes (node selection)
+
+ - Revise and unify the meaning of the ExitNodes, EntryNodes,
+ ExcludeEntryNodes, ExcludeExitNodes, ExcludeNodes, and
+ StrictNodes options. Previously, we had been ambiguous in
+ describing what counted as an "exit" node, and what operations
+ exactly "StrictNodes 0" would permit. This created confusion
+ when people saw nodes built through unexpected circuits, and
+ made it hard to tell real bugs from surprises. We now stipulate
+ that the intended behavior is:
+
+ . "Exit", in the context of ExitNodes and ExcludeExitNodes,
+ means a node that delivers user traffic outside the Tor
+ network.
+ . "Entry", in the context of EntryNodes and ExcludeEntryNodes,
+ means a node used as the first hop of a multihop circuit:
+ it doesn't include direct connections to directory servers.
+ . "ExcludeNodes" applies to all nodes.
+ . "StrictNodes" changes the behavior of ExcludeNodes only.
+ When StrictNodes is set, Tor should avoid all nodes listed
+ in ExcludeNodes, even when it will make user requests
+ fail. When StrictNodes is *not* set, then Tor should
+ follow ExcludeNodes whenever it can, except when it must
+ use an excluded node to perform self-tests, connect to a
+ hidden service, provide a hidden service, fulfill a .exit
+ request, upload directory information, or fetch directory
+ information.
+
+ Collectively, the changes to implement the behavior are a fix for
+ bug 1090.
+
+ - ExcludeNodes now takes precedence over EntryNodes and ExitNodes:
+ if a node is listed in both, it's treated as excluded.
+
+ - ExcludeNodes now applies to directory nodes: as a preference if
+ StrictNodes is 0, or an absolute requirement if StrictNodes is 1.
+ (Don't exclude all the directory authorities and set StrictNodes
+ to 1 unless you really want your Tor to break.)
+
+ - ExcludeNodes and ExcludeExitNodes now override exit enclaving.
+
+ - ExcludeExitNodes now overrides .exit requests.
+
+ - We don't use bridges from ExcludeNodes.
+
+ - When StrictNodes is 1:
+ . We now apply ExcludeNodes to hidden service introduction points
+ and to rendezvous points selected by hidden service users.
+ This can make your hidden service less reliable: use it with
+ caution!
+ . If we have used ExcludeNodes on ourself, do not try self-tests.
+ . If we have excluded all the directory authorities, we will
+ not even try to upload our descriptor if we're a server.
+ . Do not honor .exit requests to an excluded node.
+
+ - Remove a misfeature that caused us to ignore the Fast/Stable flags
+ if ExitNodes was set. Bugfix on 0.2.2.7-alpha.
+
+ - When the set of permitted nodes changes, we now remove any
+ mappings introduced via TrackExitHosts to now-excluded nodes.
+ Bugfix on 0.1.0.1-rc.
+
+ - We never cannibalize a circuit that had excluded nodes on it,
+ even if StrictNodes is 0. Bugfix on 0.1.0.1-rc.
+
+ - Improve log messages related to excluded nodes.
+
+ - Revert a change where we would be laxer about attaching streams to
+ circuits than when building the circuits. This was meant to
+ prevent a set of bugs where streams were never attachable, but our
+ improved code here should make this unnecessary. Bugfix on
+ 0.2.2.7-alpha.
+
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index f1734d2016..866a702e51 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -489,32 +489,74 @@ The following options are useful only for clients (that is, if
**ExcludeNodes** __node__,__node__,__...__::
A list of identity fingerprints, nicknames, country codes and address
- patterns of nodes to never use when building a circuit. (Example:
- ExcludeNodes SlowServer, $ EFFFFFFFFFFFFFFF, \{cc}, 255.254.0.0/8)
+ patterns of nodes to avoid when building a circuit.
+ (Example:
+ ExcludeNodes SlowServer, $ EFFFFFFFFFFFFFFF, \{cc}, 255.254.0.0/8) +
++
+ By default, this option is treated as a preference that Tor is allowed
+ to override in order to keep working.
+ For example, if you try to connect to a hidden service,
+ but you have excluded all of the hidden service's introduction points,
+ Tor will connect to one of them anyway. If you do not want this
+ behavior, set the StrictNodes option (documented below). +
++
+ Note also that if you are a relay, this (and the other node selection
+ options below) only affects your own circuits that Tor builds for you.
+ Clients can still build circuits through you to any node. Controllers
+ can tell Tor to build circuits through any node.
+
**ExcludeExitNodes** __node__,__node__,__...__::
A list of identity fingerprints, nicknames, country codes and address
- patterns of nodes to never use when picking an exit node. Note that any
+ patterns of nodes to never use when picking an exit node---that is, a
+ node that delivers traffic for you outside the Tor network. Note that any
node listed in ExcludeNodes is automatically considered to be part of this
- list.
+ list too. See also the caveats on the "ExitNodes" option below
-**EntryNodes** __node__,__node__,__...__::
- A list of identity fingerprints, nicknames and address
- patterns of nodes to use for the first hop in normal circuits. These are
- treated only as preferences unless StrictNodes (see below) is also set.
**ExitNodes** __node__,__node__,__...__::
A list of identity fingerprints, nicknames, country codes and address
- patterns of nodes to use for the last hop in normal exit circuits. These
- are treated only as preferences unless StrictNodes (see below) is also set.
+ patterns of nodes to use as exit node---that is, a
+ node that delivers traffic for you outside the Tor network. +
++
+ Note that if you list too few nodes here, or if you exclude too many exit
+ nodes with ExcludeExitNodes, you can degrade functionality. For example,
+ if none of the exits you list allows traffic on port 80 or 443, you won't
+ be able to browse the web. +
++
+ Note also that not every circuit is used to deliver traffic outside of
+ the Tor network. It is normal to see non-exit circuits (such as those
+ used to connect to hidden services, those that do directory fetches,
+ those used for self-tests, and so on) that end at a non-exit node. To
+ keep a node from being used entirely, see ExcludeNodes and StrictNodes. +
++
+ The ExcludeNodes option overrides this option: any node listed in both
+ ExitNodes and ExcludeNodes is treated as excluded. +
++
+ The .exit address notation, if enabled, overrides this option.
+
+**EntryNodes** __node__,__node__,__...__::
+ A list of identity fingerprints and nicknames of nodes
+ to use for the first hop in your normal circuits. (Country codes and
+ address patterns are not yet supported.) This includes all
+ circuits except for direct connections to directory servers. The Bridge
+ option overrides this option; if you have configured bridges and
+ UseBridges is 1, the Bridges are used as your entry nodes. +
++
+ The ExcludeNodes option overrides this option: any node listed in both
+ EntryNodes and ExcludeNodes is treated as excluded.
**StrictNodes** **0**|**1**::
- If 1 and EntryNodes config option is set, Tor will never use any nodes
- besides those listed in EntryNodes for the first hop of a normal circuit.
- If 1 and ExitNodes config option is set, Tor will never use any nodes
- besides those listed in ExitNodes for the last hop of a normal exit
- circuit. Note that Tor might still use these nodes for non-exit circuits
- such as one-hop directory fetches or hidden service support circuits.
+ If StrictNodes is set to 1, Tor will treat the ExcludeNodes option as a
+ requirement to follow for all the circuits you generate, even if doing so
+ will break functionality for you. If StrictNodes is set to 0, Tor will
+ still try to avoid nodes in the ExcludeNodes list, but it will err on the
+ side of avoiding unexpected errors. Specifically, StrictNodes 0 tells
+ Tor that it is okay to use an excluded node when it is *necessary* to
+ perform self-tests, connect to
+ a hidden service, provide a hidden service to a client, fulfill a .exit
+ request, upload directory information, or download directory information.
+ (Default: 0)
**FascistFirewall** **0**|**1**::
If 1, Tor will only create outgoing connections to ORs running on ports