Can't Get Tor SOCKS Proxy to Work

Hi

I created a thread found here How to Use Tor Transparently and Also Bridged to an Interface a while back asking about how to use Tor as a proxy and on an interface. Everyone was very helpful to explain how it works but at the time I was only looking for explanations and examples I could use for when I got round to trying it out. The thread is now closed and I've found some free time. However, from the help I was given it doesn't match up with the Tor config files that I have opened up.

For the time being I'm just trying to get the proxy server aspect working. On my Android phone I've tried entering 192.168.1.1 as the proxy's host name and 9050 as the proxy port but I'm presented with a "Proxy Server Refused Connection".

I don't see any option for TransPort in the new configs.

/etc/tor/torsocks.conf

# This is the configuration for libtorsocks (transparent socks) for use
# with tor, which is providing a socks server on port 9050 by default.
#
# Lines beginning with # and blank lines are ignored
# Much more documentation than provided in these comments can be found in
#
# torsocks.conf(5), torsocks(1) and torsocks(8) manpages.

# Default Tor address and port. By default, Tor will listen on localhost for
# any SOCKS connection and relay the traffic on the Tor network.
TorAddress 127.0.0.1
TorPort 9050

# Tor hidden sites do not have real IP addresses. This specifies what range of
# IP addresses will be handed to the application as "cookies" for .onion names.
# Of course, you should pick a block of addresses which you aren't going to
# ever need to actually connect to. This is similar to the MapAddress feature
# of the main tor daemon.
OnionAddrRange 127.42.42.0/24

# SOCKS5 Username and Password. This is used to isolate the torsocks connection
# circuit from other streams in Tor. Use with option IsolateSOCKSAuth (on by
# default) in tor(1). TORSOCKS_USERNAME and TORSOCKS_PASSWORD environment
# variable overrides these options.
#SOCKS5Username <username>
#SOCKS5Password <password>

# Set Torsocks to accept inbound connections. If set to 1, listen() and
# accept() will be allowed to be used with non localhost address. (Default: 0)
#AllowInbound 1

# Set Torsocks to allow outbound connections to the loopback interface.
# If set to 1, connect() will be allowed to be used to the loopback interface
# bypassing Tor. If set to 2, in addition to TCP connect(), UDP operations to
# the loopback interface will also be allowed, bypassing Tor. This option
# should not be used by most users. (Default: 0)
#AllowOutboundLocalhost 1

# Set Torsocks to use an automatically generated SOCKS5 username/password based
# on the process ID and current time, that makes the connections to Tor use a
# different circuit from other existing streams in Tor on a per-process basis.
# If set, the SOCKS5Username and SOCKS5Password options must not be set.
# (Default: 0)
#IsolatePID 1

/etc/tor/torrc

## Configuration file for a typical Tor user
## Last updated 28 February 2019 for Tor 0.3.5.1-alpha.
## (may or may not work for much older or much newer versions of Tor.)
##
## Lines that begin with "## " try to explain what's going on. Lines
## that begin with just "#" are disabled commands: you can enable them
## by removing the "#" symbol.
##
## See 'man tor', or https://www.torproject.org/docs/tor-manual.html,
## for more options you can use in this file.
##
## Tor will look for this file in various places based on your platform:
## https://www.torproject.org/docs/faq#torrc

TransPort 0.0.0.0:9040
TransPort [::]:9040

## Tor opens a SOCKS proxy on port 9050 by default -- even if you don't
## configure one below. Set "SOCKSPort 0" if you plan to run Tor only
## as a relay, and not make any local application connections yourself.
#SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections.
#SOCKSPort 192.168.0.1:9100 # Bind to this address:port too.

## Entry policies to allow/deny SOCKS requests based on IP address.
## First entry that matches wins. If no SOCKSPolicy is set, we accept
## all (and only) requests that reach a SOCKSPort. Untrusted users who
## can access your SOCKSPort may be able to learn about the connections
## you make.
#SOCKSPolicy accept 192.168.0.0/16
#SOCKSPolicy accept6 FC00::/7
#SOCKSPolicy reject *

