Version 1383 (modified by phobos, 8 years ago) (diff)

add vidalia w2k bug

Table of Contents

  1. General
    1. What is Tor?
    2. How is Tor different from other proxies?
      1. Doesn't the first server see who I am?
      2. Can't the third server see my traffic?
    3. What programs can I use with Tor?
    4. Can people share files anonymously through Tor?
    5. Why is it called Tor?
    6. Is there a backdoor in Tor?
    7. Can I distribute Tor on my magazine's CD?
    8. How can I get an answer to my Tor support mail?
    9. Why is Tor slow?
    10. What would The Tor Project do with more funding?
    11. How many people use Tor? How many relays or exit nodes are …
  2. Compilation and Installation
    1. How do I uninstall Tor?
    2. What are these ".asc" signature files in the dist/ directory?
    3. How do I compile Tor under Windows?
    4. Why does my Tor executable appear to have a …
    5. Is there a LiveCD or other bundle that includes Tor?
  3. Running Tor
    1. I'm supposed to "edit my torrc". What does that mean?
    2. How do I set up logging, or see Tor's logs?
    3. What log level should I use?
    4. Do I have to open all these outbound ports on my firewall?
    5. My Tor keeps crashing.
    6. I installed Tor and Polipo but it's not working.
    7. How can I tell if Tor is working, and that my …
    8. How do I use my browser for ftp with Tor?
    9. Will Torbutton be available for …
    10. Does Tor remove personal information from the data …
    11. I want to run my Tor client on a different computer than my applications.
    12. How often does Tor change its paths?
    13. Why does netstat show these outbound connections?
    14. Tor uses hundreds of bytes for every IRC line. I can't afford that!
    15. Can I control what nodes I use for entry/exit, or what country the …
    16. Google makes me solve a Captcha or tells me I have spyware installed.
    17. Gmail warns me that my account may have been compromised.
    18. Why does Google show up in foreign languages?
    19. How do I access Tor hidden services?
    20. My Internet connection requires an HTTP or SOCKS proxy.
    21. My firewall only allows a few outgoing ports.
    22. Is there a list of default exit ports?
    23. What should I do if I can't use an http proxy with my application?
    24. I keep seeing these warnings about SOCKS and DNS and information …
    25. How do I check if my application that uses SOCKS is …
    26. Tor/Vidalia prompts for a password at start
    27. Why do we need Polipo or Privoxy with Tor? Which …
    28. Vidalia doesn't work in Windows 2000 =
  4. Running a Tor relay
    1. How do I decide if I should run a relay?
    2. I'd run a relay, but I don't want to deal with abuse issues.
    3. Do I get better anonymity if I run a relay?
    4. Why doesn't my Windows (or other OS) Tor relay run well?
    5. [#Configureandrun So I can just configure a nickname and ORPort and …
    6. I want to upgrade/move my relay. How do I keep the same key?
    7. How do I run my Tor relay as an NT service?
    8. Can I run a Tor relay from my virtual server account?
    9. I want to run more than one relay.
    10. My relay is picking the wrong IP address.
    11. I don't have a static IP.
    12. I'm behind a NAT/Firewall
    13. My cable/dsl modem keeps crashing. What's going on?
    14. Why do I get portscanned more often when I run a Tor relay?
    15. I have more than one CPU. Does this help?
    16. Why is my Tor relay using so much memory?
    17. What bandwidth shaping options are available to Tor relays?
    18. Does BandwidthRate really work?
    19. How can I limit the total amount of bandwidth used by my Tor relay?
    20. Why does my relay write more bytes onto the network than it reads?
    21. Why can I not browse anymore after limiting bandwidth on my Tor relay?
    22. How can I make my relay accessible to people stuck behind restrictive …
    23. Can I install Tor on a central server, and have my clients connect to it?
    24. How do I provide a hidden service?
    25. Why is it better to provide a hidden service Web site with HTTP rather …
  5. Development
    1. Who is responsible for Tor?
    2. What do these weird version numbers mean?
    3. How do I set up my own private Tor network?
    4. How can I make my Java program use the Tor Network?
    5. What is libevent?
    6. What do I need to do to get a new feature into Tor?
  6. Anonymity and Security
    1. What protections does Tor provide?
    2. Can exit nodes eavesdrop on communications? Isn't that bad?
    3. What is Exit Enclaving?
    4. So I'm totally anonymous if I use Tor?
    5. Please explain Tor's public key infrastructure.
    6. Where can I learn more about anonymity?
    7. What's this about entry guard (formerly known as "helper") nodes?
    8. What about powerful blocking mechanisms?
    9. What attacks remain against onion routing?
    10. Does Tor resist "remote physical device fingerprinting"?
  7. Alternate designs that we don't do (yet)
    1. You should send padding so it's more secure.
    2. You should make every Tor user be a relay.
    3. You should transport all IP packets, not just TCP packets.
    4. You should hide the list of Tor relays, so people can't block the exits.
    5. You should let people choose their path length.
    6. You should split each connection over many paths.
    7. You should migrate application streams across circuits.
    8. You should let the network pick the path, not the client.
    9. You should use steganography to hide Tor traffic.
    10. Your default exit policy should block unallocated net blocks too.
    11. Exit policies should be able to block websites, not just IP addresses
    12. You should change Tor to prevent users from posting certain content.
    13. Tor should support IPv6.
  8. Abuse
    1. Doesn't Tor enable criminals to do bad things?
    2. How do I respond to my ISP about my exit relay?
    3. Info to help with police or lawyers questions about exit relays
  9. Comparison to related projects
    1. Onion Routing
    2. Freedom Network
    3. Freenet
    4. I2P
    5. Commercial one-hop proxies
    6. Open proxy aggregators
    7. Blossom

  • Copyright 2003-2006 Roger Dingledine
  • Copyright 2004-2005 Nick Mathewson
  • Copyright 2004 Douglas F. Calvert
  • Copyright 2004-2006 Peter Palfrader
  • Copyright 2005-2009 Andrew Lewman
  • Copyright 2007 Matt D. Harris
  • Copyright 2010 The Tor Project, Inc.

Distributed under the MIT license, see Legal Stuff? for a full text.


What is Tor?

The name "Tor" can refer to several different components.

The Tor software is a program you can run on your computer that helps keep you safe on the Internet. Tor protects you by bouncing your communications around a distributed network of relays run by volunteers all around the world: it prevents somebody watching your Internet connection from learning what sites you visit, and it prevents the sites you visit from learning your physical location. This set of volunteer relays is called the Tor network. You can read more about how Tor works on the overview page.

The Tor Project is a non-profit (charity) organization that maintains and develops the Tor software.

How is Tor different from other proxies?

A typical proxy provider sets up a server somewhere on the Internet and allows you to use it to relay your traffic. This creates a simple, easy to maintain architecture. The users all enter and leave through the same server. The provider may charge for use of the proxy, or fund their costs through advertisements on the server. In the simplest configuration, you don't have to install anything. You just have to point your browser at their proxy server. Simple proxy providers are fine solutions if you do not want protections for your privacy and anonymity online and you trust the provider from doing bad things. Some simple proxy providers use SSL to secure your connection to them. This may protect you against local eavesdroppers, such as those at a cafe with free wifi Internet.

Simple proxy providers also create a single point of failure. The provider knows who you are and where you browse on the Internet. They can see your traffic as it passes through their server. In some cases, they can see your encrypted traffic as they relay it to your banking site or to ecommerce stores. You have to trust the provider isn't doing any number of things, such as watching your traffic, injecting their own advertisements into your traffic stream, and isn't recording your personal details.

Tor passes your traffic through at least 3 different servers before sending it on to the destination. Tor does not modify, or even know, what you are sending into it. It merely relays your traffic, completely encrypted through the Tor network and has it pop out somewhere else in the world, completely intact. The Tor client is required because we assume you trust your local computer. The Tor client manages the encryption and the path chosen through the network. The relays located all over the world merely pass encrypted packets between themselves.

Doesn't the first server see who I am?

Possibly. A bad first of three servers can see encrypted Tor traffic coming from your computer. It still doesn't know who you are and what you are doing over Tor. It merely sees "This IP address is using Tor". Tor is not illegal anywhere in the world, so using Tor by itself is fine. You are still protected from this node figuring out who you are and where you are going on the Internet.

Can't the third server see my traffic?

Possibly. A bad third of three servers can see the traffic you sent into Tor. It won't know who sent this traffic. If you're using encryption, such as visiting a bank or e-commerce website, or encrypted mail connections, etc, it will only know the destination. It won't be able to see the data inside the traffic stream. You are still protected from this node figuring out who you are and if using encryption, what data you're sending to the destination.

What programs can I use with Tor?

There are two pieces to "Torifying" a program: connection-level anonymity and application-level anonymity. Connection-level anonymity focuses on making sure the application's Internet connections get sent through Tor. This step is normally done by configuring the program to use your Tor client as a "socks" proxy, but there are other ways to do it too. For application-level anonymity, you need to make sure that the information the application sends out doesn't hurt your privacy. (Even if the connections are being routed through Tor, you still don't want to include sensitive information like your name.) This second step needs to be done on a program-by-program basis, which is why we don't yet recommend very many programs for safe use with Tor.

Most of our work so far has focused on the Firefox web browser. The bundles on the download page automatically install the Torbutton Firefox extension if you have Firefox installed. As of version 1.2.0, Torbutton now takes care of a lot of the connection-level and application-level worries.

There are plenty of other programs you can use with Tor, but we haven't researched the application-level anonymity issues on them well enough to be able to recommend a safe configuration. Our wiki has a list of instructions for Torifying specific applications?. There's also a list of applications that help you direct your traffic through Tor. Please add to these lists and help us keep them accurate!

Can people share files anonymously through Tor?

File sharing (peer-to-peer/P2P) is widely unwanted in the Tor network and exit nodes are configured to block file sharing traffic by default. Tor is not really designed for it and file sharing through Tor excessively wastes everyone's bandwidth (slows down browsing) and is NOT anonymous!

However, there is an alternative anonymising network, which actually WELCOMES file sharing applications and has been designed for them too. If you use it for file sharing instead of Tor, you will help Tor get faster and you will get fast anonymous file sharing. The alternative network is I2P, which is very similar to Tor, but is designed primarily as a fast darknet, friendly to file sharing apps.

There are several file sharing applications for I2P, but one of them, iMule, has the advantage of being completely decentralized (unlike the I2P Bit Torrent clients, which currently depend on centralized tracker I2P-sites, whose webmasters censor some content). iMule does not use any edonkey servers; it uses the distributed and decentralized Kademlia-type network, so it cannot be shut down or censored.

I2P has some advantages over Tor and some disadvantages, which are nicely and fairly summarized at (keep your Tor installed if you want to browse www sites anonymously, because darknets like I2P are not good for that).

Why is it called Tor?

Because Tor is the onion routing network. When we were starting the new next-generation design and implementation of onion routing in 2001-2002, we would tell people we were working on onion routing, and they would say "Neat. Which one?" Even if onion routing has become a standard household term, Tor was born out of the actual onion routing project run by the Naval Research Lab.

(It's also got a fine translation from German and Turkish.)

Note: even though it originally came from an acronym, Tor is not spelled "TOR". Only the first letter is capitalized. In fact, we can usually spot people who haven't read any of our website (and have instead learned everything they know about Tor from news articles) by the fact that they spell it wrong.

Is there a backdoor in Tor?

There is absolutely no backdoor in Tor. Nobody has asked us to put one in, and we know some smart lawyers who say that it's unlikely that anybody will try to make us add one in our jurisdiction (U.S.). If they do ask us, we will fight them, and (the lawyers say) probably win.

We think that putting a backdoor in Tor would be tremendously irresponsible to our users, and a bad precedent for security software in general. If we ever put a deliberate backdoor in our security software, it would ruin our professional reputations. Nobody would trust our software ever again — for excellent reason!

But that said, there are still plenty of subtle attacks people might try. Somebody might impersonate us, or break into our computers, or something like that. Tor is open source, and you should always check the source (or at least the diffs since the last release) for suspicious things. If we (or the distributors) don't give you source, that's a sure sign something funny might be going on. You should also check the PGP signatures on the releases, to make sure nobody messed with the distribution sites.

Also, there might be accidental bugs in Tor that could affect your anonymity. We periodically find and fix anonymity-related bugs, so make sure you keep your Tor versions up-to-date.

Can I distribute Tor on my magazine's CD?


The Tor software is free software. This means we give you the rights to redistribute the Tor software, either modified or unmodified, either for a fee or gratis. You don't have to ask us for specific permission.

However, if you want to redistribute the Tor software you must follow our LICENSE. Essentially this means that you need to include our LICENSE file along with whatever part of the Tor software you're distributing.

Most people who ask us this question don't want to distribute just the Tor software, though. They want to distribute the Tor bundles, which typically include Polipo and Vidalia. You will need to follow the licenses for those programs as well. Both of them are distributed under the GNU General Public License. The simplest way to obey their licenses is to include the source code for these programs everywhere you include the bundles themselves. Look for "source" packages on the Vidalia page and the Polipo download page.

Also, you should make sure not to confuse your readers about what Tor is, who makes it, and what properties it provides (and doesn't provide). See our trademark FAQ for details.

Lastly, you should realize that we release new versions of the Tor software frequently, and sometimes we make backward incompatible changes. So if you distribute a particular version of the Tor software, it may not be supported — or even work — six months later. This is a fact of life for all security software under heavy development.

How can I get an answer to my Tor support mail?

There is no official support for Tor. Your best bet is to try the following:

  1. Read through this FAQ.
  2. Read through the documentation.
  3. Read through the OR-TALK Archives and see if your question is already answered.
  4. Join our irc channel and state the issue and wait for help.
  5. Send an email to tor-assistants at These are volunteers who may be able to help you but you may not get a response for days.

Why is Tor slow?

There are many reasons why the Tor network can be slow.

Before we answer, though, you should realize that Tor is never going to be blazing fast. Your traffic is bouncing through volunteers' computers in various parts of the world, and some bottlenecks and network latency will always be present. You shouldn't expect to see fast bandwidth through Tor.

But that doesn't mean that it can't be improved. The current Tor network is quite small compared to the number of people trying to use it, and many of these users don't understand or care that Tor can't currently handle file-sharing traffic load.

For the much more in-depth answer, see Roger's blog post on the topic, which includes both a detailed PDF and a video to go with it.

What can you do to help?

  • Configure your Tor to relay traffic for others. Help make the Tor network large enough that we can handle all the users who want privacy and security on the Internet.
  • Help us make Tor more usable. We especially need people to help make it easier to configure your Tor as a relay. Also, we need help with clear simple documentation to walk people through setting it up.
  • There are some bottlenecks in the current Tor network. Help us design experiments to track down and demonstrate where the problems are, and then we can focus better on fixing them.
  • Tor needs some architectural changes too. One important change is to start providing better service to people who relay traffic. We're working on this, and we'll finish faster if we get to spend more time on it.
  • Help do other things so we can do the hard stuff. Please take a moment to figure out what your skills and interests are, and then look at our volunteer page.
  • Help find sponsors for Tor. Do you work at a company or government agency that uses Tor or has a use for Internet privacy, e.g. to browse the competition's websites discreetly, or to connect back to the home servers when on the road without revealing affiliations? If your organization has an interest in keeping the Tor network working, please contact them about supporting Tor. Without sponsors, Tor is going to become even slower.
  • If you can't help out with any of the above, you can still help out individually by donating a bit of money to the cause. It adds up!

What would The Tor Project do with more funding?

We have about 2000 relays right now, pushing over 150 MB/s average traffic. We have several hundred thousand active users. But the Tor network is not yet self-sustaining.

There are six main development/maintenance pushes that need attention:

  • Scalability: We need to keep scaling and decentralizing the Tor architecture so it can handle thousands of relays and millions of users. The upcoming stable release is a major improvement, but there's lots more to be done next in terms of keeping Tor fast and stable.
  • User support: With this many users, a lot of people are asking questions all the time, offering to help out with things, and so on. We need good clean docs, and we need to spend some effort coordinating volunteers.
  • Relay support: the Tor network is run by volunteers, but they still need attention with prompt bug fixes, explanations when things go wrong, reminders to upgrade, and so on. The network itself is a commons, and somebody needs to spend some energy making sure the relay operators stay happy. We also need to work on stability on some platforms — e.g., Tor relays have problems on Win XP currently.
  • Usability: Beyond documentation, we also need to work on usability of the software itself. This includes installers, clean GUIs, easy configuration to interface with other applications, and generally automating all of the difficult and confusing steps inside Tor. We've got a start on this with the GUI Contest, but much more work remains — usability for privacy software has never been easy.
  • Incentives: We need to work on ways to encourage people to configure their Tors as relays and exit nodes rather than just clients. We need to make it easy to become a relay, and we need to give people incentives to do it.
  • Research: The anonymous communications field is full of surprises and gotchas. In our copious free time, we also help run top anonymity and privacy conferences like PETS. We've identified a set of critical Tor research questions that will help us figure out how to make Tor secure against the variety of attacks out there. Of course, there are more research questions waiting behind these.

We're continuing to move forward on all of these, but at this rate the Tor network is growing faster than the developers can keep up. Now would be an excellent time to add a few more developers to the effort so we can continue to grow the network.

We are also excited about tackling related problems, such as censorship-resistance.

However, this support is not enough to keep Tor abreast of changes in the Internet privacy landscape. Please donate to the project.

How many people use Tor? How many relays or exit nodes are there?

All this and more about measuring Tor can be found at the Tor Metrics Portal.

Compilation and Installation

How do I uninstall Tor?

This depends entirely on how you installed it and which operating system you have. If you installed a package, then hopefully your package has a way to uninstall itself. The Windows packages include uninstallers. The proper way to completely remove Tor, Vidalia, Torbutton for Firefox, and Polipo on any version of Windows is as follows:

  1. In your taskbar, right click on Vidalia (the green onion or the black head) and choose exit.
  2. Right click on the taskbar to bring up Task Manager. Look for tor.exe in the Process List. If it's running, right click and choose End Process.
  3. Click the Start button, go to Programs, go to Vidalia, choose Uninstall. This will remove the Vidalia bundle, which includes Tor and Polipo.
  4. Start Firefox. Go to the Tools menu, choose Add-ons. Select Torbutton. Click the Uninstall button.

If you do not follow these steps (for example by trying to uninstall Vidalia, Tor, and Polipo while they are still running), you will need to reboot and manually remove the directory "Program Files\Vidalia Bundle".

For Mac OS X, follow the uninstall directions.

If you installed by source, I'm afraid there is no easy uninstall method. But on the bright side, by default it only installs into /usr/local/ and it should be pretty easy to notice things there.

What are these ".asc" signature files in the dist/ directory?

These are PGP signatures, so you can verify that the file you've downloaded is exactly the one that we intended you to get.

Please read the verifying signatures page for details.

How do I compile Tor under Windows?

Try following the steps at tor-win32-mingw-creation.txt.

Note that you don't need to compile Tor yourself in order to use it. Most people just use the packages available on the download page.

Why does my Tor executable appear to have a virus or spyware?

Sometimes, overzealous Windows virus and spyware detectors trigger on some parts of the Tor Windows binary. Our best guess is that these are false positives — after all, the anti-virus and anti-spyware business is just a guessing game anyway. You should contact your vendor and explain that you have a program that seems to be triggering false positives. Or pick a better vendor.

In the meantime, we encourage you to not just take our word for it. Our job is to provide the source; if you're concerned, please do recompile it yourself.

Is there a LiveCD or other bundle that includes Tor?

Yes, there are a few. See the listing on the main page

Running Tor

I'm supposed to "edit my torrc". What does that mean?

Tor installs a text file called torrc that contains configuration instructions for how your Tor program should behave.

The location of your torrc file depends on the way you installed Tor.

  • On Windows, if you installed a Tor bundle with Vidalia, you can find your torrc file in the Start menu under Programs -> Vidalia Bundle -> Tor, or you can find it by hand in \Documents and Settings\username\Application Data\Vidalia\torrc. If you installed Tor without Vidalia, you can find your torrc in the Start menu under Programs -> Tor, or manually in either \Documents and Settings\Application Data\tor\torrc or \Documents and Settings\username\Application Data\tor\torrc.
  • On OS X, if you use Vidalia, edit ~/.vidalia/torrc, otherwise open your favorite text editor and load /Library/Tor/torrc
  • On Unix, if you installed a pre-built package, look for /etc/torrc or /etc/tor/torrc or consult your package's documentation.
  • Finally, if you installed from source, you may not have a torrc installed yet: look in /usr/local/etc/ and note that you may need to manually copy torrc.sample to torrc

The default torrc file should work fine for most Tor users. You will need to edit it if you want to start relaying traffic for others (that is, become a Tor relay). For other configuration options you can use, look at the Tor man page.

Once you've changed your torrc, you will need to restart Tor for the changes to take effect. (For advanced users on OS X and Unix, note that you actually only need to send Tor a HUP signal, not actually restart it.)

Remember, all lines beginning with # in torrc are treated as comments and have no effect on Tor's configuration.

How do I set up logging, or see Tor's logs?

If you installed a Tor bundle with Vidalia, then Vidalia has a window called "Message Log" that will show you Tor's log messages. You can click on "Settings" to see more details, or to save the messages to a file also. You're all set.

If you're not using Vidalia, you'll have to go find the log files by hand as described below.

By default, Tor logs to "standard out" (also knows as "stdout") at log-level notice. However, some Tor packages (notably the ones for OS X, Debian, Red Hat, etc) change the default logging so it logs to a file, and then Tor runs in the background.

If you're using a pre-packaged Tor, here are some likely places for your logs to go by default:

  • On Windows, there are no default log files currently. If you configure logging to a file in your torrc, they will show up in \username\Application Data\tor\log\ or \Application Data\tor\log\
  • On OS X, Debian, Red Hat, etc, the logs are in /var/log/tor/
  • If you compiled Tor from source, your logs will go to /usr/local/var/log/tor/, but only if you enable them in the torrc file.

If you want to change your logging setup, open your torrc in an editor.

Find the section (near the top of the file) which contains the following line:

##torrc go to stdout at level "notice" unless redirected by something else, like one of the below lines.

Now, assuming you want Tor to send complete debug, info, notice, warn, and err level messages to a file, append the following line to the end of the section:

Log debug file c:/program files/tor/debug.log

Replace "c:/program files/tor/debug.log" with a directory/filename for your Tor log.

If you also want Tor to output to stdout, append the following line to the section as well:

Log notice stdout

What log level should I use?

There are five log levels (also called "log severities") you might see in Tor's logs:

  • "err": something bad just happened, and we can't recover. Tor will exit.
  • "warn": something bad happened, but we're still running. The bad thing might be a bug in the code, some other Tor process doing something unexpected, etc. The operator should examine the message and try to correct the problem.
  • "notice": something the operator will want to know about.
  • "info": something happened (maybe bad, maybe ok), but there's nothing you need to (or can) do about it.
  • "debug": for everything louder than info. It is quite loud indeed.

Alas, some of the warn messages are hard for ordinary users to correct -- the developers are slowly making progress at making Tor automatically react correctly for each situation.

We recommend running at the default, which is "notice". You will hear about important things, and you won't hear about unimportant things.

Tor relays in particular should avoid logging at info or debug in normal operation, since they might end up recording sensitive information in their logs.

Do I have to open all these outbound ports on my firewall?

Tor may attempt to connect to any port that is advertised in the directory as an !ORPort (for making Tor connections) or a DirPort (for fetching updates to the directory). There are a variety of these ports, but many of them are running on 80, 443, 9001, and 9030.

So as a client, you could probably get away with opening only those four ports. Since Tor does all its connections in the background, it will retry ones that fail, and hopefully you'll never have to know that it failed, as long as it finds a working one often enough. However, to get the most diversity in your entry nodes -- and thus the most security -- as well as the most robustness in your connectivity, you'll want to let it connect to all of them.

If you really need to connect to only a small set of ports, see the FAQ entry on firewalled ports.

Note that if you're running as a Tor relay, you must allow outgoing connections to every other relay, and to anywhere your exit policy advertises that you allow. The cleanest way to do that is to simply allow all outgoing connections at your firewall. If you don't, clients will try to use these connections and things won't work.

My Tor keeps crashing.

We want to hear from you! There are supposed to be zero crash bugs in Tor. This FAQ entry describes the best way for you to be helpful to us. But even if you can't work out all the details, we still want to hear about it, so we can help you track it down.

First, make sure you're using the latest version of Tor (either the latest stable or the latest development version).

Second, make sure your version of libevent is new enough. We recommend at least libevent 1.3a.

Third, see if there's already an entry for your bug in the Tor bugtracker. If so, check if there are any new details that you can add.

Fourth, is the crash repeatable? Can you cause the crash? Can you isolate some of the circumstances or config options that make it happen? How quickly or often does the bug show up? Can you check if it happens with other versions of Tor, for example the latest stable release?

Fifth, what sort of crash do you get?

  • Does your Tor log include an "assert failure"? If so, please tell us that line, since it helps us figure out what's going on. Tell us the previous couple of log messages as well, especially if they seem important.
  • If it says "Segmentation fault - core dumped" then you need to do a bit more to track it down. Look for a file like "core" or "tor.core" or "core.12345" in your current directory, or in your Data Directory. If it's there, run "gdb tor core" and then "bt", and include the output. If you can't find a core, run "ulimit -c unlimited", restart Tor, and try to make it crash again. (This core thing will only work on Unix -- alas, tracking down bugs on Windows is harder. If you're on Windows, can you get somebody to duplicate your bug on Unix?)
  • If Tor simply vanishes mysteriously, it probably is a segmentation fault but you're running Tor in the background (as a daemon) so you won't notice. Go look at the end of your log file, and look for a core file as above. If you don't find any good hints, you should consider running Tor in the foreground (from a shell) so you can see how it dies. Warning: if you switch to running Tor in the foreground, you might start using a different torrc file, with a different default Data Directory; see the relay-upgrade FAQ entry for details.
  • If it's still vanishing mysteriously, perhaps something else is killing it? Do you have resource limits (ulimits) configured that kill off processes sometimes? (This is especially common on !OpenBSD.) On Linux, try running "dmesg" to see if the out-of-memory killer removed your process. (Tor will exit cleanly if it notices that it's run out of memory, but in some cases it might not have time to notice.) In very rare circumstances, hardware problems could also be the culprit.

Sixth, if the above ideas don't point out the bug, consider increasing your log level to "loglevel debug". You can look at the log-configuration FAQ entry for instructions on what to put in your torrc file. If it usually takes a long time for the crash to show up, you will want to reserve a whole lot of disk space for the debug log. Alternatively, you could just send debug-level logs to the screen (it's called "stdout" in the torrc), and then when it crashes you'll see the last couple of log lines it had printed. (Note that running with verbose logging like this will slow Tor down considerably, and note also that it's generally not a good idea security-wise to keep logs like this sitting around.)

I installed Tor and Polipo but it's not working.

Once you've installed the Tor bundle, there are two questions to ask: first, is your Tor able to establish a circuit? Second, is your Firefox correctly configured to send its traffic through Tor?

If Tor can establish a circuit, the onion icon in Vidalia will turn green. You can also check in the Vidalia Control Panel to make sure it says "Connected to the Tor network!" under Status. For those not using Vidalia, check your Tor logs? for a line saying that Tor "has successfully opened a circuit. Looks like client functionality is working."

If Tor can't establish a circuit, here are some hints:

  1. Are you sure Tor is running? If you're using Vidalia, you may have to click on the onion and select "Start" to launch Tor.
  2. Check your system clock. If it's more than a few hours off, Tor will refuse to build circuits. For XP users, synchronize your clock under the clock -> Internet time tab. In addition, correct the day and date under the 'Date & Time' Tab.
  3. Is your Internet connection firewalled, or do you normally need to use a proxy?
  4. Are you running programs like Norton Internet Security or SELinux that block certain connections, even though you don't realize they do? They could be preventing Tor from making network connections.
  5. Are you in China, or behind a restrictive corporate network firewall that blocks the public Tor relays? If so, you should learn about Tor bridges.
  6. Check your Tor logs. Do they give you any hints about what's going wrong?

Step two is to confirm that Firefox is correctly configured to send its traffic through Tor. Try the Tor Check site and see whether it thinks you are using Tor. See the Tor Check FAQ entry for details.

If it thinks you're not using Tor, here are some hints:

  1. Did you install the Torbutton extension for Firefox? The installation bundles include it, but sometimes people forget to install it. Make sure it says "Tor enabled" at the bottom right of your Firefox window. (For expert users, make sure your http proxy is set to localhost port 8118.)
  2. Do you have incompatible Firefox extensions like FoxyProxy installed? If so, uninstall them. (Note that using FoxyProxy is NOT a sufficient substitute for Torbutton. There are many known attacks against a browser setup that does not include Torbutton. Read more in the Torbutton FAQ and the Torbutton design specification.)
  3. If your browser says "The proxy server is refusing connections.", check that Polipo (the http proxy that passes traffic between Firefox and Tor) is running. On Windows, look in the task manager and check for a polipo.exe. On OS X, open the utilities folder in your applications folder, and open Then run "ps aux|grep polipo".
  4. If you're upgrading from OS X, some of the earlier OS X installers were broken in really unfortunate ways. You may find that uninstalling everything and then installing a fresh bundle helps. Alas, the current uninstall instructions may not apply anymore to your old bundle. Sorry.
  5. If you're on Linux, make sure Privoxy isn't running, since it will conflict with the port that our Polipo configuration file picks.
  6. If you installed Polipo yourself (not from a bundle), did you edit the config file as described? Did you restart Polipo after this change?
  7. For Red Hat Linux and related systems, do you have SELinux enabled? If so, it might be preventing Polipo from talking to Tor. We also run across BSD users periodically who have local firewall rules that prevent some connections to localhost.

How can I tell if Tor is working, and that my connections really are anonymized? Are there external servers that will test my connection?

Once you've set up your browser to point to Polipo, and (if necessary) your Poliipo to point to Tor, there are sites you can visit that will tell you if you appear to be coming through the Tor network. Try the Tor Check site and see whether it thinks you are using Tor or not.

If that site is down, you can still test, but it will involve more effort: and will tell you what your IP address appears to be, but you'll need to know your current IP address so you can compare and decide whether you're using Tor correctly.

To learn your IP address on OS X, Linux, BSD, etc, run "ifconfig". On Windows, go to the Start menu, click Run and enter "cmd". At the command prompt, enter "ipconfig /a".

If you are behind a NAT or firewall, though, your IP address will show up as something like or, and this isn't your public IP address. In this case, you should 1) configure your browser to connect directly (that is, stop using Polipo), 2) check your IP address with one of the sites above, 3) point your browser back to Polipo, and 4) see whether your IP address has changed.

How do I use my browser for ftp with Tor?

The short answer is to use Firefox 3.0 or above with Torbutton. With this configuration, accessing ftp:// links should be safe for you: your Firefox will safely use Tor directly as a socks proxy when accessing these links.

Versions of Firefox older than 1.5 don't know how to use a socks proxy without broadcasting your DNS queries to the local network, so in those cases you should avoid ftp:// links. Torbutton will automatically configure your browser in this case to point all protocols to Polipo: this means that ftp connections will fail, but at least they won't be dangerous.

If you're using a different browser, we wish you luck. Most of them don't support doing socks requests without leaking the DNS resolve, so you will want to set as many proxy lines as you can. Internet Explorer users beware --- there is a known bug that causes Explorer to directly send FTP requests without going through the specified proxy. You should at least disable Folder View in Internet Explorer if using Tor with Polipo, and you may need to take other steps as well.

If you want a separate application for an ftp client, we've heard good things about FileZilla for Windows. You can configure it to point to Tor as a "socks4a" proxy on "localhost" port "9050".

Will Torbutton be available for other browsers?

We don't support IE, Opera or Safari and never plan to. There are too many ways that your privacy can go wrong with those browsers, and because of their closed design it is really hard for us to do anything to change these privacy problems.

We are working with the Chrome people to modify Chrome's internals so that we can eventually support it. But for now, Firefox is the only safe choice.

Does Tor remove personal information from the data my application sends?

No, it doesn't. You need to use a separate program that understands your application and protocol and knows how to clean or "scrub" the data it sends. Privoxy is an example of this for web browsing. But note that even Privoxy won't protect you completely: you may still fall victim to viruses, Java Script attacks, etc; and Privoxy can't do anything about text that you type into forms. Be careful and be smart.

I want to run my Tor client on a different computer than my applications.

By default, your Tor client only listens for applications that connect from localhost. Connections from other computers are refused. If you want to torify applications on different computers than the Tor client, you should edit your torrc to define SocksListenAddress g and then restart (or hup) Tor. If you want to get more advanced, you can configure your Tor client on a firewall to bind to your internal IP but not your external IP. (For a complete example of this, see Tor through SSH tunnel? using a web browser on Debian to connect to a Tor client running on !OpenBSD. The data is transferred between the computers using an SSH tunnel.)

If you are using tor through polipo, or using the Firefox Torbutton plugin with polipo (the default arrangement) you will need to edit your polipo config file so that your config contains:

socksParentProxy = "" socksProxyType = socks5

Where is the address on your local network where your tor relay is running.

For more information on setting up a central tor server, see Can I install Tor on a central server, and have my clients connect to it?

How often does Tor change its paths?

Tor will reuse the same circuit for new TCP streams for 10 minutes, as long as the circuit is working fine. (If the circuit fails, Tor will switch to a new circuit immediately.)

But note that a single TCP stream (e.g. a long IRC connection) will stay on the same circuit forever -- we don't rotate individual streams from one circuit to the next. Otherwise an adversary with a partial view of the network would be given many chances over time to link you to your destination, rather than just one chance.

Why does netstat show these outbound connections?

Because that's how Tor works. It holds open a handful of connections so there will be one available when you need one.

Tor uses hundreds of bytes for every IRC line. I can't afford that!

Tor sends data in chunks of 512 bytes (called "cells"), to make it harder for intermediaries to guess exactly how many bytes you're communicating at each step. This is unlikely to change in the near future -- if this increased bandwidth use is prohibitive for you, I'm afraid Tor is not useful for you right now.

The actual content of these fixed size cells is documented in the main Tor spec, section 3.

We have been considering one day adding two classes of cells -- maybe a 64 byte cell and a 1024 byte cell. This would allow less overhead for interactive streams while still allowing good throughput for bulk streams. But since we want to do a lot of work on quality-of-service and better queuing approaches first, you shouldn't expect this change anytime soon (if ever). However if you are keen, there are a couple of Research Ideas that may involve changing the cell size.

Can I control what nodes I use for entry/exit, or what country the nodes are in?

Answer moved to our new FAQ page

Google makes me solve a Captcha or tells me I have spyware installed.

Answer moved to our new FAQ page

Gmail warns me that my account may have been compromised.

Answer moved to our new FAQ page

Why does Google show up in foreign languages?

Google uses "geolocation" to determine where in the world you are, so it can give you a personalized experience. This includes using the language it thinks you prefer, and it also includes giving you different results on your queries.

If you really want to see Google in English you can click the link that provides that. But we consider this a feature with Tor, not a bug --- the Internet is not flat, and it in fact does look different depending on where you are. This feature reminds people of this fact. The easy way to avoid this "feature" is to use

Note that Google search URLs take name/value pairs as arguments and one of those names is "hl". If you set "hl" to "en" then Google will return search results in English regardless of what Google server you have been sent to. On a query this looks like:

In Firefox you can search for the google.src file and add the line <input name="hl" value="en">g to it. Then restart Firefox and it will automatically add the "hl=en" name/value pair to all queries made from the search bar so you will get English results regardless of which Google server you have been sent to. Note that this file is actually 'hidden' as part of the application container on Macs. To get to this file on a Mac you have to right click on the Firefox application icon and select "Show Package Contents" then navigate to Contents/MacOS/searchplugins.

Another method is to simply use your country code for accessing Google. This can be,, and so on. You can also set your language by first selecting it in Language Tools section, search for something simple. Then extract the language from the URL. In this example, we'll choose Hebrew:'''iw. Next, use that string in the url: This can obviously be set as your homepage or bookmarked if necessary.

How do I access Tor hidden services?

Tor hidden services are named with a special top-level domain (TLD) name in DNS: .onion. Since the .onion TLD is not recognized by the official root DNS servers on the Internet, your application will not get the response it needs to locate the service. Currently, the Tor directory server provides this look-up service; and thus the look-up request must get to the Tor network.

Therefore, your application needs to pass the .onion hostname to Tor directly. You can't try to resolve it to an IP address, since there is no corresponding IP address: the server is hidden, after all!

So, how do you make your application pass the hostname directly to Tor? You can't use SOCKS 4, since SOCKS 4 proxies require an IP from the client (a web browser is an example of a SOCKS client). Even though SOCKS 5 can accept either an IP or a hostname, most applications supporting SOCKS 5 try to resolve the name before passing it to the SOCKS proxy. SOCKS 4a, however, always accepts a hostname: You'll need to use SOCKS 4a.

Some applications, such as the browsers Mozilla Firefox and Apple's Safari, support sending DNS queries to Tor's SOCKS 5 proxy. Most web browsers don't support SOCKS 4a very well, though. The workaround is to point your web browser at an HTTP proxy, and tell the HTTP proxy to speak to Tor with SOCKS 4a. We recommend Polipo as your HTTP proxy.

For applications that do not support HTTP proxy, and so cannot use Polipo, FreeCap is an alternative. When using FreeCap set proxy protocol to SOCKS 5 and under settings set DNS name resolving to remote. This will allow you to use almost any program with Tor without leaking DNS lookups and allow those same programs to access hidden services.

See also the question on DNS.

My Internet connection requires an HTTP or SOCKS proxy.

Check out the HttpProxy and HttpsProxy config options in the man page. You will need an http proxy for doing GET requests to fetch the Tor directory, and you will need an https proxy for doing CONNECT requests to get to Tor relays. (It's fine if they're the same proxy.)

Also check out HttpProxyAuthenticator and HttpsProxyAuthenticator if your proxy requires auth. We only support basic auth currently, but if you need NTLM authentication, check out this post in the archives.

Tor can use any proxy to get access to the unfiltered Internet. Use the !Socks4Proxy or !Socks5Proxy options.

If your proxies only allow you to connect to certain ports, look at the entry below on Firewalled clients for how to restrict what ports your Tor will try to access.

My firewall only allows a few outgoing ports.

If your firewall works by blocking ports, then you can tell Tor to only use the ports that your firewall permits by adding "FirewallPorts 1" to your torrc configuration file.

By default, when you set this Tor assumes that your firewall allows only port 80 and port 443 (HTTP and HTTPS respectively). You can select a different set of ports with the FirewallPorts option.

As of Tor, we've replaced FascistFirewall and FirewallPorts with new config options:

ReachableDirAddresses *:80 ReachableORAddresses *:443

Is there a list of default exit ports?

The default open ports are listed below but keep in mind that, any port or ports can be opened by the relay operator by configuring it in torrc or modifying the source code. But the default according to from the source code release tor- is:

  reject                      !# Reject non-routable IP's requests   
  reject                 !# Reject non-routable IP's requests   
  reject                    !# Reject non-routable IP's requests   
  reject                 !# Reject non-routable IP's requests   
  reject                     !# Reject non-routable IP's requests   
  reject                  !# Reject non-routable IP's requests   
  reject *:25                           !# Reject SMTP for anti-spam purposes   
  reject *:119                          !# Reject NNTP (News Network Transfer Protocol)   
  reject *:135-139                      !# Reject NetBIOS (File sharing for older versions of windows)   
  reject *:445                          !# Reject Microsoft-DS (a.k.a !NetBIOS for newer NT versions)   
  reject *:1214                         !# Reject Kazaa   
  reject *:4661-4666                    !# Reject eDonkey network   
  reject *:6346-6429                    !# Reject Gnutella networks   
  reject *:6699                         !# Reject Napster   
  reject *:6881-6999                    !# Reject (Dark Star) deltasource & Bittorrent network   
  accept *:*"                           !# Accept the rest of 65535 possible ports

Thanks to for port references.

The default Exit Policy also ExitEnclave blocks the node's own IP address for security reasons]. UnallocatedNetBlocks doesn't block unallocated addresses.

What should I do if I can't use an http proxy with my application?

On Unix, you might try tsocks, but it doesn't seem to work so well on FreeBSD, we'd be happy to hear about alternatives; You might also try socat. It might not be as seamless as tsocks, but it's worked where the former hasn't. There is also proxychains, but I can't get it to play nicely with Tor at the moment.

For FreeBSD and OpenBSD, you can try dante instead of tsocks. Both have a port and package for dante. Instead of running torify irssig you would run socksify irssi after properly setting up dante. See Tor chrooted in OpenBSD? for an example dante configuration that works with Tor.

On windows, look at sockscap, or maybe freecap if you prefer free software.

I keep seeing these warnings about SOCKS and DNS and information leaks. Should I worry?

The warning is:

Your application (using socks5 on port %d) is giving Tor only an IP address. Applications that do DNS resolves themselves may leak information. Consider using Socks4A (e.g. via polipo or socat) instead.

If you are running Tor to get anonymity, and you are worried about an attacker who is even slightly clever, then yes, you should worry. Here's why.

The Problem. When your applications connect to servers on the Internet, they need to resolve hostnames that you can read (like www.torproject.orgg) into IP addresses that the Internet can use (like To do this, your application sends a request to a DNS server, telling it the hostname it wants to resolve. The DNS server replies by telling your application the IP address.

Clearly, this is a bad idea if you plan to connect to the remote host anonymously: when your application sends the request to the DNS server, the DNS server (and anybody else who might be watching) can see what hostname you are asking for. Even if your application then uses Tor to connect to the IP anonymously, it will be pretty obvious that the user making the anonymous connection is probably the same person who made the DNS request.

Where SOCKS comes in. Your application uses the SOCKS protocol to connect to your local Tor client. There are 3 versions of SOCKS you are likely to run into: SOCKS 4 (which only uses IP addresses), SOCKS 5 (which usually uses IP addresses in practice), and SOCKS 4a (which uses hostnames).

When your application uses SOCKS 4 or SOCKS 5 to give Tor an IP address, Tor guesses that it 'probably' got the IP address non-anonymously from a DNS server. That's why it gives you a warning message: you probably aren't as anonymous as you think.

So what can I do? We describe a few solutions below.

  • If your application speaks SOCKS 4a, use it.
  • For HTTP (web browsing), either configure your browser to perform remote DNS lookups (see the Torify HOWTO? how to do this for some versions of Firefox) or use a socks4a-capable HTTP proxy, such as Polipo. See the Tor documentation for more information. For instant messaging or IRC, use Gaim or XChat. For other programs, consider using freecap (on Win32) or dsocks (on BSD).
  • If you only need one or two hosts, or you are good at programming, you may be able to get a socks-based port-forwarder like socatg to work for you; see the Torify HOWTO? for examples.
  • Tor ships with a program called tor-resolveg that can use the Tor network to look up hostnames remotely; if you resolve hostnames to IPs with tor-resolve, then pass the IPs to your applications, you'll be fine. (Tor will still give the warning, but now you know what it means.)
  • You can use TorDNS as a local DNS server to rectify the DNS leakage. See the Torify HOWTO? for info on how to run particular applications anonymously.

If you think that you applied one of the solutions properly but still experience DNS leaks please verify there is no third-party application using DNS independently of Tor. Please see the FAQ entry on whether you're really absolutely anonymous using Tor for some examples.

How do I check if my application that uses SOCKS is leaking DNS requests?

These are two steps you need to take here. The first is to make sure that it's using the correct variant of the SOCKS protocol, and the second is to make sure that there aren't other leaks.

Step one: add "TestgSocks 1" to your torrc file, and then watch your logs as you use your application. Tor will then log, for each SOCKS connection, whether it was using a 'good' variant or a 'bad' one. (If you want to automatically disable all 'bad' variants, set "SafeSocks 1" in your torrc file.)

Step two: even if your application is using the correct variant of the SOCKS protocol, there is still a risk that it could be leaking DNS queries. This problem happens most commonly in Firefox extensions that resolve the destination hostname themselves?, for example to show you its IP address, what country it's in, etc. These applications may use a safe SOCKS variant when actually making connections, but they still do DNS resolves locally. If you suspect your application might behave like this, you should use a network sniffer like wireshark and look for suspicious outbound DNS requests. I'm afraid the details of how to look for these problems are beyond the scope of a FAQ entry though -- find a friend to help if you have problems.

If your application doesn't behave safely, or you're not sure, you may find it simpler to use a Tor package that sets Tor up as a transparent proxy. On Windows these include JanusVM or TorVM; on Linux and BSD you can set this up with these instructions?.

Tor/Vidalia prompts for a password at start

Answer moved to our new FAQ page

Why do we need Polipo or Privoxy with Tor? Which is better?

The first question is, "why a http proxy at all?"

The answer is, because Firefox SOCKS layer has hard-coded timeouts, and other issues, Personally, I don't use an http proxy, I simply let my browser talk to tor via socks directly. The user experience sucks, because you'll receive untold numbers of "The connection has timed out" warnings, because firefox won't wait for Tor to build a circuit. Chrome, Safari, and Arora (amongst others) don't have this problem.

Once Firefox fixes bug 280661, we don't need a http proxy at all. However, given the current pace of progress on 280661, we may switch to Chrome before the fix occurs.

The second question is, "why switch from privoxy to polipo?"

Privoxy is fine filtering software that works well for what is it intended to do. However, its user experience is lacking due to it lacking a few features, namely, http 1.1 pipelining, caching most requested objects, and it needs to see the entire page to parse it, before sending it on to the browser. Lack of these three features is the reason we switched from privoxy to polipo.

We've received plenty of feedback that browsing with polipo in place of privoxy "feels faster". The feedback indicates that because polipo streams the content to the browser for rendering nearly as fast as it receives it from Tor, the user understands what's going on and will start to read the web page as it loads. Privoxy, necesarily, will load the entire page, parse it for items to be filtered, and then send the page on to the browser. The user experience, especially on a slow circuit, is that nothing happens, the browser activity icon spins forever, and suddenly a page appears many, many seconds later.

If Tor was vastly faster, privoxy's mode of operation wouldn't matter. We're working on making Tor faster. However, purposely showing the user how slow tor can be with privoxy was a huge point of complaint, and not what we intended to do.

Does polipo have some bugs? Sure. Chrisd primarily, among others, is working on fixing them. At the current rate of progress on firefox bug 280661, we'll have polipo fixed before mozilla releases the SOCKS layer fix. Chrisd even wrote Mozilla a patch and submitted it on the bug.

The final point is that this is all free software. You are in control. If you don't like polipo, but do like privoxy, then don't install polipo and use privoxy. The power of choice is yours.

See this or-talk posting for further discussion and comparisons. See Andrew's response for the source for this answer.

Vidalia doesn't work in Windows 2000 =

Vidalia doesn't work in Win2k because of a winsock dll bug in Win2K. The explanation for it here: If you don't want to recompile Vidalia yourself, this site offers a replacement dll (with source) that appears to work:

Running a Tor relay

How do I decide if I should run a relay?

We're looking for people with reasonably reliable Internet connections, that have at least 20 kilobytes/s each way. If that's you, please consider helping out.

I'd run a relay, but I don't want to deal with abuse issues.

Answer moved to our new FAQ page

Do I get better anonymity if I run a relay?

Yes, you do get better anonymity against some attacks.

The simplest example is an attacker who owns a small number of Tor relays. He will see a connection from you, but he won't be able to know whether the connection originated at your computer or was relayed from somebody else.

There are some cases where it doesn't seem to help: if an attacker can watch all of your incoming and outgoing traffic, then it's easy for him to learn which connections were relayed and which started at you. (In this case he still doesn't know your destinations unless he is watching them too, but you're no better off than if you were an ordinary client.)

There are also some downsides to running a Tor relay. First, while we only have a few hundred relays, the fact that you're running one might signal to an attacker that you place a high value on your anonymity. Second, there are some more esoteric attacks that are not as well-understood or well-tested that involve making use of the knowledge that you're running a relay -- for example, an attacker may be able to "observe" whether you're sending traffic even if he can't actually watch your network, by relaying traffic through your Tor relay and noticing changes in traffic timing.

It is an open research question whether the benefits outweigh the risks. A lot of that depends on the attacks you are most worried about. For most users, we think it's a smart move.

Why doesn't my Windows (or other OS) Tor relay run well?

Tor relays work best on Linux, FreeBSD 5.x+, OS X Tiger or later, and Windows Server 2003.

You can probably get it working just fine on other operating systems too, but note the following caveats:

  • Versions of Windows without the word "server" in their name sometimes have problems. This is especially the case for Win98, but it also happens in some cases for XP, especially if you don't have much memory. The problem is that we don't use the networking system calls in a very Windows-like way, so we run out of space in a fixed-size memory space known as the non-page pool, and then everything goes bad. The symptom is an assert error with the message "No buffer space available [WSAENOBUFS ] [10055]". You can read more here?.
  • Most developers who contribute to Tor work with Unix-like operating systems. It would be great if more people with Windows experience help out, so we can improve Tor's usability and stability in Windows. appreciated to help improve the usability of Tor in Windows.
  • More esoteric or archaic operating systems, like SunOS 5.9 or Irix64, may have problems with some libevent methods (devpoll, etc), probably due to bugs in libevent. If you experience crashes, try setting the EVENT_NODEVPOLL or equivalent environment variable.

So I can just configure a nickname and ORPort and join the network?

Yes. You can join the network and be a useful relay just by configuring your Tor to be a relay and making sure it's reachable from the outside.

30 Seconds to a Tor Relay:

  • Configure a Nickname:

Nickname ididnteditheconfig

  • Configure !ORPort:

ORPort 9001

  • Configure ContactgInfo:

ContactInfo human@…

  • Start Tor. Watch the log file for a log entry that states:

[notice] router_orport_found_reachable(): Self-testing indicates your !ORPort is reachable from the outside. Excellent. Publishing server descriptor.

I want to upgrade/move my relay. How do I keep the same key?

When upgrading your Tor relay, or running it on a different computer, the important part is to keep the same nickname (defined in your torrc file) and the same identity key (stored in "keys/secret_id_key" in your DataDirectory).

This means that if you're upgrading your Tor relay and you keep the same torrc and the same DataDirectory, then the upgrade should just work and your relay will keep using the same key. If you need to pick a new DataDirectory, be sure to copy your old keys/secret_id_key over.

How do I run my Tor relay as an NT service?

You can run Tor as a service on all versions of Windows except Windows 95/98/ME. This way you can run a Tor relay without needing to always have Vidalia running.

If you've already configured your Tor to be a relay, please note that when you enable Tor as a service, it will use a different DatagDirectory, and thus will generate a different key. If you want to keep using the old key, see the Upgrading your Tor relay FAQ entry for how to restore the old identity key.

To install Tor as a service, you can simply run:

tor -install

A service called Tor Win32 Service will be installed and started. This service will also automatically start every time Windows boots, unless you change the Start-up type. An easy way to check the status of Tor, start or stop the service, and change the start-up type is by running services.msc and finding the Tor service in the list of currently installed services.

Optionally, you can specify additional options for the Tor service using the -optionsg argument. For example, if you want Tor to use C:\tor\torrc, instead of the default torrc, and open a control port on port 9051, you would run:

tor -install -options -f C:\torrc ControlPort 9051

If you are running Tor 0.1.1.x, you will need to move your torrc file from "\Documents and Settings\user name\Application Data\Tor" to the same folder as your executable before installing the Tor service.

If you have Tor or later, you can also start or stop the Tor service from the command line by typing:

 tor -service start


 tor -service stop

To remove the Tor service, you can run the following command:

tor -remove

If you are running Tor as a service and you want to uninstall Tor entirely, be sure to run the service removal command (shown above) first before running the uninstaller from "Add/Remove Programs". The uninstaller is currently not capable of removing the active service.

Can I run a Tor relay from my virtual server account?

Some ISPs are selling "vserver" accounts that provide what they call a virtual server -- you can't actually interact with the hardware, and they can artificially limit certain resources such as the number of file descriptors you can open at once. Competent vserver admins are able to configure your server to not hit these limits. For example, in SWSoft's Virtuozzo, investigate /proc/user_beancounters. Look for "failcnt" in tcpsndbuf, tcprecvbuf, numothersock, and othersockbuf. Ask for these to be increased accordingly. Some users have seen settings work well as follows:

resource held maxheld barrier limit failcnt
tcpsndbuf 46620 48840 3440640 5406720 0
tcprcvbuf 0 2220 3440640 5406720 0
othersockbuf 243516 260072 2252160 4194304 0
numothersock 151 153 720 720 0

Xen, Virtual Box and !VMWare virtual servers have no such limits normally.

If the vserver admin will not increase system limits another option is to reduce the memory allocated to the send and receive buffers on TCP connections Tor uses. An experimental feature to constrain socket buffers has recently been added. If your version of Tor supports it, set "ConstrainedgSockets 1" in your configuration. See the tor man page for additional details about this option.

Unfortunately, since Tor currently requires you to be able to connect to all the other Tor relays, we need you to be able to use at least 1024 file descriptors. This means we can't make use of Tor relays that are crippled in this way.

We hope to fix this in the future, once we know how to build a Tor network with restricted topologies -- that is, where each node connects to only a few other nodes. But this is still a long way off.

I want to run more than one relay.

Great. If you want to run several relays to donate more to the network, we're happy with that. But please don't run more than a few dozen on the same network, since part of the goal of the Tor network is dispersal and diversity.

If you do decide to run more than one relay, please set the "MyFamily" config option in the torrc of each relay, listing all the relays (comma-separated) that are under your control:

MyFamily $fingerprint1,$fingerprint2,$fingerprint3

where each fingerprint is the 40 character identity fingerprint (without spaces). You can also list them by nickname, but fingerprint is safer. Be sure to prefix the digest strings with a dollar sign, '$', so that the digest is not confused with a nickname in the config file.

That way clients will know to avoid using more than one of your relays in a single circuit. You should set MyFamily if you have administrative control of the computers or of their network.

My relay is picking the wrong IP address.

Tor guesses its IP address by asking the computer for its hostname, and then resolving that hostname. Often people have old entries in their /etc/hosts file that point to old IP addresses.

If that doesn't fix it, you should use the "Address" config option to specify the IP you want it to pick. If your computer is behind a NAT and it only has an internal IP address, see the following FAQ entry on dynamic IP addresses.

Also, if you have many addresses, you might also want to set "OutboundBindAddress" so external connections come from the IP you intend to present to the world.

I don't have a static IP.

Tor can handle relays with dynamic IP addresses just fine. Just leave the "Address" line in your torrc blank, and Tor will guess.

Alas, there are bugs with this feature every so often, so if it's not working for you and you can demonstrate it, please help us improve it. You may find the 0.2.0.x version of Tor to be better at guessing than the earlier versions.

I'm behind a NAT/Firewall

See for directions on how to port forward with your NAT/router device.

If your relay is running on a internal net you need to setup port forwarding. Forwarding TCP connections is system dependent but the firewalled-clients FAQ entry offers some examples on how to do this.

Also, here's an example of how you would do this on GNU/Linux if you're using iptables:

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 9001 -j ACCEPT

You may have to change "eth0" if you have a different external interface (the one connected to the Internet). Chances are you have only one (except the loopback) so it shouldn't be too hard to figure out.

My cable/dsl modem keeps crashing. What's going on?

Tor relays hold many connections open at once. This is more intensive use than your cable modem (or other home router) would ever get normally. So if there are any bugs or instabilities, they might show up now.

If your router/etc keeps crashing, you've got two options. First, you should try to upgrade its firmware. If you need tips on how to do this, ask Google or your cable / router provider, or try the Tor IRC channel.

Usually the firmware upgrade will fix it. If it doesn't, you will probably want to get a new (better) router.

Why do I get portscanned more often when I run a Tor relay?

If you allow exit connections, some services that people connect to from your relay will connect back to collect more information about you. For example, some IRC servers connect back to your identd port to record which user made the connection. (This doesn't really work for them, because Tor doesn't know this information, but they try anyway.) Also, users exiting from you might attract the attention of other users on the IRC server, website, etc. who want to know more about the host they're relaying through.

Another reason is that groups who scan for open proxies on the Internet have learned that sometimes Tor relays expose their socks port to the world. We recommend that you bind your socksport to local networks only.

In any case, you need to keep up to date with your security. See this article on operational security for Tor relays? for more suggestions.

I have more than one CPU. Does this help?

Yes. You can set your NumCpus config option in torrc to the number of !CPUs you have, and Tor will spawn this many cpuworkers to deal with public key operations in parallel.

This option has no effect for clients.

Why is my Tor relay using so much memory?

Answer moved to our new FAQ page

What bandwidth shaping options are available to Tor relays?

There are two options you can add to your torrc file:

  • BandwidthRate is the maximum long-term bandwidth allowed (bytes per second). For example, you might want to choose "BandwidthRate 2 MB" for 2 megabytes per second (a fast connection), or "BandwidthRate 50 KB" for 50 kilobytes per second (a medium-speed cable connection). The minimum BandwidthRate is 20 kilobytes per second.
  • BandwidthgBurst is a pool of bytes used to fulfill requests during short periods of traffic above BandwidthRate but still keeps the average over a long period to BandwidthRate. A low Rate but a high Burst enforces a long-term average while still allowing more traffic during peak times if the average hasn't been reached lately. For example, if you choose "BandwidthBurst 50 KB" and also use that for your BandwidthRate, then you will never use more than 50 kilobytes per second; but if you choose a higher BandwidthBurst (like 1 MB), it will allow more bytes through until the pool is empty.

If you have an asymmetric connection (upload less than download) such as a cable modem, you should set BandwidthRate to less than your smaller bandwidth (Usually that's the upload bandwidth). (Otherwise, you could drop many packets during periods of maximum bandwidth usage -- you may need to experiment with which values make your connection comfortable.) Then set BandwidthBurst to the same as BandwidthRate.

Linux-based Tor nodes have another option at their disposal: they can prioritize Tor traffic below other traffic on their machine, so that their own personal traffic is not impacted by Tor load. A script to do this can be found in the Tor source distribution's contrib directory.

Additionally, there are hibernation options where you can tell Tor to only serve a certain amount of bandwidth per time period (such as 100 GB per month). These are covered in the hibernation entry below.

Does BandwidthRate really work?

Yes, it really works. Reread the above entry on limiting the required bandwidth. Note well this point:

  • It is in Bytes, not Bits.

(Of course it's always possible that there is a bug. If you are certain you found one please let us know on the talk mailinglist.)

How can I limit the total amount of bandwidth used by my Tor relay?

The accounting options in the torrc file allow you to specify the maximum amount of bytes your relay uses for a time period.

 AccountingStart day week month [day] HH:MM

This specifies when the accounting should reset. For instance, to setup a total amount of bytes served for a week (that resets every Wednesday at 10:00am), you would use:

 AccountingStart week 3 10:00
 AccountingMax N bytes KB MB GB TB

This specifies the maximum amount of data your relay will send during an accounting period, and the maximum amount of data your relay will receive during an account period. When the accounting period resets

(from AccountingStart), then the counters for AccountingMax are reset to 0.

Example. Let's say you want to allow 1 GB of traffic every day in each direction and the accounting should reset at noon each day:

 AccountingStart day 12:00
 AccountingMax 1 GB

Note that your relay won't wake up exactly at the beginning of each accounting period. It will keep track of how quickly it used its quota in the last period, and choose a random point in the new interval to wake up. This way we avoid having hundreds of relays working at the beginning of each month but none still up by the end.

If you have only a small amount of bandwidth to donate compared to your connection speed, we recommend you use daily accounting, so you don't end up using your entire monthly quota in the first day. Just divide your monthly amount by 30. You might also consider rate limiting to spread your usefulness over more of the day: if you want to offer X GB in each direction, you could set your BandwidthRate to 20*X. For example, if you have 10 GB to offer each way, you might set your BandwidthRate to 200 KB: this way your relay will always be useful for at least half of each day.

Why does my relay write more bytes onto the network than it reads?

You're right, for the most part a byte into your Tor relay means a byte out, and vice versa. But there are a few exceptions:

If you open your DirPort, then Tor clients will ask you for a copy of the directory. The request they make (an HTTP GET) is quite small, and the response is sometimes quite large. This probably accounts for most of the difference between your "write" byte count and your "read" byte count.

Note that in Tor and later, your relay is more intelligent about deciding whether to advertise its DirPort. The main change is to not advertise it if we're running at capacity and either a) we could hibernate or b) our capacity is under 50kB and we're using a DirPort above 1024.

Another minor exception shows up when you operate as an exit node, and you read a few bytes from an exit connection (for example, an instant messaging or ssh connection) and wrap it up into an entire 512 byte cell for transport through the Tor network.

Why can I not browse anymore after limiting bandwidth on my Tor relay?

The parameters assigned in the AccountingMax and BandwidthRate apply to both client and relay functions of the Tor process. Thus you may find that you are unable to browse as soon as your Tor goes into hibernation, signaled by this entry in the log:

. localhost Tor: consider_hibernation(): Bandwidth soft limit reached; commencing hibernation.

The solution is to run two Tor processes - one relay and one client, each with its own config. One way to do this (if you are starting from a working relay setup) is as follows:

  • In the relay Tor torrc file, simply set the SocksPort to 0.
  • Create a new client torrc file from the torrc.sample and ensure it uses a different log file from the relay. One naming convention may be torrc.client and torrc.relay.
  • Modify the Tor client and relay startup scripts to include -f /path/to/correct/torrc. (relay client).
  • In Linux/BSD/OSX, changing the startup scripts to Tor.client and Tor.relay may make separation of configs easier.

How can I make my relay accessible to people stuck behind restrictive firewalls?

Expose your Tor relay on port 443 (HTTPS) so that people whose firewalls restrict them to HTTPS can still get to it. Also, you should expose your directory mirror on port 80 (that even works if Apache is already listening there).

You could do this by just setting orport to 443 and dirport to 80 in your relay's torrc, but this isn't a very hot idea. Binding to ports under 1024 usually requires you to run as root, and running Tor as root is not recommended (in case there are unknown exploitable bugs). Instead, you should configure Tor to advertise its orport as 443, but really bind to another port (such as 9001). Then, set up your computer to forward incoming connections from port 443 to port 9001.

Exception: if you use the version of Tor packaged for Debian (or Debian-based distributions like Ubuntu), Tor starts as root, then drops its privileges and becomes a normal user. That means you can set orport to 443 and dirport to 80, and you don't need any port forwarding.

The Tor side is pretty easy: just set "orport 443" and "orlistenaddress" in your torrc file. This will make your Tor relay listen for connections to any of its IPs on port 9001, but tell the world that it's listening on port 443 instead. Similarly, "dirport 80" and "dirlistenaddress" will bind to port 9030 locally but advertise port 80.

If your relay has multiple IP addresses and you want to advertise a port on an IP address that isn't your default IP, you can do this with Tor's "Address" config option.

Forwarding TCP connections is system dependent, however. Here are some possibilities (you can put them in your rc.local so they execute at boot):

  • On Linux 2.4 or 2.6 (with iptables):
       iptables -t nat -A PREROUTING -p tcp -d $IP --dport 443 \
          -j DNAT --to-destination $IP:9001 
    . Assuming you have a simple, consumer-level NAT gateway/firewall that is configured to forward TCP requests on port 443 of your external (WAN) IP to port 443 of your Tor relay, then "$IP", in the command above, refers to the internal (LAN) IP address of your Tor relay. Often (but not always), this will begin with 192.168....
  • If you want to make this redirection work from localhost, add the following rule as well:
         iptables -t nat -A OUTPUT -p tcp -d $external_IP --dport 443 \
          -j DNAT --to-destination $internal_IP:9001
    . Here, "$internal_IP" is the same as "$IP" in the previous example, but "$external_IP" refers to the WAN IP of your gateway/firewall.
  • When using shorewall (version 2.2.3) you may find it helpful to do add something like this (inside /etc/shorewall/rules):
       # DirListenAddress $IP:9091
       DNAT    net     $FW:$IP:9091  tcp     80      -       $IP
       ACCEPT  $FW:$IP       net     tcp     9091
       # ORListenAddress $IP:9090
       DNAT    net     $FW:$IP:9090  tcp     443     -       $IP
       ACCEPT  $FW:$IP       net     tcp     9090
    . Don't forget to tune your default policy (/etc/shorewall/policy) so that it doesn't log those rules when they're triggered.
  • With ssh (do not use in conjunction with DirPolicyg):
       ssh -fNL 443:localhost:9001 localhost
    . Note: if you get an error message "channel 2: open failed: connect failed: Connection refused", try replacing "localhost" with "" in the ssh command.)
  • To offer your directory mirror on port 80, where apache is already listening, add this to your apache config:
       <IfModule mod_proxy.c>
           ProxyPass /tor/ http://localhost:9030/tor/
           ProxyPassReverse /tor/ http://localhost:9030/tor/
    . Ideally you wouldn't log those requests. That's not very hard either: Remove your normal AccessgLog, and use a Custom}}}Log:
       LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
       SetEnvIf Request_URI "^/tor/" request_is_for_tor=yes
       CustomLog /var/log/apache/combined.log combined env=!request_is_for_tor
       CustomLog /dev/null common env=request_is_for_tor
    . Refer to the Apache documentation for why this works: and
  • To offer your directory on port 80 when Apache (or anything else) is not listening, use a port redirection for the dirport, as per the orport method described earlier in this section.
  • On Linux 2.4 or 2.6 (with iptables):
       iptables -t nat -A PREROUTING -p tcp -d $IP --dport 80 \
          -j DNAT --to-destination $IP:9030
  • On OpenBSD/FreeBSD/NetBSD with PF (Tutorial). Assume you have a 3com 905b card connected to an Internet gateway.

# Redirect traffic coming in on xl0 from any:any to $IP:443 to localhost:9001 rdr on xl0 proto tcp from any to $IP port 443 -> $IP port 9001 g

  • On Mac OS X (tested on Leopard, might work on Panther/Tiger as well):
       sudo ipfw add fwd,9030 tcp from any to me 80 in
       sudo ipfw add fwd,9001 tcp from any to me 443 in
  • If you just use an external NAT router as your firewall, you only need to do the port forwarding through that.

Volunteers: please add advice for other platforms if you know how they work.

Can I install Tor on a central server, and have my clients connect to it?

Yes. Tor can be configured as a client or a relay on another machine, and allow other machines to be able to connect to it for anonymity. This is most useful in an environment where many computers want a gateway of anonymity to the rest of the world. However, be forwarned that with this configuration, anyone within your private network (existing between you and the Tor client/relay) can see what traffic you are sending in clear text. The anonymity doesn't start until you get to the Tor relay. Because of this, if you are the controller of your domain and you know everything's locked down, you will be OK, but this configuration may not be suitable for large private networks where security is key all around.

Configuration is simple, editing your torrc file's SocksListenAddress according to the following examples:

  SocksListenAddress #This provides local interface access only, needs SocksPort to be greater than 0
  SocksListenAddress 192.168.x.x:9100 #This provides access to Tor on a specified interface
  SocksListenAddress #Accept from all interfaces

You can state multiple listen addresses, in the case that you are part of several networks or subnets.

  SocksListenAddress 192.168.x.x:9100 #eth0
  SocksListenAddress 10.x.x.x:9100 #eth1

After this, your clients on their respective networks/subnets would specify a socks proxy with the address and port you specified SocksListenAddress to be. (This is a direct connection to the Tor relay not running through Polipo or other programs, and may be susceptible to DNS leaks? See Firefox's configuration for Remote DNS? for more information on proper configuration of Firefox, and the status of other browsers and their handling of Remote DNS in this instance.

For more information on setting up clients with a central server, see I want to run my Tor client on a different computer than my applications.

Please note that the SocksPort configuration option gives the port ONLY for localhost ( When setting up your SocksListenAddress(es), you need to give the port with the address, as shown above.

If you are interested in forcing all outgoing data through the central Tor client/relay, instead of the server only being an optional proxy, you may find the program iptables (for *nix) useful.

How do I provide a hidden service?

See the official hidden service configuration instructions

Why is it better to provide a hidden service Web site with HTTP rather than HTTPS access?

Put simply, HTTPS access puts the connecting client at higher risk, because it bypasses any first-stage filtering proxy..

Generally, a person using a Tor client will access HTTP via a first-stage proxy such as Privoxy, which has the ability to filter both the browser's request and the server's response. However, for HTTPS access to function correctly, the connection must be direct from the browser to the server, to protect the encrypted SSL connection under the hood.

Without the proxy forging the SSL encryption keys (causing the browser to pop up an invalid certificate warning box), there is then no way to filter things from the HTTPS connection before the server or browser sees it -- potentially allowing the browser to send identifiable user information to the server, or the server to send an exploit for a browser bug back to the client. For more information, see Privoxy's FAQ entry (4.15) on the subject.

Since hidden service connections are already encrypted end-to-end over the Tor network, using HTTPS for encryption serves little purpose. If there is a reason to encrypt the connection at the hidden service's end, such as if the real hidden service is located remotely from the Tor relay, then an application such as can be used in client mode to wrap plain HTTP into HTTPS at the Tor relay exit point.

These objections all apply to HTTPS, TLS, SSH, and generally all cryptography over Tor, regardless of whether or not the destination is a hidden service: for client security, Tor depends on the client being well behaved or at least being able to shim a proxy in when it isn't, and client cryptography wrecks the second option. However, if a web server needs strong authentication, it is basically forced to use HTTPS currently (much as SSH must still use its own crypto & auth layer), as there is no mechanism for the Tor Onion Proxy to provide authentication. There have been some proposals made but no code currently exists to do this.


Who is responsible for Tor?

Roger Dingledine and Nick Mathewson are the main developers of Tor. You can read more at Tor's People page.

What do these weird version numbers mean?

Versions of Tor before 0.1.0 used a strange and hard-to-explain version scheme. Let's forget about those.

Starting with 0.1.0, versions all look like this: MAJOR.MINOR.MICRO(.PATCHLEVEL)(-TAG). The stuff in parenthesis is optional. MAJOR, MINOR, MICRO, and PATCHLEVEL are all numbers. Only one release is ever made with any given set of these version numbers. The TAG lets you know how stable we think the release is: "alpha" is pretty unstable; "rc" is a release candidate; and no tag at all means that we have a final release. If the tag ends with "-cvs", you're looking at a development snapshot that came after a given release.

So for example, we might start a development branch with (say) The patchlevel increments consistently as the status tag changes, for example, as in:,,,, etc. Eventually, we would release The next stable release would be

Why do we do it like this? Because every release has a unique version number, it is easy for tools like package manager to tell which release is newer than another. The tag makes it easy for users to tell how stable the release is likely to be.

How do I set up my own private Tor network?

If you want to experiment locally with your own network, or you're cut off from the Internet and want to be able to mess with Tor still, then you may want to set up your own separate Tor network.

To set up your own Tor network, you need to run your own authoritative directory servers, and you need to configure each client and relay so it knows about your directory servers rather than the default public ones.

  1. Grab the latest release.
  1. Make one directory for each Tor node you intend to run (including clients). This directory will be called the node's data directory. Now make a temporary torrc file with this content: a.
    DirServer test 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    ORPort 5000
    1. For each directory authority, run:
      tor --list-fingerprint --DataDirectory /path/to/datadir/ -f tmp.torrc

This will give you the nodes' fingerprints. You will need the fingerprints of your directory authorities in the next step, so note them down. The format will be hostname FINGERPRINT, you just need the FINGERPRINT part.

  1. For all the directory authorities that you plan to use (using just one is enough, but you can run as many as you want), you have to create the v3 directory identity keys before you can continue. Run this command:
    tor-gencert --create-identity-key

Pick a password you like, then move the created authority_certificate and authority_signing_key into the keys directory inside your first authority's data directory. Look inside the authority_certificate file. Note the fingerprint line: the 40 characters are this authority's v3ident. You will need this later. Repeat for all other authorities you plan to set up.

  1. You will need to set the following options on all your nodes, so start a new empty torrc file. We will use this as the basis torrc. Put the following options in:
    1. Make them aware they're part of a private Tor network
      TestingTorNetwork 1
  1. Tell them about all the directory authorities in your network. For each of your directory authorities, add one line.


DirServer myCoolAuthority v3ident=E2A2AF570166665D738736323258169CC61D8A8B orport=9001 FFCB 46DB 1339 DA84 674C DDDD FFFF 6434 C437 0441
  1. Each Tor node needs its own data directory
    DataDirectory .

The file is now suitable to be used for all your clients. Copy it into the data directories. If you want to use more than one node with an open SocksPort, make sure to pick a different one for each node and add to its configuration

SocksPort PORT
  1. Now it is time to set up the relay configuration. Each Relay needs at least an !ORPort to work. Make sure you pick a different one for each relay!
    1. For each relay, add this to their torrc:
      ORPort PORT
    2. For this example, we also want to disable the SocksPort for all our relays and authorities
      SocksgPort 0
    3. To avoid problems with IP address resolution, set the local IP address
      Address IP
  2. Additional setup for authorities.
    1. Each authority needs an !ORPort. Set them up as above, and make sure that the !ORPort matches the one you put into the sample torrc. Also, set up a DirPort that matches:
      DirPort PORT
    2. Also, set them up as authorities
      V3AuthoritativeDirectory 1
      V2AuthoritativeDirectory 1
      AuthoritativeDirectory 1
    3. We need contact information on authorities
      ContactInfo test@test.test
  3. Starting the network
    1. in each data directory, start a new tor process
      tor -f torrc-file.torrc
  4. Modify the .torrc files to meet your needs. For example, if you plan to play with Hidden Services, setting MinUptimeHidServDirectoryV2 0 is a good idea.

How can I make my Java program use the Tor Network?

The newest versions of Java now have SOCKS4/5 support build in. Unfortunately, the SOCKS interface is not very well documented and may still leak your DNS lookups. The best way to use Tor is to interface the SOCKS protocol directly or go through an application-level proxy that speaks SOCKS4a. For an example and libraries that implement the SOCKS4a connection, goto Joe Foley's TorLib in the TinFoil Project at

What is libevent?

When you want to deal with a bunch of net connections at once, you have a few options:

One is multithreading: you have a separate micro-program inside the main program for each net connection that reads and writes to the connection as needed.This, performance-wise, sucks.

Another is asynchronous network programming: you have a single main program that finds out when various net connections are ready to read/write, and acts accordingly.

The problem is that the oldest ways to find out when net connections are ready to read/write, suck. And the newest ways are finally fast, but are not available on all platforms.

This is where Libevent comes in and wraps all these ways to find out whether net connections are ready to read/write, so that Tor (and other programs) can use the fastest one that your platform supports, but can still work on older platforms (these methods are all different depending on the platorm) So Libevent presents a consistent and fast interface to select, poll, kqueue, epoll, /dev/poll, and windows select.

However, On the the Win32 platform (by Microsoft) the only good way to do fast IO on windows with hundreds of sockets is using overlapped IO, which is grossly unlike every other BSD sockets interface.


What do I need to do to get a new feature into Tor?

For a new feature to go into Tor, it needs to be designed (explain what you think Tor should do), argued to be secure (explain why it's better or at least as good as what Tor does now), specified (explained at the byte level at approximately the level of detail in tor-spec.txt), and implemented (done in software).

You probably shouldn't count on other people doing all of these steps for you: people who are skilled enough to do this stuff generally have their own favorite feature requests.

Anonymity and Security

What protections does Tor provide?

Internet communication is based on a store-and-forward model that can be understood in analogy to postal mail: Data is transmitted in blocks called IP datagrams or packets. Every packet includes a source IP address (of the sender) and a destination IP address (of the receiver), just as ordinary letters contain postal addresses of sender and receiver. The way from sender to receiver involves multiple hops of routers, where each router inspects the destination IP address and forwards the packet closer to its destination. Thus, every router between sender and receiver learns that the sender is communicating with the receiver. In particular, your local ISP is in the position to build a complete profile of your Internet usage. In addition, every server in the Internet that can see any of the packets can profile your behaviour.

The aim of Tor is to improve your privacy by sending your traffic through a series of proxies. Your communication is encrypted in multiple layers and routed via multiple hops through the Tor network to the final receiver. More details on this process can be found in the Tor overview. Note that all your local ISP can observe now is that you are communicating with Tor nodes. Similarly, servers in the Internet just see that they are being contacted by Tor nodes.

Generally speaking, Tor aims to solve three privacy problems:

First, Tor prevents websites and other services from learning your location, which they can use to build databases about your habits and interests. With Tor, your Internet connections don't give you away by default -- now you can have the ability to choose, for each connection, how much information to reveal.

Second, Tor prevents people watching your traffic locally (such as your ISP) from learning what information you're fetching and where you're fetching it from. It also stops them from deciding what you're allowed to learn and publish -- if you can get to any part of the Tor network, you can reach any site on the Internet.

Third, Tor routes your connection through more than one Tor relay so no single relay can learn what you're up to. Because these relays are run by different individuals or organizations, distributing trust provides more security than the old one hop proxy approach.

Note, however, that there are situations where Tor fails to solve these privacy problems entirely: see the entry below on remaining attacks).

Can exit nodes eavesdrop on communications? Isn't that bad?

Yes, the guy running the exit node can read the bytes that come in and out there. Tor anonymizes the origin of your traffic, and it makes sure to encrypt everything inside the Tor network, but it does not magically encrypt all traffic throughout the Internet.

This is why you should always use end-to-end encryption such as SSL for sensitive Internet connections. (The corollary to this answer is that if you are worried about somebody intercepting your traffic and you're *not* using end-to-end encryption at the application layer, then something has already gone wrong and you shouldn't be thinking that Tor is the problem.)

Tor does provide a partial solution in a very specific situation, though. When you make a connection to a destination that also runs a Tor relay, Tor will automatically extend your circuit so you exit from that circuit. So for example if Indymedia ran a Tor relay on the same IP address as their website, people using Tor to get to the Indymedia website would automatically exit from their Tor relay, thus getting *better* encryption and authentication properties than just browsing there the normal way.

We'd like to make it still work even if the service is nearby the Tor relay but not on the same IP address. But there are a variety of technical problems we need to overcome first (the main one being "how does the Tor client learn which relays are associated with which websites in a decentralized yet non-gamable way?").

What is Exit Enclaving?

When a machine that runs a Tor relay also runs a public service, such as a webserver, you can configure Tor to offer Exit Enclaving to that service. Running an Exit Enclave for all of your services you wish to be accessible via Tor provides your users the assurance that they will exit through your server, rather than exiting from a randomly selected exit node that could be watched. Normally, a tor circuit would end at an exit node and then that node would make a connection to your service. Anyone watching that exit node could see the connection to your service, and be able to snoop on the contents if it were an unencrypted connection. If you run an Exit Enclave for your service, then the exit from the Tor network happens on the machine that runs your service, rather than on an untrusted random node. This works when Tor clients wishing to connect to this public service extend their their circuit to exit from the Tor relay running on that same host. For example, if the server at runs a web server on port 80 and also acts as a Tor relay configured for Exit Enclaving, then Tor clients wishing to connect to the webserver will extend their circuit a fourth hop to exit to port 80 on the Tor relay running on

Exit Enclaving is disabled by default to prevent attackers from exploiting trust relationships with locally bound services. For example, often will run services that are not designed to be shared with the entire world. Sometimes these services will also be bound to the public IP address, but will only allow connections if the source address is something trusted, such as

As a result of possible trust issues, relay operators must configure their exit policy to allow connections to themselves, but they should do so only when they are certain that this is a feature that they would like. Once certain, turning off the ExitPolicyRejectPrivate option will enable Exit Enclaving. An example configuration would be as follows:

ExitPolicy accept
ExitPolicy reject
ExitPolicyRejectPrivate 0

This option should be used with care as it may expose internal network blocks that are not meant to be accessible from the outside world or the Tor network. Please tailor your ExitPolicy to reflect all netblocks that you want to prohibit access.

Although Exit Enclaving provides benefits, there is a situation where it could allow a rogue exit node to control where a client may exit. To protect against this, your services should provide proper SSL authentication to the clients, and then things will work as expected. How this works is that a Tor client picks an arbitrary circuit to resolve hosts (e.g. A rogue exit node could spoof DNS responses for to be the IP address of the rogue node, rather than the correct node where the service actually runs. The Tor client would then attempt to use that rogue node as an Exit Enclave. This is only possible for the first access attempt for; after the first attempt a circuit is established with the Exit Enclave IP address directly.

While useful, this behavior may go away in the future because it is imperfect. A great idea but not such a great implementation.

So I'm totally anonymous if I use Tor?


First, Tor protects the network communications. It separates where you are from where you are going on the Internet. What content and data you transmit over Tor is controlled by you. If you login to Google or Facebook via Tor, the local ISP or network provider doesn't know you are visiting Google or Facebook. Google and Facebook don't know where you are in the world. However, since you have logged into their sites, they know who you are. If you don't want to share information, you are in control.

Second, active content, such as Java, Javascript, Adobe Flash, Adobe Shockwave, QuickTime, RealAudio, ActiveX controls, and VBScript, are binary applications. These binary applications run as your user account with your permissions in your operating system. This means these applications can access anything that your user account can access. Some of these technologies, such as Java and Adobe Flash for instance, run in what is known as a virtual machine. This virtual machine may have the ability to ignore your configured proxy settings, and therefore bypass Tor and share information directly to other sites on the Internet. The virtual machine may be able to store data, such as cookies, completely separate form your browser or operating system data stores. Therefore, we recommend disabling these technologies in your browser to improve the situation.

We produce two pieces of software to help you control the risks to your privacy and anonymity while using the Internet:

  1. Torbutton attempts to mitigate many of the anonymity risks when browsing the Internet via Tor.
  2. The Tor Browser Bundle is a pre-configured set of applications to allow you to anonymously browse the Internet.

Alternatively, you may find a Live CD or USB operating system more to your liking. Now you have an entire bootable operating system configured for anonymity and privacy on the Internet.

Tor is a work in progress. There is still plenty of work? left to do for a strong, secure, and complete solution.

Please explain Tor's public key infrastructure.

Answer moved to our new FAQ page

Where can I learn more about anonymity?

Read these papers (especially the ones in boxes) to get up to speed on anonymous communication systems.

What's this about entry guard (formerly known as "helper") nodes?

Tor (like all current practical low-latency anonymity designs) fails when the attacker can see both ends of the communications channel. For example, suppose the attacker is watching the Tor relay you choose to enter the network, and is also watching the website you visit. In this case, the research community knows no practical low-latency design that can reliably stop the attacker from correlating volume and timing information on the two sides.

So, what should we do? Suppose the attacker controls, or can observe, C relays. Suppose there are N relays total. If you select new entry and exit relays each time you use the network, the attacker will be able to correlate all traffic you send with probability (c/n)2. But profiling is, for most users, as bad as being traced all the time: they want to do something often without an attacker noticing, and the attacker noticing once is as bad as the attacker noticing more often. Thus, choosing many random entries and exits gives the user no chance of escaping profiling by this kind of attacker.

The solution is "entry guards": each user selects a few relays at random to use as entry points, and uses only those relays for entry. If those relays are not controlled or observed, the attacker can't win, ever, and the user is secure. If those relays *are* observed or controlled by the attacker, the attacker sees a larger _fraction_ of the user's traffic -- but still the user is no more profiled than before. Thus, the user has some chance (on the order of (n-c)/n) of avoiding profiling, whereas she had none before.

You can read a bit more at,, or

Restricting your entry nodes may also help against attackers who want to run a few Tor nodes and easily enumerate all of the Tor user IP addresses. (Even though they can't learn what destinations the users are talking to, they still might be able to do bad things with just a list of users.)

What about powerful blocking mechanisms?

An adversary with a great deal of manpower and money, and severe real-world penalties to discourage people from trying to evade detection, is a difficult test for an anonymity and anti-censorship system.

The original Tor design was easy to block if the attacker controls Alice's connection to the Tor network --- by blocking the directory authorities, by blocking all the relay IP addresses in the directory, or by filtering based on the fingerprint of the Tor TLS handshake. Some government-level firewalls could easily launch this type of attack, which would make the whole Tor network no longer usable for the people behind the firewalls. This is one part of what is commonly known as the "China problem" or the "Chinese firewall problem."

We've made quite a bit of progress on this problem lately. You can read more details in our blocking-resistance design document, watch the video of Roger's talk at 24C3, or read the specifics of our bridge design and implementation.

What attacks remain against onion routing?

As mentioned above, it is possible for an observer who can view both you and either the destination website or your Tor exit node to correlate timings of your traffic as it enters the Tor network and also as it exits. Tor does not defend against such a threat model.

In a more limited sense, note that if a censor or law enforcement agency has the ability to obtain specific observation of parts of the network, it is possible for them to verify a suspicion that you talk regularly to your friend by observing traffic at both ends and correlating the timing of only that traffic. Again, this is only useful to verify that parties already suspected of communicating with one another are doing so. In most countries, the suspicion required to obtain a warrant already carries more weight than timing correlation would provide.

Furthermore, since Tor reuses circuits for multiple TCP connections, it is possible to associate non anonymous and anonymous traffic at a given exit node, so be careful about what applications you run concurrently over Tor. Perhaps even run separate Tor clients for these applications.

Does Tor resist "remote physical device fingerprinting"?

Yes, we resist all of these attacks as far as we know.

These attacks come from examining characteristics of the IP headers or TCP headers and looking for information leaks based on individual hardware signatures. One example is the Oakland 2005 paper that lets you learn if two packet streams originated from the same hardware, but only if you can see the original TCP timestamps.

Tor transports TCP streams, not IP packets, so we end up automatically scrubbing a lot of the potential information leaks. Because Tor relays use their own (new) IP and TCP headers at each hop, this information isn't relayed from hop to hop. Of course, this also means that we're limited in the protocols we can transport (only correctly-formed TCP, not all IP like ZKS's Freedom network could) -- but maybe that's a good thing at this stage.

Alternate designs that we don't do (yet)

You should send padding so it's more secure.

Like all anonymous communication networks that are fast enough for web browsing, Tor is vulnerable to statistical "traffic confirmation" attacks, where the adversary watches traffic at both ends of a circuit and confirms his guess that they're communicating. It would be really nice if we could use cover traffic to confuse this attack. But there are three problems here:

  • Cover traffic is really expensive. And *every* user needs to be doing it. This adds up to a lot of extra bandwidth cost for our volunteer operators, and they're already pushed to the limit.
  • You'd need to always be sending traffic, meaning you'd need to always be online. Otherwise, you'd need to be sending end-to-end cover traffic -- not just to the first hop, but all the way to your final destination -- to prevent the adversary from correlating presence of traffic at the destination to times when you're online. What does it mean to send cover traffic to -- and from -- a web server? That is not supported in most protocols.
  • Even if you *could* send full end-to-end padding between all users and all destinations all the time, you're *still* vulnerable to active attacks that block the padding for a short time at one end and look for patterns later in the path.

In short, for a system like Tor that aims to be fast, we don't see any use for padding, and it would definitely be a serious usability problem. We hope that one day somebody will prove us wrong, but we are not optimistic.

You should make every Tor user be a relay.

Answer moved to our new FAQ page

You should transport all IP packets, not just TCP packets.

This would be handy, because it would make Tor more generally useful. It would also solve the whole need to socksify applications, and it would resolve the DNS leak problem too. Lastly, it would solve the fact that exit relays need to allocate a lot of file descriptors to hold open all the exit connections.

On the other hand, there are six reasons we haven't done this:

  1. IP packets reveal OS characteristics. We would still need to do IP-level packet normalization, to stop things like TCP fingerprinting attacks. This is unlikely to be a trivial task, given the diversity and complexity of TCP stacks. In fact, it's worse than this: check out the new class of device fingerprinting attacks which we would have to tackle as well.
  2. Application-level streams still need scrubbing. We still need Tor to be easy to integrate with user-level application-specific proxies such as Privoxy. So it's not just a matter of capturing packets and anonymizing them at the IP layer.
  3. Certain protocols will still leak information. For example, we must rewrite DNS requests so they are delivered to an unlinkable DNS server rather than the DNS server at a user's ISP; thus, we must understand the protocols we are transporting.
  4. DTLS (datagram TLS) will be in the 0.9.8 openssl release. We need to design a new end-to-end Tor protocol for avoiding tagging attacks and other potential anonymity and integrity issues now that we allow drops, resends, et cetera.
  5. Exit policies for arbitrary IP packets mean building a secure IDS. Our node operators tell us that exit policies are one of the main reasons they're willing to run Tor. Adding an Intrusion Detection System to handle exit policies would increase the security complexity of Tor, and would likely not work anyway, as evidenced by the entire field of IDS and counter-IDS papers. Many potential abuse issues are resolved by the fact that Tor only transports valid TCP streams (as opposed to arbitrary IP including malformed packets and IP floods), so exit policies become even _more_ important as we become able to transport IP packets. We also need to compactly describe exit policies in the Tor directory, so clients can predict which nodes will allow their packets to exit -- and clients need to predict all the packets they will want to send in a session before picking their exit node!
  6. The Tor-internal name spaces would need to be redesigned. We support hidden service ".onion" addresses (and other special addresses, like ".exit" which lets the user request a particular exit node), by intercepting the addresses when they are passed to the Tor client. Doing so at the IP level would require a more complex interface between Tor and the local DNS resolver.

You should hide the list of Tor relays, so people can't block the exits.

There are a few reasons we don't:

  1. We can't help but make the information available, since Tor clients need to use it to pick their paths. So if the "blockers" want it, they can get it anyway. Further, even if we didn't tell clients about the list of relays directly, somebody could still make a lot of connections through Tor to a test site and build a list of the addresses they see.
  1. If people want to block us, we believe that they should be allowed to do so. Obviously, we would prefer for everybody to allow Tor users to connect to them, but people have the right to decide who their services should allow connections from, and if they want to block anonymous users, they can.
  1. Being blockable also has tactical advantages: it may be a persuasive response to website maintainers who feel threatened by Tor. Giving them the option may inspire them to stop and think about whether they really want to eliminate private access to their system, and if not, what other options they might have. The time they might otherwise have spent blocking Tor, they may instead spend rethinking their overall approach to privacy and anonymity.

You should let people choose their path length.

Right now the path length is hard-coded at 3 plus the number of nodes in your path that are sensitive. That is, in normal cases it's 3, but for example if you're accessing a hidden service or a ".exit" address it could be 4.

We don't want to encourage people to use paths longer than this -- it increases load on the network without (as far as we can tell) providing any more security. Remember that the best way to attack Tor is to attack the endpoints and ignore the middle of the path.

And we don't want to encourage people to use paths of length 1 either. Currently there is no reason to suspect that investigating a single relay will yield user-destination pairs, but if many people are using only a single hop, we make it more likely that attackers will seize or break into relays in hopes of tracing users.

Now, there is a good argument for making the number of hops in a path unpredictable. For example, somebody who happens to control the last two hops in your path still doesn't know who you are, but they know for sure which entry node you used. Choosing path length from, say, a geometric distribution will turn this into a statistical attack, which seems to be an improvement. On the other hand, a longer path length is bad for usability. We're not sure of the right trade-offs here. Please write a research paper that tells us what to do.

You should split each connection over many paths.

We don't currently think this is a good idea. You see, the attacks we're worried about are at the endpoints: the adversary watches Alice (or the first hop in the path) and Bob (or the last hop in the path) and learns that they are communicating.

If we make the assumption that timing attacks work well on even a few packets end-to-end, then having *more* possible ways for the adversary to observe the connection seems to hurt anonymity, not help it.

Now, it's possible that we could make ourselves more resistant to end-to-end attacks with a little bit of padding and by making each circuit send and receive a fixed number of cells. This approach is more well-understood in the context of high-latency systems. See e.g. Message Splitting Against the Partial Adversary by Andrei Serjantov and Steven J. Murdoch.

But since we don't currently understand what network and padding parameters, if any, could provide increased end-to-end security, our current strategy is to minimize the number of places that the adversary could possibly see.

You should migrate application streams across circuits.

This would be great for two reasons. First, if a circuit breaks, we would be able to shift its active streams onto a new circuit, so they don't have to break. Second, it is conceivable that we could get increased security against certain attacks by migrating streams periodically, since leaving a stream on a given circuit for many hours might make it more vulnerable to certain adversaries.

There are two problems though. First, Tor would need a much more bulky protocol. Right now each end of the Tor circuit just sends the cells, and lets TCP provide the in-order guaranteed delivery. If we can move streams across circuits, though, we would need to add queues at each end of the circuit, add sequence numbers so we can send and receive acknowledgements for cells, and so forth. These changes would increase the complexity of the Tor protocol considerably. Which leads to the second problem: if the exit node goes away, there's nothing we can do to save the TCP connection. Circuits are typically three hops long, so in about a third of the cases we just lose.

Thus our current answer is that since we can only improve things by at best 2/3, it's not worth the added code and complexity. If somebody writes a protocol specification for it and it turns out to be pretty simple, we'd love to add it.

But there are still some approaches we can take to improve the reliability of streams. The main approach we have now is to specify that streams using certain application ports prefer circuits to be made up of stable nodes. These ports are specified in the "LongLivedPorts" torrc option, and they default to 21,22,706,1863,5050,5190,5222,5223,6667,6697,8300. The definition of "stable" is an open research question, since we can only guess future stability based on past performance. Right now we judge that a node is stable if it advertises that it has been up for more than a day. Down the road we plan to refine this so it takes into account the average stability of the other nodes in the Tor network.

  • It's not just a 2/3 improvement, it is a thing that is simply necessary to truly anonymize hosts connected using a dynamic IP setup, like many consumer ISPs use them. Without the possibility to migrate streams, an attacker can examine which long-lived connections end when the observed person gets a new IP. By allowing stream migration, the connection can persist as if nothing had happened. This will make Tor a tool for more than anonymity, as it improves networking in general. Maybe it's not even that hard to implement. It could be gradually phased into the protocol. The first step would be to send sequencing information with the data stream. Future versions could then investigate possibilities for picking up the connections. Security should not be a problem as we are already using strong cryptography, which enables us to authenticate the stream owner.

You should let the network pick the path, not the client.

No. You cannot trust the network to pick the path for relays could collude and route you through their colluding friends. This would give an adversary the ability to watch all of your traffic end to end.

You should use steganography to hide Tor traffic.

Many people suggest that we should use steganography to make it hard to notice Tor connections on the Internet. There are a few problems with this idea though:

First, in the current network topology, the Tor relays list is public and can be accessed by attackers. An attacker who wants to detect or block anonymous users could always just notice any connection to or from a Tor relay's IP address.

Second, effective steganography is an extremely hard problem. The protocols we know that are currently considered secure require incredible effort and bandwidth overhead.

That said, Tor has already started a little bit down this path: Tor clients speak only http (for the directory) and https (for Tor connections), so simply looking at the protocol is not sufficient to identify Tor traffic.

Your default exit policy should block unallocated net blocks too.

No, it shouldn't. The default exit policy blocks certain private net blocks, like, because they might actively be in use by Tor relays and we don't want to cause any surprises by bridging to internal networks. Some overzealous firewall configs suggest that you also block all the parts of the Internet that IANA has not currently allocated. First, this turns into a problem for them when those addresses *are* allocated. Second, why should we default-reject something that might one day be useful?

Tor's default exit policy is chosen to be flexible and useful in the future: we allow everything except the specific addresses and ports that we anticipate will lead to problems.

Exit policies should be able to block websites, not just IP addresses

It would be nice to let relay operators say things like "reject" in their exit policies, rather than requiring them to learn all the IP address space that could be covered by the site (and then also blocking other sites at those IP addresses).

There are two problems, though. First, users could still get around these blocks. For example, they could request the IP address rather than the hostname when they exit from the Tor network. This means operators would still need to learn all the IP addresses for the destinations in question.

The second problem is that it would allow remote attackers to censor arbitrary sites. For example, if a Tor operator blocks, and then some attacker poisons the Tor relay's DNS or otherwise changes that hostname to resolve to the IP address for a major news site, then suddenly that Tor relay is blocking the news site.

You should change Tor to prevent users from posting certain content.

Tor only transports data, it does not inspect the contents of the connections which are sent over it. In general it's a very hard problem for a computer to determine what is objectionable content with good true positive/false positive rates and we are not interested in addressing this problem.

Further, and more importantly, which definition of "certain content" could we use? Every choice would lead to a quagmire of conflicting personal morals. The only solution is to have no opinion.

Tor should support IPv6.

That's a great idea! There are two aspects for IPv6 support that Tor needs. First, Tor needs to support exit to hosts that only have IPv6 addresses. Second, Tor needs to support Tor relays that only have IPv6 addresses.

The first is far easier: the protocol changes are relatively simple and isolated. It would be like another kind of exit policy.

The second is a little harder: right now, we assume that (mostly) every Tor relay can connect to every other. This has problems of its own, and adding IPv6-address-only relays adds problems too: it means that only relays with IPv6 abilities can connect to IPv6-address-only relays. This makes it possible for the attacker to make some inferences about client paths that it would not be able to make otherwise.

There is an IPv6 exit proposal to address the first step for anonymous access to IPv6 resources on the Internet.

Full IPv6 support is definitely on our "someday" list; it will come along faster if somebody who wants it does some of the work.


Doesn't Tor enable criminals to do bad things?

For the answer to this question and others, please see our new Tor Abuse FAQ.

How do I respond to my ISP about my exit relay?

A collection of templates for successfully responding to ISPs is collected here?.

Info to help with police or lawyers questions about exit relays

Please read the legal FAQ written by EFF lawyers. There's a growing legal directory of people who may be able to help you.

If you need to check that a Tor exit node was running at a certain date and time on a given IP address, you can look in the release archive for signed, time-stamped lists of nodes.

Comparison to related projects

We preface this section by saying that we like having lots of anonymity systems out there. Anonymity systems are good, more anonymity systems are better. Yay anonymity.

Onion Routing

Tor *is* onion routing.

However, if you would like to go to the site of the original Onion Router research project and read up a bit on what the project did initially, you can find more at

Freedom Network

Zero-Knowledge Systems used to market a product called Freedom that aimed to provide its customers with strong anonymity through a commercially owned network of proxies. ZKS shut down the network in 2001, because they couldn't bring in enough money to cover it. Tor's approach is quite similar to Freedom's, but there are a few differences.

  • Tor transports TCP streams, whereas Freedom transported IP packets. We explain the trade-offs.
  • Tor aims to be long-term sustainable by being non-proprietary, non-commercial, and volunteer-based. Freedom on the other hand was proprietary, commercial, and no longer exists.


Tor and Freenet work on different levels: Tor is about transport, and Freenet is about storage/retrieval. So it would make perfect sense (assuming we become happy with the scalability and decentralization properties) to use Tor to get anonymous transport between Freenet nodes.

In fact, because Freenet aims to provide anonymity in the sense of the ability to deny ("you know I am the one who gave you that file, but you can't prove I am the original author"). Tor's notion of anonymity ("you can't find my location") is complementary.


I2P should really be seen as the dual of Tor. Basically every engineering decision Tor has made, I2P made the opposite. Their transport is UDP instead of TCP, they provide primarily an internal network rather than routing to the general Internet (though this is possible), and they provide Java, python, and C APIs to applications to use, though a HTTP proxy interface is provided as well for simple web browsing to hidden sites. A handful of applications have been ported to these APIs, including a Gnutella client (I2PHex), a plugin for Azureus, a web based bittorrent client (I2PSnark), and a distributed anonymous content system called Syndie. A generalized port bridge called I2P tunnel also exists for connecting anything that will listen on a TCP socket. I2P in-proxies also have been written that allow the I2P hidden web to be indexed by Google.

Beyond engineering differences, I2P and Tor really are remarkably similar. Both are free route mix nets with nearly identical concepts of tunnels/circuits, though in I2P upstream and downstream channels are separated, allowing you to configure these channels separately. The hidden service endpoints are handled slightly differently in that so-called "garlic routing" further mixes traffic between the lease set holder (like Tor's Introduction Point) and the client connector (like Tor's Rendezvous Point). This extra mix makes it difficult for the two points to differentiate individual streams directed at a given hidden service (this mitigates their ability to introduce timing patterns in the streams to detect at a peer and determine the source).

I2P aims to provide variable traffic latency, so that users who choose higher latency will get more security. While they have proposed ideas about how this might be developed further, currently it functions by allowing the user to configure path lengths for browsing, hidden sites, and individual applications that are built upon I2P's APIs.

For better or for worse, the main I2P developers and most of the surrounding community prefer to keep their identities private, but at some point a Raccoon crawled out of a trashcan and attempted to prove attack duration times for various values of these parameters using standard known attacks on free route mix nets, so there is at least some justification for certain choices. Short tunnels lengths are suitable for for clients who connect on a short term basis and rotate their introduction point keys periodically, where as longer term servers should be using 2-3 length tunnels.

It should be noted, however, than since everyone in the I2P network is forced to be a server, it is possible to correlate uptimes of nodes versus uptimes of long running services. This attack has actually been demonstrated to work reasonably well on the existing I2P net in the absence of active countermeasures on the part of the hidden service operator (such as randomly taking their hidden service down and/or changing IPs). Tor keeps non-routing clients out of the public directory, which prevents this. The I2P developer has voiced desire to eventually do the same.

In short, I2P is an excellent system for those interested in playing with a mix specifically designed to support P2P networks and distributed anonymous content publishing - areas where Tor places much less development effort and emphasis.

Commercial one-hop proxies

There are businesses that provide single-hop proxy servers that relay their users' traffic. Other hosts on the Internet see traffic as coming from these servers, and not from the original users. Some of these services also perform additional scrubbing to prevent applications from leaking user information.

Tor differs from these services in several important ways:

  • If you use only a single proxy, the operator of that proxy -- or anyone who can break into the proxy's computer -- can trace communications. Also, an eavesdropper who can target that proxy's ISP can mount trivial timing attacks to link senders to recipients.
  • If you use a single service provider, even using a chain of their proxies does not prevent a compromised provider from linking communications.
  • We tell you how Tor works, and we give you all the source code. You can decide for yourself, or pay any security expert to decide, whether it is safe to use.
  • Tor is free software. As above, this means anyone can use it and improve it. It also means that you can get it and use it at no cost.

Furthermore, not all of these systems use encryption between the user and the proxy. Almost none of them have the kind of open design needed to analyze their security.

Many of these services are, however, easier to install and configure than Tor currently is.

Examples include: Hotspot Shield, Anonymizer, Anonymouse

Open proxy aggregators

There are several services -- some free, some commercial -- that maintain a list of open proxies on the Internet and relay your traffic through one or two randomly chosen open proxies.

These services differ from commercial one-hop proxies in that the operators of the one-hop proxies are not necessarily the same as the service provider. In addition to the other disadvantages of one-hop proxies discussed above, these services have further disadvantages:

  • Remember, one-hop proxies (unlike Tor) require you to trust a single proxy operator completely. But when the proxy operator is unknown, you are effectively forced to trust the operator of a random computer with your anonymity. (And don't forget that some open proxies are operated by hostile software without the server owner's knowledge; some proxy aggregators try to eliminate these, but some don't.)
  • Many one-hop proxies, as above, don't support encryption.
  • The aggregator is a single point of failure: anybody who can flood, trim, compromise, or alter the list of proxies can direct traffic to arbitrarily chosen hostile proxies. Usually, there are no countermeasures against this attack.

Again, most of these services are difficult to analyse, since their designs are not well specified in any public documentation. Often, in fact, it is hard to tell proxy aggregators from one-hop proxy operators, since they don't always come out and say how, exactly, they are finding their proxies.


Blossom was a research project by Geoff Goodell at Harvard University that addresses network neutrality.

Network fragmentation occurs when the availability of a resource to an observer is a function of how the observer is connected to the network. In the context of the Internet, network fragmentation is well-known and occurs in many situations, including an increasing preponderance of network address translation, firewalls, and virtual private networks. Recently, however, new threats to Internet consistency have received media attention. Alternative namespaces have emerged as the result of formal objections to the process by which Internet names and addresses are provisioned. In addition, various governments and service providers around the world have deployed network technology that (accidentally or intentionally) restricts access to certain Internet content. Combined with the aforementioned sources of fragmentation, these new concerns provide ample motivation for a network that allows users the ability to specify not only the network location of Internet resources they want to view but also the perspectives from which they want to view them.

Blossom involves building an independent network that uses Tor for constructing circuits and transporting data. Both Blossom and Tor consist of a network of proxies, but where Tor chooses to optimize for anonymity, Blossom chooses to optimize for reachability instead. So, Blossom affords users the ability to specify the perspective from which they want to view the Internet by sacrificing many of the stronger anonymity benefits of Tor. For example, unlike the Tor network, the Blossom network performs routing, allowing overlay topologies that are not fully-connected.

While there is some source code for Blossom in Tor Project's repository, it is a few years obsolete.

Attachments (1)

Download all attachments as: .zip