啥是內網穿透?舉個栗子,工作中我們經常遇到以下場景:
- web 應用開發
向別人展示我們本機(區域網)的web demo以及調試一些遠程的API (比如微信公眾號,企業號的開發)
- 內網項目的訪問
一般項目部署在內網環境之後,遠程調試(包括資料庫訪問)是比較困難的一件事。這個時候可以使用 tcp 協議去連接訪問,減少了出差的必要性。
- 硬體設備操控
從事物聯網相關行業的用戶和設備打交道比較多,但是大多數情況下,設備很難有自己的公網IP。
這些情況下我們就需要一款神器來讓我們的服務暴露在公網之中,以從其它任何地方進行訪問。那到底我們該怎麼做?按照以往的經驗,我們可以選擇花生殼,或者ngrok。
但是今天我要介紹的是一個更好的選擇:serveo。
神奇之處就在於無需下載安裝任何的軟體,一條命令搞定!,更重要的是它免費,完全免費,真的免費,重要的事說三遍!
基本用法
假設你想要在公網之中暴露3000埠,那麼你只需在命令終端中輸入以下命令:
ssh -R 80:localhost:3000 serveo.net
終端會用綠色字體提供一個網址(如果是初次輸這條命令,會詢問你是否相信傳送過來的RSA鑰匙指紋,請選擇 yes),你就可以用提供的網址從任何一台能夠訪問網際網路的電腦,用瀏覽器來進行訪問。如下圖:
其它用法
- 埠轉發
如果對80,443,22以外的埠進行轉發,那將是原始的tcp包
- 自定義域名
綁定自己已有的域名或子域名
更多用法詳情請訪問官網。
Windows用戶
由於這個命令是用ssh來生成的,因此只適用於類unix系統,如Linux和Mac。
但是window用戶也不是沒法使用,只是得走些彎路(經網友提醒,win10已自帶OpenSSH,這裡一併討論)。
- 安裝OpenSSH客戶端
- win10
win10默認自帶OpenSSH,如果cmd無法識別ssh命令,那可能是此功能未啟用,需要配置啟用一下。
啟用方法:
- 在Win10任務欄的Cortana小娜搜索框中輸入「可選功能」,然後點擊搜索結果中的「添加可選功能」打開「管理可選功能」窗口。
- 點擊「添加功能」按鈕,在可選功能列表中即可看到「OpenSSH客戶端」。
- 選中它,點擊「安裝」按鈕即可安裝OpenSSH客戶端。
安裝成功之後,在cmd命令提示符窗口中即可運行ssh命令。
- 其它window系統
微軟的Powershell團隊已將OpenSSH進行開源,大家可以到github上下載,請戳這裡。或者筆者也將早前下載的上傳了度盤,下載請戳這裡。
下載解壓後將解壓目錄添加進PATH環境變量或者進入解壓目錄啟動cmd即可進行ssh操作。
- 安裝git for window,從git bash執行命令
Git for Windows 提供了一個仿真環境,這樣我們可以通過git bash執行ssh命令。
其它問題
- Invalid Host Header
使用了webpack-dev-server的前端項目進行內網穿透的時候,瀏覽器顯示Invalid Host Header。
原因:webpack-dev-server出於安全考慮,默認檢查hostname,如果hostname不是配置內的,將中斷訪問。
解決辦法:設置 webpack-dev-server 的配置項 disableHostCheck 為 true 以禁用這一檢測。