An experimental standalone tor-proxy service built with Go, using go-proxy, go-libtor and bine. This is a simple replacement to Tor's original tor-proxy. (Since this is experimental, I would still recommend to use the original Tor-proxy)
What this is for?
As you all know Tor is an anonymous network used to provide anonymous (tracking free) end-to-end network connectivity for users. In other words Tor network encrypts your IP with multiple layers such that the identity of the source cannot be determined anymore. Because of this capability of Tor, it is the de-facto network for hosting Dark-Web sites with almost 100% anonymity, clients use Tor browser to access these sites, usually those sites ending with
.onion. Apart from this, Tor network can also provide anynomity while accessing normal HTTP/s sites. Using this proxy, you can:
- Provide a single point of contact for multiple devices in your home/office to connect to External Tor Network (like an eggress).
- Access Dark-Web sites without having to install Tor browser on devices (use existing browsers, with proxy config)
- Stay anonymous over the internet - use Tor's power across multiple devices.
- Deploy this service as an ingress/eggress on K8s to anynomize your microservices.
- Access sites that are banned in your country (I don't recommend this and might not work always)
- Standalone binary - does not depend on
torapplication to be installed locally.
- Dockerfiles provided to build and deploy the service in a container environment.
- k8s deployment file provided to deploy tor-proxy on a cloud native environment. (For larger workloads).
How to set-up and use:
1. Install Locally (Not recommended)
Local installation requires a properly configured Go environment to be working and must be supporting Go modules. Just clone this repository:
git clone [email protected]:Narasimha1997/tor-proxy.git
cd tor-proxy export GOBIN=$PWD # skip this if you don't want the binary to be installed in current location go install
If everything goes well, you should see
tor-proxy binary, you can run this simply by:
Changing port: When starting up, the code looks for
PROXY_PORT env variable, by default it is set to
8000, you can change the default port by running (for example):
2a. Running the binary in container environment:
First, follow step-1. You can just place the pre-built go binary inside a container and execute it normally.
Dockerfile_binary has the steps for this, just use this dockerfile to build the container image:
docker build . -f Dockerfile -t tor-proxy:latest
2b. Build and run completely in a container environment:
This is the recommended approach, the default
Dockerfile has steps for this process. It basically uses a pre-packaged Golang environment and builds the code and all it's dependencies inside the container. Just run:
docker build . -t tor-proxy:latest
3. Run the container:
You can run this container just like any other normal container. (using docker for example)
docker run --rm -p 8000:8000 tor-proxy
If everything works as expected, you should be able to use
127.0.0.1:8000 as the tor proxy on local machine and
your.lan.ip.xx:8000 can be used across devices connected to a common network backbone. Or
some.public.ip.xx:8000 can be used worldwide, cosider deploying it on Heroku (example).
4. Configure your browser to use the proxy:
This step is easy and varies across browsers. For firefox - check-here
- Support Socks555 connections.
How to contribute?
There are no rules, just expecting contributions in the form of code, issues, PRs. (Not money, this is just a 2 hours weekend project and is completely focused on learning.)