- Added a mechanism to handle dynamically allocating numerous ports at the same time without collisions per jogli5er's suggestion in PR 15.
- Switched 'granax' package to '@deadcanaries/granax' as suggested in issue 12.
- Added a entrypoint file so the node.js process is not the root process, so it responds to SIGINT calls (Ctrl+C).
- Updates
multi-rpc
to version 1.5.5.
- Updates
multi-rpc
to version 1.4.1.
- Updates
multi-rpc
to version 1.4.0.
- Updates
multi-rpc
to version 1.1.9.
- Updates
multi-rpc
to version 1.1.1.
- Prevents errors that occur when connecting to the destination in the SOCKS Proxy and HTTP Proxy from crashing the applications
- Replaces
jrpc2
withmulti-rpc
for providing the RPC Interface. No changes to the application or API
- References granax in
default_config.js
to comply with licensing requirements
- Adds API documentation. To generate run
npm run docs
and open underdocs/index.html
- Much of the README has been moved to the wiki
- Updates granax to 3.1.4 which fixes a bug on MacOS
- The constructor on
ControlServer
now takes an nconf instance as the first argument and a logger as the second
- Instances can now added to one or more groups by setting the
Group
field in the instance definition to a single string or array - You can now proxy through a specific instance using the username field when connecting to a proxy by setting
--proxyByName
or-n
to "individual" or true. For example: to connect to an instance namedinstance-1
via http usehttp://instance-1:@localhost:9080
- You can also connect to a specific group of instances by setting
--proxyByName
or-n
to "group". If enabled, requests made to://foo:@localhost:9080
would be routed to instances in thefoo
group in round-robin fashion - The control server will accept WebSocket connections if the
--websocketControlHost
or-w
argument is set. If the argument is used without a hostname it will default to 9078 on all interfaces - All servers (DNS, HTTP, SOCKS and Control) all have a
listen
method which takes a port and optionally a host. It will return a Promise that will resolve when the server is listening - Application configuration can be changed at runtime using the
getConfig
andsetConfig
RPC methods - Application configuration can be saved and loaded from disk using the
saveConfig
andloadConfig
RPC methods
- All "Port" config options (e.g. socksPort) have been replaced with "Host", and can take a full host (e.g. 127.0.0.1:9050) for its value. This allows you to bind Tor Router to a specific hostname. If just a port is given it will bind to all interfaces
- All methods now return promises instead of accepting callbacks
- The
logger
argument to the constructor of all classes is now optional - The
Config
property of instance definitions will now inherit all properties fromTorPool.default_tor_config
- The mocha test has been split into individual files all under
test/
- DNS shows the source/destination hostname/port in logs instead of what the query was resolved to
TorProcess
takes an instance definition as the second argument in its constructor
- The
new_ips
andnew_ip_at
TorPool andnew_ip
TorProcess have been removed. Usenew_identites
,new_identity_at
andnew_identity
instead. - The
getDefaultTorConfig
andsetDefaultTorConfig
RPC methods have removed. UsegetConfig('torConfig')
andsetConfig('torConfig', value)
instead.
- Adds a changelog
- Adds
queryInstanceByName
andqueryInstanceAt
RPC methods to retrieve individual instances
- Makes changes to ensure compatibility on Windows
- Test suites for
DNSServer
,HTTPServer
,SOCKSServer
andControlServer
- Added
TorPool.set_config_all
method to change configuration of all active instances
- Cleans up test suites for
TorPool
andTorProcess
- Removes potential security vulnerability
setTorConfig
rpc method will now change the configuration of active instances,setDefaultTorConfig
andgetDefaultTorConfig
will set or get the configuration of future instances- The default Tor Configuration will be applied to instances when the
Config
property on the instance definition is not set
- Fixes bug with the application not binding to port numbers specified on the command line
- Bundles the Tor executable with the application. Tor will be downloaded during
npm install
- Signals and Configuration changes can be sent to live Tor instances via the Tor Control Protocol. Serveral RPC and
TorPool
methods have been added.
- By default Tor Router will use the Tor executable bundled with the application, to override use the
TOR_PATH
environment variable - Deprecates the
TorPool.new_ips
andTorProcess.new_ip
functions useTorPool.new_identites
candTorProcess.new_identity
function respectively.
- Adds documentation on all available RPC Methods
- Allows different load-balance methods to be defined, and changed at runtime and via RPC
- Each instance can have started with a specific configuration (torrc) by setting the
Config
property in the definition
- If the
Name
property in the definition was not set the data directory will be deleted when the Tor Process exits - Switches from "commander" to "nconf"/"yargs" for command line processing, switches however will remain the same
- Tor Router and child Tor processes are run as an unprivilieged user in the Docker container
- Fixes Issue #4 which affects dynamically created Tor Instances
- Network traffic is only logged when
logLevel
is set to "verbose"
- Fixes typo bug in Control Server
- Replaced socket.io with JSON-RPC 2 as the RPC protocol
- The Dockerfile includes an
ENTRYPOINT
for Tor Router
- Adds an HTTP Proxy Server
HTTPServer
which can HTTP-Connect requests (HTTPS traffic). - Adds a
queryInstances
RPC function as requested in Issue #3
- Removes the "docker-compose.yml" file
- The Dockerfile will now use Node.js version 8
- Fixes a bug that occures on OS X
- Fixes a bug with an RPC Method
- Changes the arguments tor-router will be launched with when run using npm start
- Adds the Apache Licence Version 2 as the project's licence
- Data sent in a request before a Tor instance comes online is held in a buffer.
- In
SOCKSServer
waits for a Tor instance in the pool to come online before making a connection.
- Rewrites the application as a proxy server written as a node.js app.