## Logs go to stdout at level "notice" unless redirected by something
## else, like one of the below lines. You can have as many Log lines as
## you want.
##
## We advise using "notice" in most cases, since anything more verbose
## may provide sensitive information to an attacker who obtains the logs.
##
## Send all messages of level 'notice' or higher to /var/log/tor/notices.log
#Log notice file /var/log/tor/notices.log
## Send every possible message to /var/log/tor/debug.log
#Log debug file /var/log/tor/debug.log
## Use the system log instead of Tor's logfiles
Log notice syslog
## To send all messages to stderr:
#Log debug stderr

## Uncomment this to start the process in the background... or use
## --runasdaemon 1 on the command line. This is ignored on Windows;
## see the FAQ entry if you want Tor to run as an NT service.
#RunAsDaemon 1

## The directory for keeping all the keys/etc. By default, we store
## things in $HOME/.tor on Unix, and in Application Data\tor on Windows.
DataDirectory /var/lib/tor

## The port on which Tor will listen for local connections from Tor
## controller applications, as documented in control-spec.txt.
#ControlPort 9051
## If you enable the controlport, be sure to enable one of these
## authentication methods, to prevent attackers from accessing it.
#HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
#CookieAuthentication 1

############### This section is just for location-hidden services ###

## Once you have configured a hidden service, you can look at the
## contents of the file ".../hidden_service/hostname" for the address
## to tell people.
##
## HiddenServicePort x y:z says to redirect requests on port x to the
## address y:z.

#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:80

#HiddenServiceDir /var/lib/tor/other_hidden_service/
#HiddenServicePort 80 127.0.0.1:80
#HiddenServicePort 22 127.0.0.1:22

################ This section is just for relays #####################
#
## See https://www.torproject.org/docs/tor-doc-relay for details.

## Required: what port to advertise for incoming Tor connections.
#ORPort 9001
## If you want to listen on a port other than the one advertised in
## ORPort (e.g. to advertise 443 but bind to 9090), you can do it as
## follows.  You'll need to do ipchains or other port forwarding
## yourself to make this work.
#ORPort 443 NoListen
#ORPort 127.0.0.1:9090 NoAdvertise
## If you want to listen on IPv6 your numeric address must be explictly
## between square brackets as follows. You must also listen on IPv4.
#ORPort [2001:DB8::1]:9050

## The IP address or full DNS name for incoming connections to your
## relay. Leave commented out and Tor will guess.
#Address noname.example.com

## If you have multiple network interfaces, you can specify one for
## outgoing traffic to use.
## OutboundBindAddressExit will be used for all exit traffic, while
## OutboundBindAddressOR will be used for all OR and Dir connections
## (DNS connections ignore OutboundBindAddress).
## If you do not wish to differentiate, use OutboundBindAddress to
## specify the same address for both in a single line.
#OutboundBindAddressExit 10.0.0.4
#OutboundBindAddressOR 10.0.0.5

## A handle for your relay, so people don't have to refer to it by key.
## Nicknames must be between 1 and 19 characters inclusive, and must
## contain only the characters [a-zA-Z0-9].
## If not set, "Unnamed" will be used.
#Nickname ididnteditheconfig

## Define these to limit how much relayed traffic you will allow. Your
## own traffic is still unthrottled. Note that RelayBandwidthRate must
## be at least 75 kilobytes per second.
## Note that units for these config options are bytes (per second), not
## bits (per second), and that prefixes are binary prefixes, i.e. 2^10,
## 2^20, etc.
#RelayBandwidthRate 100 KBytes  # Throttle traffic to 100KB/s (800Kbps)
#RelayBandwidthBurst 200 KBytes # But allow bursts up to 200KB (1600Kb)

## Use these to restrict the maximum traffic per day, week, or month.
## Note that this threshold applies separately to sent and received bytes,
## not to their sum: setting "40 GB" may allow up to 80 GB total before
## hibernating.
##
## Set a maximum of 40 gigabytes each way per period.
#AccountingMax 40 GBytes
## Each period starts daily at midnight (AccountingMax is per day)
#AccountingStart day 00:00
## Each period starts on the 3rd of the month at 15:00 (AccountingMax
## is per month)
#AccountingStart month 3 15:00

