內(nèi)網(wǎng)穿透神器-Serveo

Serveo.net 如果訪問不了赠尾,可以看文章后面的官網(wǎng)截圖淮捆。

Serveo 的功能:將局域網(wǎng)內(nèi)的服務(wù)端口開放到因特網(wǎng)上验懊,實現(xiàn)通過外網(wǎng)訪問內(nèi)網(wǎng)的需求雨让;在 Setveo 官網(wǎng) https://serveo.net 上的解釋是:Expose local servers to the internet, No installation, no signup; 即 將本地服務(wù)向公網(wǎng)開發(fā)卧惜,后面是它的廣告詞 -- 不用安裝厘灼,無需注冊夹纫。

最簡單的用法

如果你的本地電腦啟動了11000端口的web服務(wù),現(xiàn)在想要通過互聯(lián)網(wǎng)域名讓別人訪問设凹,只需要在你的電腦上輸入 ssh -R 80:localhost:11000 serveo.net 即可舰讹,之后會在下方打印一個訪問你的服務(wù)的域名,例如:

首先闪朱,我在本地啟動一個jupyter notebook服務(wù)(當(dāng)然其他的服務(wù)也可以)月匣,服務(wù)端口號為 11000:jupyter notebook --ip=0.0.0.0 --port=11000,現(xiàn)在就可以通過地址 localhost:11000 訪問 jupyter notebook 的本地服務(wù)了:

通過localhost訪問本地服務(wù)

現(xiàn)在奋姿,在你的機(jī)子上輸入:ssh -R 80:localhost:11000 serveo.net


