Generic TCP stream multiplexer, automatic tunnel configurer, command line, and web-based front ends.
This project is a special network tunnel that accepts an incoming connection, splits it's data across a number network tunnels (ssh/whatever), and reassembles the data from these tunnels on the other side. This allows bandwidth aggregation, reliability, redundancy, and increasing cost effectiveness of network utilization.
The program basicly consists of a client and server. An incoming connection is accepted by the client, the data from this socket is split among a number of intermediate sockets and recombined by the server at the other end:
tunnels /-------------\ initiating socket -> client ---------------- server -> remote server app \-------------/ example: port 5555 multiple ports/interfaces port 4444
This is like a regular unencrypted ssh tunnel, except the data is divided among many tunnels. It would not be much more difficult to allow reverse connections as well.
So, overall topology on one side should look like this:
command line admin programs: manager daemon: ----------- ------------------ |addtunnel|---->-P| <-admin port | ----------- / | | |deltunnel|-/ | | tunnels ----------- | --------------- server socks /-------: | | Multiplexing|P--<-------------<WBR>------: to remote machine client socks--->-P|--| API | / \-------: | | |P-->----/ server output--<-P|--| | client socks | --------------| ------------------ ^ | The API implements the client and server. Notes: The arrows indicate the direction in which the connections are initiated, but data flows in both directions on all sockets. There is one admin port, and zero or more ports of all other types of connections.
Possible command line examples: Here is the rough idea. I can provide more refined examples once I dig out my notes.
- # msaddtunnels --names=joe,frank,bob --tunnels=joe.com:3456,frank.ru:789,bob:6
- # mslimittunnel joe 50
- # mspriotunnel frank 1
- # mspriotunnel joe 15
- # mscreategroup -n dsl_users -t joe,frank
- # mssetdownloadlimit -g dsl_users 100
The project is very close to a beta state. When the basic program is complete I would like to do more experimenting with schedulers optomized for different constraints.
2005 ANS.