## Administrative contact information for this relay or bridge. This line
## can be used to contact you if your relay or bridge is misconfigured or
## something else goes wrong. Note that we archive and publish all
## descriptors containing these lines and that Google indexes them, so
## spammers might also collect them. You may want to obscure the fact that
## it's an email address and/or generate a new address for this purpose.
##
## If you are running multiple relays, you MUST set this option.
##
#ContactInfo Random Person <nobody AT example dot com>
## You might also include your PGP or GPG fingerprint if you have one:
#ContactInfo 0xFFFFFFFF Random Person <nobody AT example dot com>

## Uncomment this to mirror directory information for others. Please do
## if you have enough bandwidth.
#DirPort 9030 # what port to advertise for directory connections
## If you want to listen on a port other than the one advertised in
## DirPort (e.g. to advertise 80 but bind to 9091), you can do it as
## follows.  below too. You'll need to do ipchains or other port
## forwarding yourself to make this work.
#DirPort 80 NoListen
#DirPort 127.0.0.1:9091 NoAdvertise
## Uncomment to return an arbitrary blob of html on your DirPort. Now you
## can explain what Tor is if anybody wonders why your IP address is
## contacting them. See contrib/tor-exit-notice.html in Tor's source
## distribution for a sample.
#DirPortFrontPage /etc/tor/tor-exit-notice.html

## Uncomment this if you run more than one Tor relay, and add the identity
## key fingerprint of each Tor relay you control, even if they're on
## different networks. You declare it here so Tor clients can avoid
## using more than one of your relays in a single circuit. See
## https://www.torproject.org/docs/faq#MultipleRelays
## However, you should never include a bridge's fingerprint here, as it would
## break its concealability and potentially reveal its IP/TCP address.
##
## If you are running multiple relays, you MUST set this option.
##
## Note: do not use MyFamily on bridge relays.
#MyFamily $keyid,$keyid,...

## Uncomment this if you want your relay to be an exit, with the default
## exit policy (or whatever exit policy you set below).
## (If ReducedExitPolicy, ExitPolicy, or IPv6Exit are set, relays are exits.
## If none of these options are set, relays are non-exits.)
#ExitRelay 1

## Uncomment this if you want your relay to allow IPv6 exit traffic.
## (Relays do not allow any exit traffic by default.)
#IPv6Exit 1

## Uncomment this if you want your relay to be an exit, with a reduced set
## of exit ports.
#ReducedExitPolicy 1

## Uncomment these lines if you want your relay to be an exit, with the
## specified set of exit IPs and ports.
##
## A comma-separated list of exit policies. They're considered first
## to last, and the first match wins.
##
## If you want to allow the same ports on IPv4 and IPv6, write your rules
## using accept/reject *. If you want to allow different ports on IPv4 and
## IPv6, write your IPv6 rules using accept6/reject6 *6, and your IPv4 rules
## using accept/reject *4.
##
## If you want to _replace_ the default exit policy, end this with either a
## reject *:* or an accept *:*. Otherwise, you're _augmenting_ (prepending to)
## the default exit policy. Leave commented to just use the default, which is
## described in the man page or at
## https://www.torproject.org/documentation.html
##
## Look at https://www.torproject.org/faq-abuse.html#TypicalAbuses
## for issues you might encounter if you use the default exit policy.
##
## If certain IPs and ports are blocked externally, e.g. by your firewall,
## you should update your exit policy to reflect this -- otherwise Tor
## users will be told that those destinations are down.
##
## For security, by default Tor rejects connections to private (local)
## networks, including to the configured primary public IPv4 and IPv6 addresses,
## and any public IPv4 and IPv6 addresses on any interface on the relay.
## See the man page entry for ExitPolicyRejectPrivate if you want to allow
## "exit enclaving".
##
#ExitPolicy accept *:6660-6667,reject *:* # allow irc ports on IPv4 and IPv6 but no more
#ExitPolicy accept *:119 # accept nntp ports on IPv4 and IPv6 as well as default exit policy
#ExitPolicy accept *4:119 # accept nntp ports on IPv4 only as well as default exit policy
#ExitPolicy accept6 *6:119 # accept nntp ports on IPv6 only as well as default exit policy
#ExitPolicy reject *:* # no exits allowed