首先锄开,如果是初次輸這條命令,會詢問你是否相信傳送過來的RSA鑰匙指紋称诗,選擇 yes,之后就會用綠字給你提供一個網(wǎng)址院刁,你用這個網(wǎng)址給任何一臺能夠訪問互聯(lián)網(wǎng)的電腦,在瀏覽器中輸入該域名(在上面的例子中粪狼,我將輸入 https://utrius.serveo.net, 你所生成的域名的一定不一樣)退腥,就可以訪問你電腦上的服務(wù)了:
注意圖中域名的變化

如果你覺得目的已經(jīng)達(dá)到,下面的就可以不用看了再榄。

具體的參考手冊

基本用法

開放本地服務(wù)

ssh -R 80:localhost:3000 serveo.net

其中 -R 使用格式為: ssh -R remote_socket:host:hostport serveo.net

該命令會使本機(jī)和 serveo.net 建立 ssh 連接狡刘,并且和 serveo.net 進(jìn)行協(xié)商:

本 機(jī) : “喂,serveo.net困鸥,以后發(fā)送到你的 remote_socket 的請求嗅蔬,直接轉(zhuǎn)發(fā)給 host:hostport 行不行,就不勞煩您親自處理了疾就!”
serveo.net: “好噠澜术,你告訴其他人,要訪問這項特殊的服務(wù)猬腰,就使用這個子域名就ok了鸟废,子域名是:XXX.serveo.net”

之后,發(fā)送給 remote_socket 的請求就會全部轉(zhuǎn)發(fā)給 host:hostport姑荷。

開放局域網(wǎng)內(nèi)其他服務(wù)器的服務(wù)

通常來說盒延,host 基本上是 localhost ,但也可以是與本機(jī)在同一局域網(wǎng)的一臺服務(wù)器鼠冕。

例如添寺,與我同在一個局域網(wǎng)有臺服務(wù)器 192.168.1.250 開啟了服務(wù)端口 10010,我們輸入ssh -R 80:192.168.1.250:10010 serveo.net懈费,就可以通過提供的子域名訪問本局域網(wǎng)內(nèi)的其他服務(wù)器的服務(wù)计露。

劃重點:我們不僅可以開放自己的服務(wù),只要本機(jī)能夠在局域網(wǎng)內(nèi)所獲取的所有服務(wù),都能夠開放給外網(wǎng)票罐。

不過通過親測叉趣,速度會比本地服務(wù)慢,畢竟發(fā)送給 serveo.net 的請求要先通過 ssh 隧道轉(zhuǎn)發(fā)給本機(jī)胶坠,本機(jī)再轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器,其單向過程中多了一次轉(zhuǎn)發(fā)過程繁堡,一個來回就多了兩次沈善。

一次開啟多個端口服務(wù)

注意:開啟多個端口部分是 serveo.net 官網(wǎng)上所稱的具有的功能,不過經(jīng)過親測椭蹄,給出的兩個域名訪問的都是第一個端口所對應(yīng)的服務(wù)闻牡,所以,我總覺得哪里不對绳矩,各位可以自己親自試試罩润。

比如除了 11000 的 jupyter notebook 服務(wù)外,我們在 11001 也開啟了新的服務(wù)(如果覺得開啟個web服務(wù)比較困難翼馆,可以直接用命令 python -m http.server 11001 即可)割以,之后輸入命令:

ssh -R 80:localhost:11000 -R 80:localhost:11001 serveo.net

輸出為:


一次開啟多個服務(wù)

選擇特殊的子域名

之前 serveo.net 提供給我們的訪問域名是根據(jù)你的 IP 地址,你所提供的 SSH 用戶名以及當(dāng)前還能夠分配的子域名綜合計算之后应媚,反饋給你的严沥,所以你重新運行命令后,通常能夠得到相同的子域名中姜。你也可以指定子域名:

ssh -R incubo:80:localhost:11000 serveo.net
等價于:
ssh -R incubo.serveo.net:80:localhost:11000 serveo.net

可以看到消玄,返回給我們的子域名就是 incubo.serveo.net。通過該網(wǎng)址就可以訪問了丢胚。

指定子域名訪問

不過,如果指定的子域名已經(jīng)被占用,那么會有如下提示:


子域名被占用后的提示

修改 SSH 用戶名以獲得不同的子域名:

我們通過3次命令進(jìn)行實驗:

第一次:ssh -R 80:localhost:11000 foo@serveo.net
第二次:ssh -R 80:localhost:11000 fff@serveo.net
第三次:ssh -R 80:localhost:11000 -l fff serveo.net

3 次修改用戶名獲得不同子域名的結(jié)果

可以看出:第一次和第二次相比械念,由于修改了用戶名衡创,所以得到的子域名不相同;而第二次和第三次的結(jié)果是完全相同的峡蟋;

直接連接內(nèi)網(wǎng)服務(wù)器的 ssh 服務(wù)

我們可以將 serveo.net 主機(jī)視為一個跳板浮定,使我們的終端能夠直接通過ssh訪問內(nèi)網(wǎng)服務(wù)器,假設(shè)在內(nèi)網(wǎng) 192.168.1.250 上有 ssh 服務(wù)层亿,我們可以通過用戶名 linux_fhb 進(jìn)行登錄桦卒,將該 ssh 服務(wù)開放的方法為:

ssh -R myalias:22:192.168.1.250:22 serveo.net

注:如果 myalias 不成功,換一個子域名再進(jìn)行嘗試匿又;

結(jié)果如下:
連通內(nèi)網(wǎng)服務(wù)器的ssh服務(wù)

之后我們就可以通過 myalias 進(jìn)行 ssh 連接了:

ssh -J serveo.net linux_fhb@myalias

實驗結(jié)果為:

成功通過ssh登錄遠(yuǎn)程內(nèi)網(wǎng)服務(wù)器

其中參數(shù) -J 的解釋為:

This is a shortcut to specify a ProxyJump configuration directive.

該參數(shù)在 OpenSSH 的 7.3客戶端版本中引入方灾,如果是之前的版本,可以使用下面的命令進(jìn)行替代(不過還是建議升級比較方便快捷):

ssh -o ProxyCommand="ssh -W myalias:22 serveo.net" linux_fhb@myalias

普通TCP端口的轉(zhuǎn)發(fā)

如果你需要對除了 80,443裕偿,22 這些端口之外的端口進(jìn)行包轉(zhuǎn)發(fā)洞慎,被轉(zhuǎn)發(fā)的將是原始的 TCP 包。(在這種情況下嘿棘,我們就沒必要指定子域名了)劲腿,完成下面這個實驗一個需要3步:

  1. 打開本地的 12355 TCP端口服務(wù):nc -l 12355 ;至于網(wǎng)絡(luò)工具 nc 怎么用鸟妙,各位可以查資料焦人,不過大家這里照著寫就可以了;
  2. 開啟 serveo.net 的端口轉(zhuǎn)發(fā)功能:ssh -R 12355:localhost:12355 serveo.net重父;
  3. 測試:nc serveo.net 12355

實驗結(jié)果如下:

任意端口的映射

其中從上到下的終端分別對應(yīng)步驟1花椭、2、3房午,最后發(fā)現(xiàn)矿辽,終端3發(fā)送的 ni hao a 被顯示到了終端1,說明 serveo.net 實現(xiàn)了轉(zhuǎn)發(fā)功能郭厌;

如果你指定 serveo.net 的端口為0袋倔,則將隨機(jī)分配一個可用的端口號(如果指定端口號,可能因該端口已經(jīng)被占用而開啟失斦勰)奕污,命令為:ssh -R 0:localhost:12355 serveo.net

使用端口0,隨機(jī)分配端口

可以看到液走,serveo 給我們分配的隨機(jī)端口號是 40985碳默。

連接端口 443

有時候,22連接端口被禁止了缘眶。你可以 連接到 443 端口:

ssh -p 443 -R 80:localhost:8888 serveo.net

注:這個啥用我也不太清楚嘱根,猜測應(yīng)該是能夠通過443端口進(jìn)行ssh連接。

保持連接不斷開

如果連接長時間空閑巷懈,會自動斷開该抒,所以我們需要發(fā)送“心跳包”以保持連接,保持連接的命令為:

ssh -o ServerAliveInterval=60 -R 80:localhost:11000 serveo.net

自動重連接

使用 autossh 命令可以創(chuàng)建更加“頑強(qiáng)”的通道顶燕。

autossh -M 0 -R 80:localhost:11000 serveo.net

autossh 的具體用法可查看 https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/

自定義域名

注:這部分由于沒有域名凑保,所以沒有試驗過,見諒涌攻!

如果你想用自己已有的域名或者是子域名欧引,你首先需要 SSH key pair。如果你沒有key pair恳谎,可以使用 ssh-keygen 程序可以生成芝此。

之后憋肖,使用 ssh-keygen -l,可以打印出你的ssh 指紋婚苹,形式類似于:

2048 SHA256:pmc7ZRv7ymCmghUwHoJWEm5ToSTd33ryeDeps5RnfRY no comment (RSA)

上面例子的指紋為:SHA256:pmc7ZRv7ymCmghUwHoJWEm5ToSTd33ryeDeps5RnfRY

之后岸更,你需要為你的域名或子域名添加兩條DNS記錄(DNS如何添加請自行搜索):

  1. 一條記錄指向 159.89.214.31,該 IP 地址即為 serveo.net 的公網(wǎng) IP膊升;
  2. 為了使 SSH key 生效怎炊,需要添加這么一段文本:authkeyfp=[fingerprint]。在上面的例子中廓译,DNS 記錄的形式為:authkeyfp=SHA256:pmc7ZRv7ymCmghUwHoJWEm5ToSTd33ryeDeps5RnfRY

在修改完DNS記錄后评肆,你就可以像下面這樣使用了:

ssh -R subdomain.example.com:80:localhost:11000 serveo.net

當(dāng)你訪問 subdomain.example.com 時, Serveo 將會從你的DNS 服務(wù)器獲取剛才填寫的文本記錄责循,只有你所提供的公鑰和記錄的 ssh 指紋一致糟港,你的請求才會被轉(zhuǎn)發(fā)攀操。

替代方案

ngrok

Serveo 是 ngrok 的替代方案院仿。Serveo 就是受 ngrok 啟發(fā)所開發(fā)出來的,因此兩者有很多相似之處速和。Serveo 相較于 ngrok 的最大優(yōu)勢是Serveo使用你的 SSH 客戶端歹垫,這樣你就沒有必要安裝其他的客戶端程序了。

其他的區(qū)別比如Serveo免費連接及提供子域名(ngrok 需要一點點錢)颠放,Serveo 在終端中請求檢查和重播(ngrok 使用 web 接口)排惨。注:由于沒用過 ngrok,對最后一句話不太理解碰凶。

OpenSSH Server

使用 OpenSSH 暮芭,你必須要自己配置和維護(hù)一臺服務(wù)器。它也需要處理 HTTPS 以及子域名的產(chǎn)生欲低,這兩點使 SSH 端口轉(zhuǎn)發(fā)機(jī)制的設(shè)置變得復(fù)雜辕宏。

如果 Serveo 沒有滿足你的需求,該指南 也許對你使用 OpenSSH 有所幫助砾莱。

自己架設(shè)服務(wù)

上面的免費版本僅用于體驗瑞筐,僅供個人使用,每個實例最多同時擁有3個隧道腊瑟。不過聚假,我通過實驗,發(fā)現(xiàn)至少能同時開5個隧道闰非,應(yīng)該可以開更多膘格,我沒有再試了,下面是實驗的結(jié)果:

打開了5個服務(wù)

如果你打算將 Serveo 進(jìn)行商用财松,或是是需要一次使用多于3個隧道闯袒,你可以發(fā)送郵件 trevor@serveo.net 聯(lián)系開發(fā)者。

下載 serveo 服務(wù)程序

Linux 版本

Mac 版本

Windows 版本

使用方法

可以通過命令行對服務(wù)軟件進(jìn)行設(shè)置,使用 -h 查看幫助文檔:

./serveo -h

-private_key_path

首先政敢,你需要需要指定用于建立 SSH 連接的密鑰路徑其徙。密鑰路徑應(yīng)該是 /etc/ssh/ssh_host_rsa_key 或者是 $HOME/.ssh/id_rsa中的一個,根據(jù)實際所在位置運行下面中的一條命令(如果這兩個位置都沒有的話喷户,你要使用 ssh-keygen 生成密鑰唾那,使用命令為 ssh-keygen -t rsa -f ssh_host_rsa_key)。
設(shè)置方法為:

./serveo -private_key_path=/etc/ssh/ssh_host_rsa_key

或者是

./serveo -private_key_path=$HOME/.ssh/id_rsa

-port褪尝,-http_port闹获,-https_port

這些參數(shù)指定 Serveo 哪些端口視為 SSH, HTTP, HTTPS 連接的服務(wù)端口:

./serveo -private_key_path=ssh_host_rsa_key -port=22 -http_port=80 -https_port=443

./serveo -private_key_path=ssh_host_rsa_key -port=2222 -http_port=8080 -https_port=8443

-cert_dir

如果提供 HTTPS 服務(wù)的話,需要改參數(shù)河哑。指定的目錄中需要包含 TLS 證書以及 keys避诽。例如,一個 cert_dir 可能包含如下的文件:abc.crt, ? abc.key, ? foo.crt, ? foo.key璃谨。

證書文件的后綴必須是 .crt沙庐,keys 文件后綴必須是 .key。證書除后綴外的命名可以隨意佳吞,但是證書和keys文件的文件名需要相同(即:abc.{crt, key} 必須同時存在)拱雏。可以使用通配符證書底扳,證書也支持多個 DNS 名稱铸抑。

./serveo -cert_dir=certs

-domain

該參數(shù)指定在沒有給定域名時,默認(rèn)的域名:

./serveo -domain=example.com

-disable_telemetry

開發(fā)者為了調(diào)試需要衷模,會打印一些基本事件的報告(例如程序開啟鹊汛,包轉(zhuǎn)發(fā)開始等),指定該選項阱冶,這些信息將不再打印刁憋。

后記

局域網(wǎng)IP地址(內(nèi)部)的動態(tài)分配問題:如果提供服務(wù)的服務(wù)器 IP 地址在局域網(wǎng)內(nèi)部變了(例如,路由器動態(tài)分配地址熙揍,服務(wù)器在斷網(wǎng)后可能局域網(wǎng)內(nèi)的IP被重新分配)职祷,那么服務(wù)一定是不可用的,因為就算你在該局域網(wǎng)內(nèi)届囚,不知道服務(wù)器新分配的 IP 照樣不能訪問服務(wù)器有梆,更何況是遠(yuǎn)端機(jī)子。

局域網(wǎng)對外的公網(wǎng)IP改變了(如果局域網(wǎng)的網(wǎng)絡(luò)提供商沒有提供靜態(tài)IP意系,那每次分配給局域網(wǎng)的公網(wǎng)IP都是會變化的)泥耀,那么意味著本機(jī)與 serveo.net 的 SSH 必定已經(jīng)斷開過,而我們是通過本機(jī)與serveo.net的SSH隧道訪問內(nèi)網(wǎng)服務(wù)的蛔添,除非SSH服務(wù)重連痰催,否則內(nèi)網(wǎng)服務(wù)也將斷開兜辞。

能力有限,如果有任何寫得不對的地方夸溶,可在評論區(qū)提出逸吵,多謝多謝!

官網(wǎng)截圖

page 1
page 2
page 3
page 4
page 5
page 6
page 7
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缝裁,一起剝皮案震驚了整個濱河市扫皱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捷绑,老刑警劉巖韩脑,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粹污,居然都是意外死亡段多,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門壮吩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來进苍,“玉大人,你說我怎么就攤上這事粥航±拍螅” “怎么了生百?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵递雀,是天一觀的道長。 經(jīng)常有香客問我蚀浆,道長缀程,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任市俊,我火速辦了婚禮杨凑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摆昧。我一直安慰自己撩满,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布绅你。 她就那樣靜靜地躺著伺帘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忌锯。 梳的紋絲不亂的頭發(fā)上伪嫁,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音偶垮,去河邊找鬼张咳。 笑死帝洪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脚猾。 我是一名探鬼主播葱峡,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼龙助!你這毒婦竟也來了族沃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤泌参,失蹤者是張志新(化名)和其女友劉穎脆淹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沽一,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡盖溺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铣缠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烘嘱。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蝗蛙,靈堂內(nèi)的尸體忽然破棺而出蝇庭,到底是詐尸還是另有隱情,我是刑警寧澤捡硅,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布哮内,位于F島的核電站,受9級特大地震影響壮韭,放射性物質(zhì)發(fā)生泄漏北发。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一喷屋、第九天 我趴在偏房一處隱蔽的房頂上張望琳拨。 院中可真熱鬧,春花似錦屯曹、人聲如沸狱庇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽密任。三九已至,卻和暖如春驳棱,著一層夾襖步出監(jiān)牢的瞬間批什,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工社搅, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留驻债,地道東北人乳规。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像合呐,于是被迫代替她去往敵國和親暮的。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容