微內(nèi)網(wǎng)穿透代理工具tiny-ws-tunnel的使用
1. 使用自寫工具的原因
之前自己架設(shè)在家里的樹莓派和香橙派上的個人網(wǎng)盤,日記等服務分別使用過frp
和nps
作為內(nèi)網(wǎng)穿透代理工具。
奈何frp沒有web控制臺,且配置略繁瑣,而nps在使用過程中發(fā)現(xiàn)不定期在沒有任何實際業(yè)務負載的情況下cpu占用率持續(xù)100%的情況。
這兩個工具使用的痛點讓我最終選擇業(yè)余時間自寫了一個微型的內(nèi)網(wǎng)穿透代理工具tiny-ws-tunnel
或者簡稱twt
,供自己使用。
實現(xiàn)原理圖:

2. tiny-ws-tunnel的部分特性
支持?
tls
服務端可前置nginx或caddy等反向代理。讓反向代理支持tls
agent 支持 tls 證書驗證
agent 支持連接認證
數(shù)據(jù)傳輸支持aes(aead)加密 (在不使用tls時推薦應用)
數(shù)據(jù)流量統(tǒng)計
支持 web api
buffer調(diào)優(yōu)
自帶一個基于curl的管理工具腳本
支持在docker中運行
經(jīng)過時間考驗的tcp代理以及試用階段的udp(udp over tcp)代理
目前自己已使用了半年多時間,運行穩(wěn)定
,占用資源少
,圓滿滿足自己的需求,并提供給公司使用。下面簡述使用方法。且后面視情況可能開源。
3. 簡明使用方式(quick start)
3.1 首先下載
github?https://github.com/yarnto/tiny-ws-tunnel-doc?的release頁面下載。包括 linux amd64 arm64 armv7 的程序包,還有windows的 amd64 程序包。
備用下載地址:https://pan.hk.zhangyt.fun/s/bRtk
綠色軟件,下載解壓即安裝。
程序包目錄結(jié)構(gòu)
以下假設(shè)所有命令都在安裝目錄下執(zhí)行
3.2 服務端啟動
通常服務端在有公網(wǎng) IP 或出口的設(shè)備上啟動
啟動腳本
啟動后如果發(fā)現(xiàn):
ERRO[0000] read conf/port-mappings.json err: open conf/port-mappings.json: no such file or directory
的錯誤日志可忽略,下面會通過twt腳本工具手動創(chuàng)建一個認證的agent key(密鑰),自動生成該文件
該命令啟動twt server,監(jiān)聽在:3699
(即0.0.0.0:3699)地址,且設(shè)置了agent連接需要驗證。
簡單示例起見,此時沒有啟用單獨加密和tls。可通過./tiny-ws-tunnel server -h
查看更多參數(shù),配置tls和(或)aes單獨加密。
3.2 添加一個認證的agent密鑰
添加認證的agent。用于agent連接時的認證參數(shù)使用
列表已經(jīng)添加的認證agent
3.3 啟動agent
通常 agent 在一個沒有公網(wǎng) IP 的內(nèi)網(wǎng)設(shè)備啟動,作為例子,本agent在相同地機器上啟動
說明:
-agentId=test-agent-1
,?-key=ta1-key
?指定agentId和key-serverAddr="ws://127.0.0.1:3699/twt/ws"
?指定要連接的server(通常是公網(wǎng)地址,https(tls)的以wss開頭)
3.4 查看已經(jīng)連接的agent
這時服務端可以通過如下命令查看已經(jīng)連接的agent
明細會有非常有用的agent狀態(tài)信息
3.5 添加一個地址端口映射(添加代理)
把公網(wǎng)server端的地址端口映射到agent所在局域網(wǎng)設(shè)備地址,本質(zhì)上是添加了一個代理。這是我們的最終目標
我們假設(shè)本地有一個httpbin的web的服務監(jiān)聽在8077端口,以下命令是在server機器上啟動一個本地:8077的代理監(jiān)聽在0.0.0.0:8078的端口上
說明:
listeningAddr 公網(wǎng)監(jiān)聽地址
targetAddr 目標地址,對于udp的代理映射,需要在地址后面加"/udp"
agentId agent id
note 簡要描述(可選)
這時我們可以檢測一下訪問本機的8078端口是否等同于訪問8077端口
上面的輸出示例,說明已經(jīng)成功了。
假設(shè)服務端啟動在外網(wǎng),agent啟動在一個能訪問外網(wǎng)server的內(nèi)網(wǎng),訪問外網(wǎng)的8078端口就相當于訪問內(nèi)網(wǎng)的8077端口,實現(xiàn)了內(nèi)網(wǎng)穿透訪問。
4. 關(guān)于前置nginx或caddy代理
前面特性描述已經(jīng)提到過使用 nginx 或 caddy 等作為前置代理。如果前置代理監(jiān)聽在標準的80和443端口,且已經(jīng)有正規(guī)的tls證書。那twt server則可以直接利用前置代理的tls,基本可以省去使用aes加密,如果不用tls則推薦使用自帶的aes加密以保護數(shù)據(jù)安全。
如下為caddy的配置示例?Caddyfile
在配置中我設(shè)置了一個頭信息?Tiny-Real-IP
?是為了讓twt server知道從caddy連接過來的連接地源地址是什么。nginx的配置方式類似,就是設(shè)置一個反向代理,記得設(shè)置傳遞一個頭信息。
5. 關(guān)于web控制臺。
使用者可以根據(jù)web api自行開發(fā)web控制臺。比如我把web控制臺的界面放在了自己另一個web應用里。
關(guān)于web api的文檔后期視境況補充。
我另外一個應用的web控制臺兩張截圖,僅供參考。