## Bridge relays (or "bridges") are Tor relays that aren't listed in the
## main directory. Since there is no complete public list of them, even an
## ISP that filters connections to all the known Tor relays probably
## won't be able to block all the bridges. Also, websites won't treat you
## differently because they won't know you're running Tor. If you can
## be a real relay, please do; but if not, be a bridge!
##
## Warning: when running your Tor as a bridge, make sure than MyFamily is
## NOT configured.
#BridgeRelay 1
## By default, Tor will advertise your bridge to users through various
## mechanisms like https://bridges.torproject.org/. If you want to run
## a private bridge, for example because you'll give out your bridge
## address manually to your friends, uncomment this line:
#PublishServerDescriptor 0

## Configuration options can be imported from files or folders using the %include
## option with the value being a path. If the path is a file, the options from the
## file will be parsed as if they were written where the %include option is. If
## the path is a folder, all files on that folder will be parsed following lexical
## order. Files starting with a dot are ignored. Files on subfolders are ignored.
## The %include option can be used recursively.
#%include /etc/torrc.d/
#%include /etc/torrc.custom

User tor

TransPort is for a HTTP proxy anyway, not SOCKS.

  • Question, why do you have a torsocks and torrc?

My setting is in etc/tor/torrc -

SocksPort 0.0.0.0:9050

root@OpenWrt:~# netstat -ltp | grep /tor
tcp        0      0 0.0.0.0:9050            0.0.0.0:*               LISTEN      3287/tor
1 Like

They are the two files I found under /etc/tor/ after I freshly compiled my own OpenWrt firmware.

On my Android device I take it in should be using the SOCKS Proxy instead?

Hummmm....what packages did you install? :thinking:

Using using opkg, I only need to install tor.

screen10

These are the packages I have installed. Is does indeed show I have the additional Tor SOCKS installed.

I ran the command netstat -ltp | grep /tor and it appears as though Tor is not running. I have tried manually running it with /etc/init.d/tor but no change.

Bear in mind that a SOCKS proxy (what TOR offers) is not a HTTP proxy (what most clients expect). Perhaps you need a proxy that acts as a bridge between both technologies (PRIVOXY, for example).

I've just flashed v19.07.3 to my Linksys EA6350v3 and purposely left out Tor from being included in the firmware. I have tried to install via LuCI OPKG and it saying there is a dependency that is unavailable libgcc1. I've re-ran make menuconfig and under Base System I already have libgcc marked with a *.

Missing Tor Depencies

I continued to install the package and it seems it has installed as I can see /etc/tor/torrc and /etc/config/tor.

Tor can be configured for both.

:+1:

That's correct.

  • /etc/tor/torrc is the config file from Tor
  • /etc/config/tor is the OpenWrt file to make system settings (e.g. specify location of the torrc file)

(/etc/config/tor appears new in version 19)

I do apologise for replying to such an old thread that I initially created. I hope everyone has a good year and Christmas. I've been doing some troubleshooting and I'm still unable to get it working but I have narrowed it down a little. I removed all traces of tor and then re-installed it with a slightly newer version which at the time of writing this is 0.4.4.5-1.

Firstly I checked to see if tor was running. In this case it was:

root@OpenWrt-AP1:~# ps | grep tor
18889 tor 18828 S /usr/sbin/tor --runasdaemon 0 -f /tmp/torrc
18898 root 1244 S grep tor

I then checked to see it was listening on any ports:

root@OpenWrt-AP1:~# netstat -tulpn | grep LISTEN | grep tor
tcp 0 0 127.0.0.1:9050 0.0.0.0:* LISTEN 18889/tor

I have also discovered the tor command which outputs the following:

