Web開発
Show HN: BitBang – NATの背後にあるマシンにブラウザからアクセス、アカウント不要
Show HN: BitBang – Reach machines behind NAT from a browser, no account (github.com)
要約
BitBang CLIは、ポートフォワーディングや設定、アカウント登録なしに、ブラウザからリモートマシンへのインタラクティブシェル、ファイルブラウジング、Webアプリへのアクセスを可能にするツールです。Go言語で書かれた単一の静的バイナリで、WebRTC/DTLSによるエンドツーエンド暗号化されたP2P接続を提供します。SSHの代替として、特にNATやCGNAT環境下でのリモートアクセスを容易にし、電話越しでも可能な6桁のコードによるペアリング機能も備えています。
全文翻訳
BitBang CLI BitBang CLIは、単一の静的なバイナリで構成されるリモートアクセス・マルチツールです。インタラクティブシェルを開いたり、ファイルをブラウズ・転送したり、ブラウザからリモートマシンのネットワーク上のWebアプリにアクセスしたりできます。ポートフォワーディング、設定、アカウント登録は一切不要です。アクセスしたいマシンで: curl -sSfL bitba.ng/install | sh bitbang serve serveはURLを出力します。それを任意のブラウザで開くと、ターミナル、ファイルブラウザ、そしてそのマシンネットワークへのプロキシが表示されます。または、同じバイナリを使用して bitbang connect <url> から別のターミナルに接続します。接続はエンドツーエンドで暗号化され、ピアツーピアです。bitba.ngサーバーが両端を仲介し、その後は介入しません。bitbangは単一の静的なGoバイナリです。BitBangプロジェクトの一部であり、このホワイトペーパーで設計の詳細をカバーしています。6桁のコードでのペアリング URLを貼り付けたりQRコードをスキャンしたりできない場合(電話中や、数メートルの距離にいる場合など)、bitbang serveは短いペアリングコードも出力します。相手は bitba.ng/<code> を開くか(または bitbang connect <code> を実行)、画面に表示される2番目の6桁の数字をあなたに読み上げます。あなたがそれを入力して承認します。中間者(man-in-the-middle)は2つの数字を一致させることはできず、ペアリングはデバイス接続資格情報を次回のために保存します(例: bitbang connect nas1)。Magic Wormholeを知っているなら、その形状は似ています。口頭で伝えるコードが2台のマシンを安全に紹介します。なぜか?転送や設定の必要がない。NAT、CGNAT、またはロックダウンされたネットワークの背後でも動作します。ルーターの変更、VPN、トンネルデーモンは不要です。接続側でのインストールも不要です。ブラウザがあれば十分です。CLIはスクリプティング、パイプ、ファイルコピーが必要な場合に使えます。設計上プライベートです。トラフィックはWebRTC/DTLS、ピアツーピアです。シグナリングサーバーはそれを決して見ません。直接パスが不可能な場合、TURNリレーは暗号化されたテキストのみを転送します。アカウントなし、テレメトリなし。SSHを使えばいいのでは?bitbangはSSHのような形状をしています: serve, connect, cp は sshd, ssh, scp に対応し、TCPの代わりにWebRTCをトランスポートとして使用します。すでに快適にSSHできるマシンであれば、その違いはあまりメリットになりません。しかし、bitbangの大部分は、私が本来よりも頻繁に遭遇する不満から生まれました:リーチ。リモートSSHアクセスにはインバウンドパスが必要ですが、ほとんどのネットワークではそれを開くことはあなたの権限ではありません(セルラー、Starlink、多くのISPのCGNAT、企業、大学、地方自治体)。そのため、実際にはセカンドシステムをボルトオンします:Tailscale、VPN、ngrok — 追加のインストール、追加のアカウント、実行し続ける追加のデーモン。bitbang serveはポートを開く必要がなく、どこからでも動作します。セットアップ。SSHは、ログインを許可する前に有効化され、設定されている必要があります。Raspberry Pi OSではデフォルトで無効になっており、多くの場合キーのみなので、最初にマシンに公開キーを配置する必要があります。そして、どうやってそれをやるのでしょう?電子メールかUSBスティックが通常最も簡単な方法です。bitbangは6桁のコード交換で接続をセットアップします — 電話で安全に行えるもの、または部屋越しに呼びかけることができるものです。また、通常のユーザーとして実行されます — ルート権限なし、デーモンなし、設定ファイルなし。プロキシ。そのマシンのネットワーク上のWebアプリが必要な場合、SSHはアプリごとに個別のトンネルを提供し、事前に名前を付けます。bitbangプロキシは汎用的です:接続時にWebアプリのURLを指定します。ブラウザクライアント。SSHは接続側にSSHクライアントとキーまたはパスワードが必要です。bitbangはブラウザが必要です — つまり、電話、借りたラップトップ、またはターミナルを開いたことのない人です。URLを渡せば、あなたが許可したアクセスを得られます。bitbangの使用 各接続には2つのエンドがあります:リスナー(bitbang serve、アクセスされるマシンで実行)とコネクタ(アクセスするマシン上のブラウザまたはbitbang CLI)。1つのリスナーURLが両方のコネクタタイプを提供します。リスナー: bitbang serve bitbang serve # すべて: シェル + ファイル + プロキシが1つのURLで bitbang serve shell # シェルのみ bitbang serve files ~/share # ファイルのみ(アップロードを許可するには -upload を追加) bitbang serve proxy # プロキシ; ブラウザでターゲットを選択 bitbang serve proxy localhost:8080 # ...または単一のターゲットをピン留め 各々QRコード、URL、ペアリングコードを出力します。ブラウザからの接続 URLを開きます。提供されているものに応じて、以下が表示されます:シェル — ページ内のフルターミナル(色、リサイズ、コピー/ペースト)。ファイル — ブラウズ、プレビュー、ダウンロード、アップロード。プロキシ — LANアドレス(nas.local, 192.168.1.10:8080, localhost:3000/admin)を入力し、ローカルにいるかのようにアプリを使用します。ログイン、クッキー、アップロード、ストリーミングはすべて機能します。CLIからの接続 bitbang connect <url> # インタラクティブシェル bitbang connect <url> -- tail -f /var/log/syslog # ワンショットコマンド bitbang cp <url>:/var/log/app.log ./app.log # ファイルコピー、scpスタイル bitbang cp - <url>:/tmp/firmware.bin < firmware.bin # stdin/stdoutも可能 各接続またはペアリングが成功すると ~/.bitbang/devices.json に保存されるため、以降は短い名前で十分です: bitbang connect nas1。インストール ワンライナーは、アーキテクチャ(amd64, arm64, armv7)を検出し、最新のGitHubリリースからバイナリをダウンロードし、リリースにあるchecksums.txtに対してSHA-256を検証し、~/.local/bin/bitbangにインストールします。バージョンをピン留めしたり、場所を変更したり、スクリプトを監査したりできます: curl -sSfL bitba.ng/install | sh -s -- --version v0.5.0 curl -sSfL bitba.ng/install | sh -s -- --prefix /usr/local/bin curl -sSfL bitba.ng/install -o install.sh && less install.sh && sh install.sh macOSとWindowsのビルドは近日公開 — それぞれにissueが作成されています(macOS, windows、興味を示すにはリアクションするか投稿してください)。手動インストール:Releasesからバイナリをダウンロードし、PATHに配置します。ソースからビルド:下記参照。インストールURLの仕組み bitba.ng/install はリダイレクトであり、ホストされたスクリプトではありません。チェーン:curlはhttps://bitba.ng/installにアクセスし、これはこのリポジトリのinstall.sh(mainブランチ上)に302リダイレクトします。スクリプトはシェルで実行され、OS+アーキテクチャを検出し、https://github.com/richlegrand/bitbang-cli/releases/latest/download/bitbang-linux-<arch> からバイナリアセットをダウンロードします。同じリリースにあるchecksums.txtを取得し、バイナリのSHA-256を検証します。~/.local/binにインストールします(上書き可能)。インストールスクリプトはこのリポジトリ内にあり、インストールするバイナリの隣にあります — そのため、バイナリと一緒にレビューでき、正規のbitba.ngホストは短いURLのみを所有します。セルフホスト者は、自身のホストの/installを、提供するスクリプトのいずれかにポイントできます。シグナリングサーバーのINSTALL_URL環境変数がリダイレクトターゲットを制御します(空の場合は404)。セキュリティ 自己署名証明。初回実行時、bitbangは~/.bitbang/<program>/の下にRSAキーペアを生成します。デバイスUIDはその公開キーから派生するため、デバイスをなりすますにはそのUIDのセカンドプリイメージを見つける必要があります。秘密鍵はサーバーに触れることはありません。アクセスコードはURLフラグメント(#…)にあり、ブラウザはそれを送信しません — bitba.ngは認証資格情報を見ずに接続を仲介します。エンドツーエンド暗号化。すべてのトラフィックはWebRTCのDTLSに乗ります。シグナリングサーバーは公開鍵、派生UID、接続メタデータのみを見ます — あなたのデータは決して見ません。TURNリレーが必要な場合でも、暗号化されたテキストのみを見ます。検証済みペアリング。コードペアリングで読み上げられる数字は、交渉されたDTLSフィンガープリントと2つのコミットされたノンスから両端で独立して計算される短い認証文字列(SAS)です — フィンガープリントが必然的に異なる中間者は、2つの数字を一致させることができません。永続的またはヘッドレスセットアップ用のオプションのPIN(--pin)、および実行ごとに新しいIDを使用するための使い捨てモード(-ephemeral)。中央当局を信頼せずに両端がお互いを認証する方法については、こちらで詳細に説明しています:Trustless Signaling: Authentication Without a Central Authority。比較 ngrok Cloudflare Tunnel Tailscale bitbang アカウント必要 Yes Yes Yes No 接続側でのインストール No No Yes No (ブラウザ) エンドツーエンド暗号化 デフォルトではNo No Yes Yes データパス Their servers Their servers P2P P2P セルフホスト可能なサーバー (オープンソース) No No No (Headscaleはサードパーティ) Yes 初回使用前のセットアップ アカウント + authtoken アカウント + D