ngrok平替換——免費開源的Tunnelmole

蟲蟲搜奇 2024-03-19 22:37:50

很多在用家庭網絡托管網站,以及其他一些內網需要對外公開發布Webhooks的同學可能都用過ngrok。今天蟲蟲給大家推薦一個類似的開源軟件Tunnelmole,是一個免費開源的ngrok軟件的平替代,大家可以嘗試並使用。

概述

Tunnelmole是一個免費且開源的內網隧道軟件。與其他一些 ngrok 替代方案不同,Tunnelmole不是使用SSH端口轉發,無需NAT/網絡配置,並且無需在服務器上運行任何內容就可以使用(當然,也可以完全自建托管自己的Tunnelomole 服務)。

基本演示

下面動圖演示設置了一個通往本地運行的tunnelmole 網站的公共URL隧道

安裝

Tunnelmole支持跨平台安裝,可以在Linux、Mac、Windows都可以安裝:

在Linux,Mac,Windows Cygwin或者Mingw用戶可以直接使用其安裝腳本一鍵安裝:

curl -O install.tunnelmole[dotcom]/n3d5g/install && sudo bash install

安裝腳本將自動檢測操作系統並安裝對應系統的適合的版本。

對于支持NodeJS 16.10或更高版本的環境,可以通過npm包管理器來安裝:

sudo npm install -g tunnelmole

window用戶,可以下載使用tmole[.exe]包,然後添加系統PATH路徑即可。

使用

安裝後,可以通過執行tmole命令來確保已經正確安裝。

tmole

該命令會打印幫助,而無任何報錯的話,則安裝正確。

如果遇到錯誤並且系統曾經安裝過npm,則可能安裝了舊版本的Node,但是版本低于16.10,則需要檢查NodeJS版本

node -version

確保其版本爲16.10及更新版本後重新安裝解決。

安裝正確後,tunnelmole使用非常簡單,只需啓動本地需要對外發布的Web應用程序並且記下其監聽的端口號,然後運行tmole <port number>,

<port number>爲本地啓動Web應用的監聽端口,比如8080,則啓動tunnelmole代理:

tmole 8080

則,可以使用下面提供的URL在公網訪問該服務。注意子域名也可以指定爲一個固定的:

tmole 8080 as <yourdomain>.tunnelmole[dot]net

只需確保<yourdomain>名稱爲獨特的地址即可,注意tunnelmole[dot]net定制化子域名需要定制才能使用。

Tunnelmole開發

要使用Tunnelmole用作項目的一類,需要項目使用Node 16.10或更高版本。

添加依賴

添加Tunnelmole作爲依賴項:

npm install --save tunnelmole

代碼中啓動tunnelmole

首次導入tunnelmole。ES和CommonJS模塊均受支持。

ES模塊:

import { tunnelmole } from 'tunnelmole';

CommonJS模塊:

const tunnelmole = require('tunnelmole/cjs');

導入模塊後,可以使用以下代碼啓動tunnelmole,將端口3000可自定義爲應用程序偵聽的端口。

const url = await tunnelmole({

port: 3000

});

Tunnelmole將在後台啓動,可以在控制台日志中看到類似于Tunnelmole命令行應用程序的輸出,其中將包括現在指向的應用程序的公共URL。 函數是async異步執行並且不會阻止其余代碼的執行。

如果想使用自定義子域,可以將域作爲選項傳遞。

const url = await tunnelmole({

port: 3000,

domain: '< tunnelmole subdomain>'

});

// url = subdomain.tunnelmole[dot]net

自托管

作爲一個開源的軟件,最大的優勢就是可以在本地計算機上運行客戶端和服務器(換句話說,localhost將“隧道”到localhost)。這將使解決任何配置問題或錯誤變得更加容易,因將能夠使用最喜歡的IDE或NodeJS調試器等工具。

對代碼進行任何類型的更改時,始終首先在本地運行客戶端和服務,以便可以利用內置的開發人員生産力功能,例如熱重載和調試器配置。

啓動tunnelmole-service和npm start。 該服務需要運行,因爲客戶端將在啓動時啓動Websocket連接,並且會失敗並顯示ECONNREFUSED如果無法連接則報錯。

按照說明設置Tunnelmole客戶端。一鍵腳本下載的預構建二進制文其地址被硬編碼到爲tunnelmole[dot]com的Tunnelmole服務,並且無法更改。

所以自托管版本的客戶端,必須使用源碼安裝tunnelmole-client

可以clone Github tunnelmole-service倉庫源碼,修改config-instance.toml中的以下部分的ws://部分:

const instanceConfig = {

hostip: {

endpoint: "ws://localhost:8080"

},

runtime: {

debug: true,

enableLogging: true

}

}

export default instanceConfig

完成後編譯客戶端

npm run build

然後調用客戶端

node dist/src/index.js <port number to forward to>。

會看到類似的輸出:

Sending initialise message

zd0b3l-ip-127-0-0-1.localhost is forwarding to localhost:3000

zd0b3l-ip-127-0-0-1.localhost is forwarding to localhost:3000

將顯示的主機名添加到的主機文件中:

127.0.0.1 zd0b3l-ip-127-0-0-1.localhost

將域名替換爲域名中顯示的域名tunnelmole-client輸出。

如果需要自定義域或其他“高級”功能,請將API密鑰添加到src/authentication/apiKeys.json。

然後可以運行 node dist/src/index.js --set-api-key <your api key>。

然後運行例如 node dist/src/index.js <port number> as mydomain.localhost獲取自定義子域。

使用真實子域名

首先,確保編譯的代碼是最新的,即 npm run build

上傳副本 tunnelmole-service到服務器。

打開config-instance.toml並進行個性化域名修改(同上)並選擇一個比默認更好的監控密碼,即changeme。

[server]

httpPort = 80

websocketPort = 81

domain = 'realyoudomin'

password = '********'

啓動服務node dist/srv/index.js。

如果一切順利,服務將正常啓動。

完成後,更新tunnelmole-client的config-instance.ts將其地址指向真實的服務器域名和端口。

const instanceConfig = {

hostip: {

endpoint: "wss://realyoudomin:81"

},

runtime: {

debug: false,

enableLogging: true

}

}

export default instanceConfig;

然後,重建並運行客戶端,如下所示:

npm run build && node dist/src/index.js 3000

現在將看到服務器域的輸出

zd0b3l-ip-127-0-0-1. realyoudomin is forwarding to localhost:3000

zd0b3l-ip-127-0-0-1. realyoudomin is forwarding to localhost:3000

此時,可以使用浏覽器或其他HTTP客戶端訪問HTTP URL。

總結

Tunnelmole是一個免費開源的強大的內網發布軟件。可以實現以安全、方便且易于實施的方式將的本地主機暴露給外部網絡,從而提高開發、測試等的便捷性。由開源愛好者編寫和維護,是ngrok的絕佳替代品。

0 阅读:0

蟲蟲搜奇

簡介:世界真奇妙,蟲蟲帶你去搜奇