root@OpenWrt-AP1:~# tor
Dec 02 19:35:39.463 [notice] Tor 0.4.4.5 running on Linux with Libevent 2.1.11-stable, OpenSSL 1.1.1g, Zlib 1.2.11, Liblzma N/A, and Libzstd N/A.
Dec 02 19:35:39.463 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Dec 02 19:35:39.464 [notice] Read configuration file "/etc/tor/torrc".
Dec 02 19:35:39.472 [notice] Opening Socks listener on 127.0.0.1:9050
Dec 02 19:35:39.472 [warn] Could not bind to 127.0.0.1:9050: Address in use. Is Tor already running?
Dec 02 19:35:39.472 [warn] Failed to parse/validate config: Failed to bind one of the listener ports.
Dec 02 19:35:39.472 [err] Reading config failed--see warnings above.

The only un-commented parameters of /etc/tor/torrc are the following:

Log notice syslog
DataDirectory /var/lib/tor
User tor

Next I decided add the following parameters to the bottom of /etc/tor/torrc

User tor
# RunAsDaemon 1
# PidFile /var/run/tor.pid
# DataDirectory /var/lib/tor
# AutomapHostsOnResolve 1
# VirtualAddrNetworkIPv4 10.0.0.0/12
DNSPort 127.0.0.1:9053
SOCKSPort 127.0.0.1:9050
TransPort 127.0.0.1:9040

I check this with the --verify-config parameter with the tor command and it checks out fine.

root@OpenWrt-AP1:~# tor --verify-config
Dec 02 19:47:30.502 [notice] Tor 0.4.4.5 running on Linux with Libevent 2.1.11-stable, OpenSSL 1.1.1g, Zlib 1.2.11, Liblzma N/A, and Libzstd N/A.
Dec 02 19:47:30.502 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Dec 02 19:47:30.502 [notice] Read configuration file "/etc/tor/torrc".
Configuration was valid

If I run just the tor command I get an error saying Could not bind to 127.0.0.1:9050: Address in use. Is Tor already running?

root@OpenWrt-AP1:~# tor
Dec 02 20:31:33.356 [notice] Tor 0.4.4.5 running on Linux with Libevent 2.1.11-stable, OpenSSL 1.1.1g, Zlib 1.2.11, Liblzma N/A, and Libzstd N/A.
Dec 02 20:31:33.356 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Dec 02 20:31:33.357 [notice] Read configuration file "/etc/tor/torrc".
Dec 02 20:31:33.365 [notice] Opening Socks listener on 127.0.0.1:9050
Dec 02 20:31:33.365 [warn] Could not bind to 127.0.0.1:9050: Address in use. Is Tor already running?
Dec 02 20:31:33.366 [notice] Opening DNS listener on 127.0.0.1:9053
Dec 02 20:31:33.366 [notice] Opened DNS listener on 127.0.0.1:9053
Dec 02 20:31:33.366 [notice] Opening Transparent pf/netfilter listener on 127.0.0.1:9040
Dec 02 20:31:33.366 [notice] Opened Transparent pf/netfilter listener on 127.0.0.1:9040
Dec 02 20:31:33.366 [notice] Closing partially-constructed DNS listener on 127.0.0.1:9053
Dec 02 20:31:33.367 [notice] Closing partially-constructed Transparent pf/netfilter listener on 127.0.0.1:9040
Dec 02 20:31:33.367 [warn] Failed to parse/validate config: Failed to bind one of the listener ports.
Dec 02 20:31:33.367 [err] Reading config failed--see warnings above.

A guide I have been following is one here alongside the official Tor client guide for OpenWrt here.

Anyone got any ideas?

You first check that Tor is running, then you try to start it, and it complains that it is already running... makes sense, doesn't it?

You must first stop it with "/etc/init.d/tor stop", then you can run it manually. Or you can restart it with "/etc/init.d/tor restart".

In case I misread your post, and you did stop it before trying to start it again, then there is some other daemon using the same port.

I'm still having problems with Tor. I have even installed Privoxy to forward requests to Tor but Privoxy is logging 503 errors.

/etc/config/dhcp

