All Projects → skx → Tunneller

skx / Tunneller

Licence: gpl-2.0
Allow internal services, running on localhost, to be accessed over the internet..

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Tunneller

Megalodon
Mastodon, Pleroma and Misskey API client library for node.js and browser
Stars: ✭ 52 (-84.97%)
Mutual labels:  proxy, websockets
Websockets
WebSockets Inception
Stars: ✭ 120 (-65.32%)
Mutual labels:  proxy, websockets
Lanproxy
lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面、http代理、https代理、socks5代理...)。技术交流QQ群 678776401
Stars: ✭ 4,784 (+1282.66%)
Mutual labels:  proxy, ngrok
Sish
HTTP(S)/WS(S)/TCP Tunnels to localhost using only SSH.
Stars: ✭ 2,087 (+503.18%)
Mutual labels:  websockets, ngrok
Websocketd
Turn any program that uses STDIN/STDOUT into a WebSocket server. Like inetd, but for WebSockets.
Stars: ✭ 15,828 (+4474.57%)
Mutual labels:  proxy, websockets
Ws Tcp Relay
A simple relay between WebSocket clients and TCP servers
Stars: ✭ 186 (-46.24%)
Mutual labels:  proxy, websockets
Tcptunnel
将本地内网服务器映射到公网。
Stars: ✭ 72 (-79.19%)
Mutual labels:  proxy, ngrok
Pushpin
Proxy server for adding push to your API
Stars: ✭ 3,050 (+781.5%)
Mutual labels:  proxy, websockets
Websockify
Websockify is a WebSocket to TCP proxy/bridge. This allows a browser to connect to any application/server/service.
Stars: ✭ 2,942 (+750.29%)
Mutual labels:  proxy, websockets
Websocat
Command-line client for WebSockets, like netcat (or curl) for ws:// with advanced socat-like functions
Stars: ✭ 3,477 (+904.91%)
Mutual labels:  proxy, websockets
sudoku
Multiplayer concurrent sudoku. The winner is the player who fills the last cell correctly.
Stars: ✭ 15 (-95.66%)
Mutual labels:  websockets, ngrok
Lunnel
fast reverse-proxy
Stars: ✭ 293 (-15.32%)
Mutual labels:  proxy, ngrok
Espui
A simple web user interface library for ESP32 and ESP8266
Stars: ✭ 330 (-4.62%)
Mutual labels:  websockets
Proxygateway
Proxy Gateway基于openresty(nginx lua module)开发,可以作为接口网关(api gateway)使用,整合业务模块接口,微服务治理聚合,通过web配置界面,能够轻松进行代理配置管理,支持负载均衡,服务器状态检测等
Stars: ✭ 335 (-3.18%)
Mutual labels:  proxy
Sockethub
A protocol gateway for the Web.
Stars: ✭ 329 (-4.91%)
Mutual labels:  websockets
Nutzmore
让Nutz更好用
Stars: ✭ 328 (-5.2%)
Mutual labels:  ngrok
Mastermind
Man in the middle testing
Stars: ✭ 341 (-1.45%)
Mutual labels:  proxy
Ember Websockets
Ember.js websockets and socket.io addon
Stars: ✭ 336 (-2.89%)
Mutual labels:  websockets
Doh Server
Fast, mature, secure DoH server proxy written in Rust (doh-proxy).
Stars: ✭ 327 (-5.49%)
Mutual labels:  proxy
Ttyd
Share your terminal over the web
Stars: ✭ 4,030 (+1064.74%)
Mutual labels:  websockets

Go Report Card license Release

Table of Contents

tunneller

Tunneller allows you to expose services which are running on localhost, or on your local network, to the public internet.

This is very useful for testing webhooks, the generation of static-site compilers, and similar things.

NOTE: There is a public end-point I host, you SHOULD NOT rely upon it. It might come and go. It is not secure.

There is a basic GUI present to allow you to view status-codes, and the most recent few requests:

Screenshot

Overview

Assuming you have a service running within your local network, perhaps a HTTP server you could access via http://localhost:8080/, you can expose that to the public-internet by running:

$ tunneller client -expose localhost:8080

This will show you initial page of the GUI, letting you know how you can access your resource externally:

Screenshot

As the name implies there is a central-host involved which is in charge of routing/proxying to your local network - in this case that central host is tunnel.steve.fi - the reason this project exists is not to host a general-purpose end-point, but instead to allow you to host your own.

In short this project is designed to be a self-hosted alternative to software such as ngrok.

So remember:

NOTE: There is a public end-point I host, you SHOULD NOT rely upon it. You should configure your own server, and use it.

How it works

When a client is launched it creates a connection to a message-bus running on the default remote end-point, tunnel.steve.fi, it keeps that connection alive waiting for instructions.

When a request comes in for foo.tunnel.steve.fi the server will submit a command for the client to make the appropriate request by publishing a message upon the topic the client is listening to. (Each client has a name, and listens to its own topic).

In short:

  • The server sends a "Fetch this URL" request to the client.
  • The client makes the request to fetch the URL
    • This will succeed, because the client is running inside your network and can access localhost, and any other "internal" resources.
  • The response is sent back to the server.
    • And from there it is routed back to the requested web-browser.

Because the client connects directly to a message-bus there is always the risk that malicious actors will inject fake requests, attempting to scan, probe, and otherwise abuse your local network.

Installation

There are two ways to install this project from source, which depend on the version of the go version you're using.

NOTE: If you prefer you can find binary releases upon our release page

Source Installation go <= 1.11

If you're using go before 1.11 then the following command should fetch/update tunneller, and install it upon your system:

 $ go get -u github.com/skx/tunneller

Source installation go >= 1.12

If you're using a more recent version of go (which is highly recommended), you need to clone to a directory which is not present upon your GOPATH:

git clone https://github.com/skx/tunneller
cd tunneller
go install

If you don't have a golang environment setup you should be able to download a binary for GNU/Linux from our release page.

Installation of your self-hosted Server

If you wish to host your own central-server this is how to do it:

  • Create a DNS-entry tunnel.example.com, pointing to your host.
  • Create a wildcard DNS entry for *.tunnel.example.com to point to the same host.
  • Setup and configure mosquitto queue running on that same host.
    • See mq/ for details there.
    • Don't forget to ensure that the MQ-service is publicly visible, by opening a firewall hole for port 1883 if required.

Of course security is important, so you should ensure that your message-bus is only reachable by clients you trust to expose their services. (i.e. Your VPN and office range(s).)

Github Setup

This repository is configured to run tests upon every commit, and when pull-requests are created/updated. The testing is carried out via .github/run-tests.sh which is used by the github-action-tester action.

Releases are automated in a similar fashion via .github/build, and the github-action-publish-binaries action.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].