📅 Historical Content Notice: This article was originally published in February 2018. While the concepts of pluggable transports remain valid, specific configuration steps and tools may have changed. Modern versions of Tor Browser include built-in support for meek and obfs4 transports. For current macOS configuration, refer to the official Tor Project documentation.

This article addresses a common issue faced by some users: the inability to connect to the Tor directory server after running brew install tor and tor. This failure prevents the further retrieval of relay nodes to establish a path within the Tor network.

Terminal showing Tor connection failure when unable to reach directory server after installation

To facilitate successful connections to the Tor directory server, the Tor Project developed several methods known as Pluggable Transports. These include obfs4 and meek, among others. Meek, in particular, repackages traffic to resemble HTTPS, making it harder to identify. Other methods interestingly repackage traffic to mimic Skype.

Diagram illustrating Tor pluggable transports including obfs4 and meek for circumventing censorship

Focusing on the Meek pluggable transport, this article guides you through the process of accessing the Tor directory server. After installing Tor with brew install tor, the next step

is to clone the Meek tool from the Tor Project’s Git repository:

git clone https://git.torproject.org/pluggable-transports/meek.git

Navigate to /meek/meek-client and execute make (ensure that Go is installed and resolve any package errors with the provided links). If successful, you will see a meek-client executable.

Terminal output showing successful make command execution creating meek-client executable

Move this meek-client executable to /usr/local/etc/tor.

File browser showing meek-client executable moved to /usr/local/etc/tor directory

The next step is to edit the Tor configuration file at /usr/local/etc/tor/torrc. This does not require sudo privileges. Add the following lines at the top of the file, specifying the use of a bridge, the bridge address (using Azure as an example), and the Meek plugin:

UseBridges 1
Bridge meek 0.0.2.0:3 url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com
ClientTransportPlugin meek exec ./meek-client --log meek-client.log

Save the changes to torrc. The final step is to run tor in the terminal.

Potential Errors

Even with correct settings, you might encounter errors preventing Tor from running:

Terminal displaying Tor error message that can be resolved by deleting log files

In such cases, try deleting the log files in /usr/local/etc/tor. This often resolves the issue.

References:

  1. List of Pluggable Transports
  2. Meek and Domain Fronting Presentation