There are applications where private relays, not listed in public consensus directories, would perhaps be useful. For example, one might use four-relay circuits with private entry guards and exit relays.

In How to create a private exit node?, weasel - Peter Palfrader notes: "The routing protocol allows for [private exit nodes], but there is no support in Tor or its directory layer for what you ask." However, I see in the manpage:

PublishServerDescriptor 0|1|v1|v2|v3|bridge,…

This option specifies which descriptors Tor will publish when acting as a relay. You can choose multiple arguments, separated by commas.

If this option is set to 0, Tor will not publish its descriptors to any directories. (This is useful if you’re testing out your server, or if you’re using a Tor controller that handles directory publishing for you.) Otherwise, Tor will publish its descriptors of all type(s) specified. The default is "1", which means "if running as a server, publish the appropriate descriptors to the authorities".

So if I set PublishServerDescriptor 0 in a relay, it won't appear in any directories, right? But a client can still specify it as an exit, right?

Also, in that case, will information about my relay be forwarded beyond any adjacent relays in circuits specified by clients?

And just to be clear, is it true that none of the considerations discussed in The lifecycle of a new relay apply to unlisted relays?

The entry-guard piece seems trivial: bridges, perhaps obfuscated. But there is some ambiguity. I see in the manpage:

BridgeRelay 0|1

Sets the relay to act as a "bridge" with respect to relaying connections from bridge users to the Tor network. It mainly causes Tor to publish a server descriptor to the bridge database, rather than publishing a relay descriptor to the public directory authorities.

So if I set PublishServerDescriptor 0 and BridgeRelay 1 in a relay, will it be usable as a bridge, and yet not appear in any public directory?

For using it as a bridge, I see in the manpage:

Bridge [transport] IP:ORPort [fingerprint]

When set along with UseBridges, instructs Tor to use the relay at "IP:ORPort" as a "bridge" relaying into the Tor network. If "fingerprint" is provided (using the same format as for DirAuthority), we will verify that the relay running at that location has the right fingerprint. We also use fingerprint to look up the bridge descriptor at the bridge authority, if it’s provided and if UpdateBridgesFromAuthority is set too.

If UpdateBridgesFromAuthority is not set, will the Tor client check the fingerprint by directly accessing the bridge, without "look[ing] up the bridge descriptor at the bridge authority"? In other words, will the client use bridges that aren't in the bridge authority?


By definition bridge relays are Tor relays that aren't listed in the main Tor directory. So if you set:

BridgeRelay 1
PublishServerDescriptor 0

this will cause your relay to not publish anywhere. This could be useful for private bridges.

If you set:

BridgeRelay 1
PublishServerDescriptor bridge

your relay descriptor will be publised to the bridge authorities rather than to the default authorities.

Also if you set:

UpdateBridgesFromAuthority 1

Tor will try querying the bridge authority first for bridges where Tor knows a digest (if Tor only knows an IP address and ORPort, then the only option is a direct query). If it is not set, then the bridge descriptors will be fetched by going directly to the bridge and asking for /tor/server/authority

As of Tor, if the user attempts to fetch a descriptor from the bridge authority and it returns a 404 not found, the user will automatically fall back to trying a direct query. Therefore it is recommended that bridge users always set UpdateBridgesFromAuthority, since at worst it will delay their fetches a little bit and notify the bridge authority of the identity fingerprint (but not location)of their intended bridges.

You will find more information in the Tor bridges specification

Your Answer

