Protoplex
A protocol multiplexer in Go
In a nutshell, this application lets you run multiple kinds of applications on a single port. This is useful for, for instance, running an OpenVPN server and a TLS/HTTPS server on port 443, which in turn is useful for evading firewalls that block all other outbound ports. The project is written primarily in Go, distributed under the MIT License license, first published in 2018. Key topics include: go, golang, golang-application, golang-server, multiplexer.
protoplex
An application protocol multiplexer
What is this?
In a nutshell, this application lets you run multiple kinds of applications
on a single port. This is useful for, for instance, running an OpenVPN server
and a TLS/HTTPS server on port 443, which in turn is useful for evading
firewalls that block all other outbound ports.
Running
Native
Assuming you have a properly configured Go setup, get and compile the multiplexer with
bashgo get github.com/Pandentia/protoplex/cmd/protoplex
and then run it with (for example, to run SSH and HTTPS)
bashprotoplex --ssh your_ssh_host:22 --tls your_webserver:443
Protoplex is now running on port 8443 and ready to accept connections.
For more extensive configuration, please see the output of --help.
Docker
A docker image may be used
for ease of use and deployment.
Goals
The concepts for this multiplexer were as follows:
- Resource usage about on par with
sslh - Easily extensible
- Highly dynamic
To this end, protoplex supports multiple matching methods for protocols:
- Bytestring comparison
- Regex matching
These can both be implemented for a protocol, with bytestrings taking
priority (due to efficiency). In addition, protocols support matching limits,
reducing the amount of protocols evaluated for a given handshake.
Protocol support
Currently supported protocols are:
- SSH
- HTTP
- TLS (/ HTTPS)
- OpenVPN
- SOCKS4 / SOCKS5
Feel free to file an issue
on the GitHub repository if you want a protocol to be supported. Please include
steps to accurately reproduce your client setup.
Alternatively, you may submit a pull request.
Contributors
Showing top 1 contributor by commit count.
