日記
トンネリングリバースプロキシサーバ。
Discord SDKのQuick Startでngrokを知った。
動的URLでよければフリー。
環境
- Raspberry PI 4
- Ubuntu 20.04
ngrok agentの導入と初期化
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
| sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
&& echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
| sudo tee /etc/apt/sources.list.d/ngrok.list \
&& sudo apt update \
&& sudo apt install ngrok
sudo snap install ngrok
ngrokにサインインし、 [Getting Start] - [Your Authtoken] でTokenを取得(*1)
NGROK_TOKEN=2g4MxxxxdX8D4HDouBlxxxxd77y_7nFHxxxxxkhwm7mcrZjvA #(*1)
ngrok config add-authtoken $NGROK_TOKEN
例:ローカルHTTPサーバを公開
Node.jsで簡単なテストサーバ起動。
npx -y http-server
例えばローカルでHTTPサーバ http://192.168.11.44:8080
が起動した場合、
ngrok http http://192.168.11.44:8080
URL(例えばForwarding https://e025-2001-f77-d3e0-12f0-dea6-32ff-fe7a-aaaa.ngrok-free.app/
)が表示されるので、インターネット側からアクセスできることを確認
手軽なSSL化としても便利。なおSSLの認証局はLet's EncryptのISRG Root X1 R3
。
例:ローカルssh(TCPサーバ)を公開
前提: sshdが起動している
ngrok tcp 22
例えば Forwarding tcp://0.tcp.jp.ngrok.io:10599 -> localhost:22
と表示された場合
ssh <login-id>@0.tcp.jp.ngrok.io -p 10599
例:設定ファイルに公開ポートを定義
生成される設定ファイル(ngrok config check
で表示される)(*2)を編集。
例えばIDssh1
でローカルのポート22をインターネットに公開する設定を追加。
NGROK_CONF=`ngrok config check |sed -e 's/.*file at //'`
nano $NGROK_CONF
version: "2"
authtoken: xxxxxx # *1
metadata: '{"id":"rp4/ubuntu"}' # 識別用の適当なJSON文字列
tunnels:
ssh1:
addr: 22
proto: tcp
ngrok start ssh1
例:OSのサービスとして登録
上記設定ファイルでOS起動時に自動的にポート公開したい場合。
sudo ngrok service install --config $NGROK_CONF
sudo ngrok service start
動的に開かれたngrog側のTunnelのアドレスを取得するには、
[Tunnels] - [Agents] - Agentの詳細からmetadataで判断
systemctl status ngrok.service
active (running)
が見えれば起動中