Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexkirsz/dispatch
Combine internet connections, increase your download speed
https://github.com/alexkirsz/dispatch
Last synced: 7 days ago
JSON representation
Combine internet connections, increase your download speed
- Host: GitHub
- URL: https://github.com/alexkirsz/dispatch
- Owner: alexkirsz
- License: apache-2.0
- Created: 2021-07-18T19:30:54.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-04-07T18:56:05.000Z (7 months ago)
- Last Synced: 2024-10-14T20:37:39.631Z (25 days ago)
- Language: Rust
- Size: 93.8 KB
- Stars: 398
- Watchers: 8
- Forks: 32
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
- awesome-useful-projects - <img src="https://icon.horse/icon/github.com" height="20px" align="center"/>/alexkirsz/dispatch - Combine internet connections (Jump To / Other)
- awesome-useful-projects - <img src="https://icon.horse/icon/github.com" height="20px" align="center"/>/alexkirsz/dispatch - Combine internet connections (Jump To / Other)
- awesome-repositories - alexkirsz/dispatch - Combine internet connections, increase your download speed (Rust)
README
# dispatch
A SOCKS proxy that balances traffic between network interfaces.
_Should work on macOS, Windows, and Linux. Only tested on macOS for now._
This is a Rust rewrite of [dispatch-proxy](https://github.com/alexkirsz/dispatch-proxy), originally written in CoffeeScript and targeting Node.js.
## Quick links
- [Installation](#installation)
- [Rationale](#rationale)
- [Use Cases](#use-cases)
- [Usage](#usage)
- [Examples](#examples)
- [How It Works](#how-it-works)
- [License](#license)## Installation
### From pre-built binaries
You can download pre-built binaries for macOS, Windows, and Linux from the [releases page](https://github.com/alexkirsz/dispatch/releases).
### From crates.io
You'll need Rust version 1.51.0 or later. You can use [rustup](https://rustup.rs/) to install the latest version of the Rust compiler toolchain.
```
cargo install dispatch-proxy
```## Rationale
You often find yourself with multiple unused internet connections—be it 5G mobile hotspot or a free Wi-Fi network—that your system won't let you use alongside your primary one.
For instance, my first student residence used to provide me with cabled and wireless internet accesses. Both were separately capped at a bandwidth 1,200kB/s. My 3G mobile internet access provided me with an additional 400kB/s. Combining all of these with dispatch and a download manager resulted in a 2,800kB/s effective bandwidth!
## Use cases
The possibilities are endless:
- Use it with a download manager or a BitTorrent client, combining multiple connections' bandwidth when downloading single files;
- Combine as many interfaces as you have access to into a single load-balanced interface;
- Run different apps on separate interfaces with multiple proxies (e.g. for balancing download/upload);
- Create a hotspot proxy at home that connects through Ethernet and your 5G card for all your mobile devices;
- etc.## Usage
```
$ dispatch
A SOCKS proxy that balances traffic between network interfaces.Usage: dispatch [OPTIONS]
Commands:
list Lists all available network interfaces
start Starts the SOCKS proxy server
help Print this message or the help of the given subcommand(s)Options:
-d, --debug Write debug logs to stdout instead of a file
-h, --help Print help
-V, --version Print version
``````
$ dispatch start -h
Starts the SOCKS proxy serverUsage: dispatch start [OPTIONS] ...
Arguments:
[/priority]
... The network interface IP addresses to dispatch to, in the form ofOptions:
--ip Which IP to accept connections from [default: 127.0.0.1]
--port Which port to listen to for connections [default: 1080]
-h, --help Print help
```## Examples
```
$ dispatch list
```Lists all available network interfaces.
```
$ dispatch start 10.0.0.0 fdaa:bbcc:ddee:0:1:2:3:4
```Dispatch incoming connections to local addresses `10.0.0.0` and `fdaa:bbcc:ddee:0:1:2:3:4`.
```
$ dispatch start 10.0.0.0/7 10.0.0.1/3
```Dispatch incoming connections to `10.0.0.0` 7 times out of 10 and to `10.0.0.1` 3 times out of 10.
## How It Works
Whenever the SOCKS proxy server receives an connection request to an address or domain, it selects one of the provided local addresses using the [Weighted Round Robin](https://en.wikipedia.org/wiki/Weighted_round_robin) algorithm. All further connection traffic will then go through the interface corresponding to the selected local address.
**Beware:** If the requested address or domain resolves to an IPv4 (resp. IPv6) address, an IPv4 (resp. IPv6) local address must be provided.
#### License
Licensed under either of Apache License, Version
2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in this crate by you, as defined in the Apache-2.0 license, shall
be dual licensed as above, without any additional terms or conditions.