Back to rankings

trimstray/multitor

Shell

Create multiple TOR instances with a load-balancing.

tormultitormulti-toronioninstancessockettor-networkcommunicationidentitytor-proxyload-balancerhttp-proxy
Star Growth
Stars
1.2k
Forks
189
Weekly Growth
Issues
20
5001k
Jan 2023Mar 2024May 2025Jul 2026
README

multitor

Create multiple TOR instances with load-balancing.

Travis-CI Version License

DescriptionIntroductionHow To UseParametersRequirementsDockerOtherLicenseWiki


Master

Description

It provides one single endpoint for clients. Supports HAProxy, socks protocol and http-proxy servers: polipo, privoxy and hpts.

In addition, you can view previously running TOR processes and create a new identity for all or selected processes.

The multitor has been completely rewritten on the basis of:

Introduction

multitor was created with the aim of initialize many TOR processes as quickly as possible. I could use many instances for my daily use programs (web browsers, messangers and other). In addition, I was looking for a tool that would increase anonymity when conducting penetration tests and testing the security of infrastructure.

Before using the multitor you need to remember:

  • TOR does attempt to generate a bunch of streams for you already. From this perspective, it is already load balancing (and it's much smarter at it than HAproxy)
  • the main goal is masking from where we get by sending requests to multiple streams. It is not so easy to locate where an attacker comes from. If you used http/https servers e.g. proxy servers, you will know what is going on but...
  • using multiple TOR instances can increase the probability of using a compromised circuit
  • multitor getting some bandwidth improvements just because it's a different way of connecting to TOR network
  • in multitor configuration mostly HAProxy checks the local (syn, syn/ack) socket - not all TOR nodes (also exist nodes). If there is a problem with the socket it tries to send traffic to others available without touching what's next - it does not ensure that the data will arrive
  • TOR network is a separate organism on which the multitor has no effect If one of the nodes is damaged and somehow the data can not leave the exit node, it is likely that a connection error will be returned or, at best, the data will be transferred through another local socket
  • HAProxy load balance network traffic between local TOR or http-proxy processes - not nodes inside TOR network

TOR is a fine security project and an excellent component in a strategy of defence in depth but it isn’t (sadly) a cloak of invisibility. When using the TOR, always remember about ssl (e.g. https) wherever it is possible.

Look also at Limitations.

How To Use

:heavy_exclamation_mark: For a more detailed understanding of multitor, its parameters, functions and how it all works, see the Manual.

It's simple:

# Clone this repository
git clone https://github.com/trimstray/multitor

# Go into the repository
cd multitor

# Install
./setup.sh install

# Run the app
multitor --init 2 --user debian-tor --socks-port 9000 --control-port 9900 --proxy privoxy --haproxy
  • symlink to bin/multitor is placed in /usr/local/bin
  • man page is placed in /usr/local/man/man8

Parameters

Provides the following options:

  Usage:
    multitor <option|long-option>

  Examples:
    multitor --init 2 --user debian-tor --socks-port 9000 --control-port 9900
    multitor --init 10 --user debian-tor --socks-port 9000 --control-port 9900 --proxy socks
    multitor --show-id --socks-port 9000

  Options:
        --help                        show this message
        --debug                       displays information on the screen (debug mode)
        --verbose                     displays more information about TOR processes
    -i, --init <num>                  init new tor processes
    -k, --kill                        kill all multitor processes
    -s, --show-id                     show specific tor process id
    -n, --new-id                      regenerate tor circuit
    -u, --user <string>               set the user (only with -i|--init)
        --socks-port <port_num|all>   set socks port number
        --control-port <port_num>     set control port number
        --proxy <proxy_type>          set socks or http (polipo, privoxy, hpts) proxy server
        --haproxy                     set HAProxy as a frontend for http proxies (only with --proxy)

Requirements

multitor uses external utilities to be installed before running:

This tool working with:

  • GNU/Linux (testing on Debian and CentOS)
  • Bash (testing on 4.4.19)

Also you will need root access.

Docker

See this project: docker-multitor

Other

Important

If you use this tool in other scripts where the output is saved everywhere, not on the screen, remember that you will not be able to use the generated password. I will correct this in the next version. If you do not use regenerate function of single or all TOR circuits with a password, you can safely restart the multitor which will do it for you.

Limitations

  • each TOR, http-proxy and HAProxy processes needs a certain number of memory. If the number of TOR processes is too big, the oldest one will be automatically killed by the system
  • Polipo is no longer supported but it is still a very good and light proxy. In my opinion the best http-proxy solution is Privoxy
  • I think this topic will be usefull for You before using multitor - How to run multiple Tor processes at once with different exit IPs?

Contributing

See this.

Project architecture

See this.

License

GPLv3 : http://www.gnu.org/licenses/

Free software, Yeah!

Related repositories
StreisandEffect/streisand

Streisand sets up a new server running your choice of WireGuard, OpenConnect, OpenSSH, OpenVPN, Shadowsocks, sslh, Stunnel, or a Tor bridge. It also generates custom instructions for all of these services. At the end of the run you are given an HTML file with instructions that can be shared with friends, family members, and fellow activists.

ShellOthervpnansible
twitter.com/streisandvpn
23.5k2k
HelloZeroNet/ZeroNet

ZeroNet - Decentralized websites using Bitcoin crypto and BitTorrent network

JavaScriptnpmOtherbittorrentp2p
zeronet.io
18.8k2.3k
onionshare/onionshare

Securely and anonymously share files, host websites, and chat with friends using the Tor network

PythonPyPIOthertorfile-sharing
onionshare.org
7k712
xjasonlyu/tun2socks

tun2socks - powered by gVisor TCP/IP stack

GoGo ModulesMIT Licensegolangtun2socks
github.com/xjasonlyu/tun2socks/wiki
5.4k634
Tribler/tribler

Privacy enhanced BitTorrent client with P2P content discovery

PythonPyPIGNU General Public License v3.0pythonstreaming
tribler.org
5.3k470
torproject/tor

unofficial git repo -- report bugs/issues/pull requests on https://gitlab.torproject.org/ --

ctor
gitweb.torproject.org/tor.git
5k954
DedSecInside/TorBot

Dark Web OSINT Tool

PythonPyPIOthertortor-network
4.4k705
cbeuw/Cloak

A censorship circumvention tool to evade detection by authoritarian state adversaries

GoGo ModulesGNU General Public License v3.0shadowsockscensorship-circumvention
4k350
ricochet-im/ricochet

Anonymous peer-to-peer instant messaging

C++Othertorc-plus-plus
ricochet.im
3.9k428
BrowserBox/BrowserBox

💚🇺🇸🗽Secure remote browsing anywhere, any way you like it.

ShellOtherembeddablechrome
browserbox.io
3.9k415
guardianproject/orbot-android

The Github home of Orbot: Tor on Android (Also available on gitlab!)

KotlinOthercensorship-circumventionanonymity
gitlab.com/guardianproject/orbot
3.4k465
Gedsh/InviZible

Android application for online privacy and security

JavaMavenGNU General Public License v3.0dnscrypttor
invizible.net
2.7k161