ngrok 穿透內網 取得公開 IP
讓外網訪問 localhost 可訪問的資源
I want to expose a local server behind a NAT or firewall to the internet.
透過 ngrok 可以取得一個 (隨機的)公開 IP
通常 應用在你的機器沒有 對外公開的 IP 時 可以透過 ngrok 可以取得一個公開 IP
例如
(情境1) 在自用的機器上開發網站 而這台機器機器在 學校/家裡/公司 的內網 你希望其他(不在內網的)人 可以訪問到 你正在開發中的網站
(情境2) 你有一台提供 ssh 服務的機器(在學校宿舍/家裡) 該機器位於內網內 沒有對外固定 IP
ngrok1, ngrok2 的使用方式不太一樣 以下的操作以 ngrok2 為主
情境2 - 以 ssh 為例
初始化 - 安裝 Authtoken(建立 ngrok.yml 檔)
ngrok tcp tunnel 需要註冊帳號 登入 ngrok 後 可以查到 <Tunnel Authtoken>
$ ngrok authtoken <Tunnel Authtoken>
# 會產生 ~/.ngrok2/ngrok.yml 檔案
# 當你的機器 ssh 服務的端口 在 22 時
$ ngrok tcp 22
Tunnel Status online
Update insufficient permissions, run as root or Administrator
Version 2.0.19/2.0.19
Web Interface http://127.0.0.1:4040
Forwarding tcp://0.tcp.ngrok.io:12345 -> localhost:22
透過 ngrok 訪問
# 其他人 可以藉由
# tcp://0.tcp.ngrok.io:12345
# 登入 ssh
$ ssh <user_name>@0.tcp.ngrok.io -p12345
# 分享 本機可訪問到的內網資源 192.168.1.17
$ ngrok tcp 192.168.1.17 22
當你 有機器有對外公開的 IP 時 - ssh 反向連接
當你有機器有對外公開的 IP
例如租用 VPS 主機 有一個 公開的 IP
並且 位於內網的機器 可以訪問該對外的公開 IP
你可以透過 ssh tunnel 的功能 訪問位於內網的機器
建立一個 本機電腦 (localhost:22 假設電腦 ssh 服務的端口是 22) 和 VPS remote_ip 之間的 ssh 連線 並且要求 remote_ip 將所有連往其 2222 port 的通訊 全部轉往 本機電腦的 ssh port
# 本機電腦
$ ssh -NfR 2222:localhost:22 remote_ip
# VPS
# 先登入 VPS 再登入 本機
$ ssh remote_ip
$ ssh localhost -p 2222
Reference
目前 ngrok1.0 是 opensource
ngrok 版本1 文件 https://ngrok.com/docs/1
ngrok 版本2 文件 https://ngrok.com/docs/2
[Linux] | 簡單的 port forward 工具 |