啥是內(nèi)網(wǎng)穿透?舉個(gè)栗子,工作中我們經(jīng)常遇到以下場(chǎng)景:
- web 應(yīng)用開(kāi)發(fā)
向別人展示我們本機(jī)(局域網(wǎng))的web demo以及調(diào)試一些遠(yuǎn)程的API (比如微信公眾號(hào),企業(yè)號(hào)的開(kāi)發(fā))
- 內(nèi)網(wǎng)項(xiàng)目的訪問(wèn)
一般項(xiàng)目部署在內(nèi)網(wǎng)環(huán)境之后,遠(yuǎn)程調(diào)試(包括數(shù)據(jù)庫(kù)訪問(wèn))是比較困難的一件事。這個(gè)時(shí)候可以使用 tcp 協(xié)議去連接訪問(wèn),減少了出差的必要性。
- 硬件設(shè)備操控
從事物聯(lián)網(wǎng)相關(guān)行業(yè)的用戶和設(shè)備打交道比較多,但是大多數(shù)情況下,設(shè)備很難有自己的公網(wǎng)IP。
這些情況下我們就需要一款神器來(lái)讓我們的服務(wù)暴露在公網(wǎng)之中,以從其它任何地方進(jìn)行訪問(wèn)。那到底我們?cè)撛趺醋觯堪凑找酝慕?jīng)驗(yàn),我們可以選擇花生殼,或者ngrok。
但是今天我要介紹的是一個(gè)更好的選擇:serveo。
神奇之處就在于無(wú)需下載安裝任何的軟件,一條命令搞定!,更重要的是它免費(fèi),完全免費(fèi),真的免費(fèi),重要的事說(shuō)三遍!
基本用法
假設(shè)你想要在公網(wǎng)之中暴露3000端口,那么你只需在命令終端中輸入以下命令:
ssh -R 80:localhost:3000 serveo.net
終端會(huì)用綠色字體提供一個(gè)網(wǎng)址(如果是初次輸這條命令,會(huì)詢問(wèn)你是否相信傳送過(guò)來(lái)的RSA鑰匙指紋,請(qǐng)選擇 yes),你就可以用提供的網(wǎng)址從任何一臺(tái)能夠訪問(wèn)互聯(lián)網(wǎng)的電腦,用瀏覽器來(lái)進(jìn)行訪問(wèn)。如下圖:

其它用法
- 端口轉(zhuǎn)發(fā)
如果對(duì)80,443,22以外的端口進(jìn)行轉(zhuǎn)發(fā),那將是原始的tcp包
- 自定義域名
綁定自己已有的域名或子域名
更多用法詳情請(qǐng)?jiān)L問(wèn)官網(wǎng)。
windows用戶
由于這個(gè)命令是用ssh來(lái)生成的,因此只適用于類(lèi)unix系統(tǒng),如linux和mac。
但是window用戶也不是沒(méi)法使用,只是得走些彎路(經(jīng)網(wǎng)友提醒,win10已自帶OpenSSH,這里一并討論)。
- 安裝OpenSSH客戶端
- win10
win10默認(rèn)自帶OpenSSH,如果cmd無(wú)法識(shí)別ssh命令,那可能是此功能未啟用,需要配置啟用一下。
啟用方法:
- 在Win10任務(wù)欄的Cortana小娜搜索框中輸入“可選功能”,然后點(diǎn)擊搜索結(jié)果中的“添加可選功能”打開(kāi)“管理可選功能”窗口。
- 點(diǎn)擊“添加功能”按鈕,在可選功能列表中即可看到“OpenSSH客戶端”。
- 選中它,點(diǎn)擊“安裝”按鈕即可安裝OpenSSH客戶端。
安裝成功之后,在cmd命令提示符窗口中即可運(yùn)行ssh命令。
- 其它window系統(tǒng)
微軟的Powershell團(tuán)隊(duì)已將OpenSSH進(jìn)行開(kāi)源,大家可以到github上下載,請(qǐng)戳這里。或者筆者也將早前下載的上傳了度盤(pán),下載請(qǐng)戳這里。
下載解壓后將解壓目錄添加進(jìn)PATH環(huán)境變量或者進(jìn)入解壓目錄啟動(dòng)cmd即可進(jìn)行ssh操作。
- 安裝git for window,從git bash執(zhí)行命令
Git for Windows 提供了一個(gè)仿真環(huán)境,這樣我們可以通過(guò)git bash執(zhí)行ssh命令。
其它問(wèn)題
- Invalid Host Header
使用了webpack-dev-server的前端項(xiàng)目進(jìn)行內(nèi)網(wǎng)穿透的時(shí)候,瀏覽器顯示Invalid Host Header。
原因:webpack-dev-server出于安全考慮,默認(rèn)檢查hostname,如果hostname不是配置內(nèi)的,將中斷訪問(wèn)。
解決辦法:設(shè)置 webpack-dev-server 的配置項(xiàng) disableHostCheck 為 true 以禁用這一檢測(cè)。