ルーター設定なしでローカルサーバーに永続的な HTTPS URL を付与する SSH トンネルサービスを作りました
(natnest.site)サービスリンク: https://natnest.site
クライアントソース: https://github.com/litdemon/natnest-client
こんにちは。SSH リバーストンネルをベースにローカルサーバーを外部へ公開するサービス NatNest を作りました。
run local server 8080
natnest 8080 → https://yourname.natnest.site
作ることになったきっかけ
家に Mac mini が1台あり、そこで Ollama を動かしています。
外でも使いたかったのですが、毎回ポートフォワーディングの設定が障害でした。
ルーターの管理ページに入ってポートを開けて使っていました。
その後、Google で Dialogflow を使う中で Webhook(fulfillment) を登録しなければならないことがありました。
HTTPS が必要で、ドメインと証明書を用意して Nginx を立て、リバースプロキシを作って接続までしなければなりませんでした。
ほかの開発者も同じ状況で、私とまったく同じ作業をしなければなりませんでした。説明してあげる必要もあって、
「いっそ自分で作ればいいのでは?」と思って始めたのが NatNest です。
クライアントだけを作ったわけではありません。Nginx + Lua、Redis、DB、api server、Tunnel-server(ssh server) など、複数のサーバーをまとめて作ったものが NatNest です。
作りながら知りました。ngrok と Cloudflare Tunnel にまったく同じようなサービスがあることを T_T
どう動くのですか
クライアント(CLI) がサーバーに SSH リバーストンネルを接続すると、サーバーがサブドメイン → 内部ポートのマッピングを Redis に登録します。その後、外部から https://yourname.natnest.site にリクエストが来ると、OpenResty(Nginx + Lua) が Redis を参照して該当する SSH トンネルポートへプロキシします。
外部リクエスト → [Nginx + Lua] → Redis 参照 → SSH トンネルポート → ローカルサーバー
クライアントはバックグラウンドの watchdog プロセスが SSH 接続を維持するため、ターミナルを閉じたりネットワークが一時的に切れても、5秒以内に自動で再接続します。
ngrok / Cloudflare Tunnel と何が違うのですか
NatNest : 永続 URL、セルフホスティング、Webhook ログビューア
Ngrok Free : 永続 URL(❌)、セルフホスティング不可、Webhook ログビューア (Pro 以上)
Cloudflare Tunnel : 永続 URL(❌)、Pro 以上、なし(❌)
私のように「永続 URL を無料で、データは自分のサーバー上で」という人に合ったポジションです。
最大の利点は
Ngrok のようなサービスを実現できるソリューションを持っていることと、
ここに付くコメントの良い提案をすぐに反映できる俊敏さです。
本当に開発者が望む機能を溶け込ませていくための第一歩です。
現在の状態と正直な限界
v0.5.1 時点では以下の機能が動作します:
- Google アカウント連携(OAuth Device Flow) + SSH キー自動生成
- 永続サブドメイン + ワイルドカード Let's Encrypt HTTPS 自動更新
- Web ダッシュボード(アクティブなトンネル一覧、リアルタイム Webhook ログ)
- Linux(amd64·arm64), macOS, Windows クライアントバイナリ
まだ不足している部分もあります:
- Windows ビルドの CI/CD 自動化が未完成 (手動ビルドの状態)
- サーバーが単一サーバーで、自宅で運用しているためレイテンシがある
- 1人でサービスを運営しているため、サービスレベルの安定性(SLA)を保証するのは難しい状態
インストールしてみるには
Linux / macOS
curl -fsSL https://natnest.site/install.sh | bash
natnest setup # Google アカウント連携
natnest 8080 # ローカル 8080 ポートを外部に公開
初めて外部に公開するので、使用体験や「こんな機能があればいい」というご意見があれば、コメントで残していただけると本当にありがたいです。
4件のコメント
インストールコマンドとホームページ上部のGitHubリンクで404エラーが表示されます
コメントありがとうございます。修正を反映しました。
より大きな問題は、ひと目でAIが作ったと分かるようなデザイン変更だと思います
https://github.com/anderspitman/awesome-tunneling
Awesome Tunneling - ngrokの代替サービス集
tunnel系は需要が高いだけあって、その種のものがかなり多いようですね。ほかのサービスも参考にしてみるとよいと思います。なかなか良さそうですね。設定地獄から抜け出せます