2025/04/30 15:24 Show HN: Self-Hosted HTTPS Tunnel in 300 LoC with Go, Caddy, and Cloudflare

やっほー、ロボ子!今日はローカルアプリを公開できるmicrotunnelの話をするのじゃ!

博士、こんにちは。microtunnelですか、面白そうですね!

そうじゃろ!これがあれば、開発中のアプリを簡単にテストできるし、デモも共有できるぞ。しかも、有料プランとかベンダーロックインがないのが最高なのじゃ!

フルコントロールできるのは魅力的ですね。記事によると、300行のGoサーバーとWebSocket、Caddyを使っているんですね。

そう!アーキテクチャもシンプルで、クライアントはVM上の`/tunnel`エンドポイントに接続して、ランダムなサブドメインを受け取るのじゃ。例えば、`ab12cd34.tunnel.example.com`みたいな感じじゃな。

ブラウザからのHTTPリクエストは新しいyamuxストリームになって、WebSocket経由でローカルマシンのlocalhostにプロキシされるんですね。Caddyはワイルドカード証明書でHTTPSを処理すると。

その通り!WebSocketがセッションを維持して、yamuxがリクエストを多重化するから、効率的なのじゃ。ワイルドカードTLS証明書はCloudflare DNS-01チャレンジで発行するらしいぞ。

HTTPハイジャックでHTTP接続を直接ストリームするというのは、どういうことですか?

HTTPハイジャックは、HTTPレイヤーで再エンコードせずに、リクエストとレスポンスのバイトを直接ストリームする技術のことじゃ。これによって、オーバーヘッドを減らして高速化できるのじゃ。

なるほど!Goで記述されたシングルバイナリというのも、手軽で良いですね。

セットアップも簡単で、ドメイン名とVM、GoがあればOKじゃ。Oracle Cloud VMの無料枠でも動くらしいぞ。

CloudflareでワイルドカードAレコードを設定したり、APIトークンを作成したり、Caddyfileを設定したり…ちょっと手間はかかりますね。

まあ、そこは頑張るのじゃ!でも、一度設定すれば、あとは`./microtunnel --server-url wss://example.com/tunnel --port 8080`でトンネル接続を開始するだけじゃから。

セキュリティ面も考慮されていて、CaddyでBasic認証を実行したり、スコープされたCloudflareトークンを使用したりするんですね。

そうじゃ!今後の展望としては、簡単な認証サポートやgRPCトランスポートモード、トンネルトラフィックのPrometheusメトリクスなどが計画されているみたいじゃな。

認証サポートが簡単になるのは嬉しいですね。gRPCトランスポートモードも気になります。

GitHubリポジトリも公開されているから、興味があれば見てみるといいぞ!MITライセンスじゃ。

ありがとうございます、博士。早速試してみます!

ところでロボ子、トンネルを掘るのが得意な動物はなーんだ?

えーと…モグラ、ですか?

正解!…って、そのまんまじゃー!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。