Skip to content

Web tunnel tool to expose local HTTP server to internet

License

Notifications You must be signed in to change notification settings

madhub/lite-http-tunnel

 
 

Repository files navigation

Lite HTTP Tunnel

A tunnel tool to help you expose local web (HTTP/WebSocket) server behind a NAT or firewall to the internet. Inspired by Ngrok and node-http-proxy.

http tunnel

How it work

The tunnel is based on WebSocket. We have a WebSocket connection between the client and server to stream HTTP/WebSocket requests from public server to your local server.

Usage

Deploy at public server

Firstly please deploy this project to your own web host with public internet access. The project is just a Node.js web server based on Express.js. So just deploy as what you do for deploying Node.js web server.

You can deploy with Heroku with Deploy To Heroku button below:

Deploy To Heroku

With Heroku, you can get a free HTTPS web server with a fixed public domain.

Get JWT Token

In first deployment, you need to provide JWT_GENERATOR_USERNAME and JWT_GENERATOR_PASSWORD environment variables, then you can access https://your_web_host_domain/tunnel_jwt_generator?username=your_generator_username&password=your_generator_password to get JWT Token. After you get JWT Token, you can remove JWT_GENERATOR_USERNAME and JWT_GENERATOR_PASSWORD environment variables to remove /tunnel_jwt_generator access.

You can also generate JWT Token in your local by following code here.

Setup Client

Install client

Please install lite-http-tunnel client in your local computer where it can access your local HTTP server.

$ npm i -g lite-http-tunnel
$ lite-http-tunnel -h

Config remote public server address:

$ lite-http-tunnel config server https://your_web_host_domain

Config jwt token that you got from server:

$ lite-http-tunnel config jwt your_jwt_token

Or With specified profile

$ lite-http-tunnel config server https://your_web_host_domain -p profile1
$ lite-http-tunnel config jwt your_jwt_token -p profile1

Start client

$ lite-http-tunnel start your_local_server_port

Please replace your_local_server_port with your local HTTP server port, eg: 8080.

After that you can access your local HTTP server by access your_public_server_domain.

Start with specified profile:

$ lite-http-tunnel start your_local_server_port -p profile1

Change origin to local server:

$ lite-http-tunnel start your_local_server_port -o localhost:5000

Change local server host:

$ lite-http-tunnel start your_local_server_port -h localhost1

Multiple Clients

The server steams web request to WebSocket connection which has same host value in request headers.

So if you have multiple domains for the proxy server, you can have multiple clients.

For example, you have https://app1.test.com and https://app2.test.com for this proxy server.

In client 1:

$ lite-http-tunnel config server https://app1.test.com -p profile1
$ lite-http-tunnel start your_local_server_port -p profile1

In client 2:

$ lite-http-tunnel config server https://app2.test.com -p profile2
$ lite-http-tunnel start your_local_server_port -p profile2

Related

A introduce article: Building a HTTP Tunnel with WebSocket and Node.JS

TODO

  • Add tests
  • Support multiple clients based on request path prefix

About

Web tunnel tool to expose local HTTP server to internet

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 99.0%
  • Dockerfile 1.0%