config dhcp 'tor'
option interface 'tor'
option leasetime '1h'
option limit '14'
option start '1'
#list dhcp_option '6,208.67.220.220,208.67.222.222'
#list dns '2620:119:35::35,2620:119:35::53'
#list rebind_domain '/onion/'
#list server '127.0.0.1#9053'

/etc/tor/torrc

RunAsDaemon 1
AllowUnverifiedNodes middle,rendezvous
Log notice syslog
## Only run as a client, never a relay or exit
ClientOnly
PidFile /var/run/tor.pid
DataDirectory /var/lib/tor
User tor
SocksPort 192.168.1.1:9050
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
VirtualAddrNetworkIPv4 10.192.0.0/10
TransPort 192.168.1.1:9040
DNSPort 192.168.1.1:9053

/etc/config/firewall

config defaults
	option forward 'REJECT'
	option input 'DROP'
	option output 'DROP'
	option synflood_protect '1'

config zone 'lan'
	option name 'lan'
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'ACCEPT'
	option network 'lan wg_lan'

config zone 'tor'
	option name 'tor'
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option syn_flood '1'
	option conntrack '1'
	option family 'ipv4'
	list network 'tor'

config rule
	option dest_port '67'
	option src 'tor'
	option name 'Allow-Tor-DHCP'
	option target 'ACCEPT'
	list proto 'udp'
	option family 'ipv4'

config rule
	option dest_port '9053'
	option src 'tor'
	option name 'Allow-Tor-DNS'
	option target 'ACCEPT'
	list proto 'udp'
	option family 'ipv4'

config rule
	option dest_port '9040'
	option src 'tor'
	option name 'Allow-Tor-Transparent'
	option target 'ACCEPT'
	list proto 'tcp'
	option family 'ipv4'

config rule
	option dest_port '9050'
	option name 'Allow-Tor-SOCKS'
	option family 'ipv4'
	option target 'ACCEPT'
	option src 'tor'
	list proto 'tcp'

Result of 'tor' command

root@OpenWrt-AP1:~# tor
May 02 13:16:28.904 [notice] Tor 0.4.4.8 running on Linux with Libevent 2.1.11-stable, OpenSSL 1.1.1i, Zlib 1.2.11, Liblzma N/A, and Libzstd N/A.
May 02 13:16:28.904 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
May 02 13:16:28.904 [notice] Read configuration file "/etc/tor/torrc".
May 02 13:16:28.909 [notice] You configured a non-loopback address '192.168.1.1:9053' for DNSPort. This allows everybody on your local network to use your machine as a proxy. Make sure this is what you wanted.
May 02 13:16:28.909 [notice] You configured a non-loopback address '192.168.1.1:9040' for TransPort. This allows everybody on your local network to use your machine as a proxy. Make sure this is what you wanted.
May 02 13:16:28.913 [warn] You specified a public address '0.0.0.0:9050' for SocksPort. Other people on the Internet might find your computer and use it as an open proxy. Please don't allow this unless you have a good reason.
May 02 13:16:28.914 [notice] You configured a non-loopback address '192.168.1.1:9053' for DNSPort. This allows everybody on your local network to use your machine as a proxy. Make sure this is what you wanted.
May 02 13:16:28.914 [notice] You configured a non-loopback address '192.168.1.1:9040' for TransPort. This allows everybody on your local network to use your machine as a proxy. Make sure this is what you wanted.
May 02 13:16:28.914 [notice] Opening Socks listener on 0.0.0.0:9050
May 02 13:16:28.914 [notice] Opened Socks listener on 0.0.0.0:9050
May 02 13:16:28.914 [notice] Opening DNS listener on 192.168.1.1:9053
May 02 13:16:28.914 [notice] Opened DNS listener on 192.168.1.1:9053
May 02 13:16:28.914 [notice] Opening Transparent pf/netfilter listener on 192.168.1.1:9040
May 02 13:16:28.914 [notice] Opened Transparent pf/netfilter listener on 192.168.1.1:9040

It doesn't seem to be conflicting with anything now but it's still doesn't seem to be listening as netstat -tulnp doesn't show anything relating to tor.