Skip to content

透過キャプチャ

透過キャプチャは、アプリケーションを一切変更することなく、TCP コネクションをカーネルレベルで直接 mqproxy へリダイレクトします — SOCKS5 の設定も、プロキシ設定も、アプリ側の認識も不要です。デフォルトでは、キャプチャされた各コネクションは MPQUIC トンネル上で単一ストリームとして 不透明に(バイト単位で、復号せずに)リレーされ、フローレベルのマルチパスアグリゲーションを提供します。このとき、エンドツーエンドの TLS はアプリケーションとオリジンの間で完全に保たれ、mqproxy は平文を一切見ません--mitm を追加すると、代わりに TLS を HTTP/2 として終端・検査します — このオプトインモードは TLS MITM モード で説明します。

Linux + IPv4 のみ

透過キャプチャはカーネルのファイアウォールルールをインストールするため、root または CAP_NET_ADMIN が必要です。

2 つのカーネルキャプチャ方式

  • redirect(デフォルト)nft nat OUTPUT(REDIRECT ターゲット)を使用します。ローカルマシン自身の外向き TCP をキャプチャします。ソケットに IP_TRANSPARENT を必要としません。mqproxy と高速化対象のアプリが同じホストで動く場合に適したモードです。
  • tproxynft mangle PREROUTING(TPROXY ターゲット)を、待ち受けソケットの IP_TRANSPARENT とともに使用します。ルータゲートウェイのように、下流の LAN ホストからの 転送 トラフィックをキャプチャします。ローカル TCP スタックの応答パケットを正しいインターフェースから送り返すために、fwmark + ポリシールーティングテーブルが必要です。これは標準的な Linux TPROXY セットアップで、パケットをマークしてリスナーへ誘導できる任意のルータ/ポリシールーティングスタックと組み合わせられます — OpenMPTCProuter(OMR)はそうしたデプロイの一例であって、必須ではありません。

単一ホストのクイックスタート(redirect モード、--setup-redirect

bash
# サーバー — 通常の設定から変更なし。
./build/mqproxy server --listen 0.0.0.0:4433 --token secret123

# クライアント — :12443 で透過リスナー。nft ルールを自己インストール (root が必要)。
sudo ./build/mqproxy client \
  --server 127.0.0.1:4433 --token secret123 \
  --tproxy 127.0.0.1:12443 \
  --setup-redirect

# このホスト上で TCP :443 へ外向き接続するアプリは、透過的にキャプチャされ、
# MPQUIC でアグリゲーションされ、オリジンへ転送されます。
# curl の --socks5 / --proxy フラグは不要です。
curl https://example.com/

--setup-redirect は、起動時に nft ルールをインストールし終了時に削除するよう mqproxy に指示します。root または CAP_NET_ADMIN が必要です。自己インストールされるルールは デフォルトで TCP 宛先ポート 443 をキャプチャします。別のポートをキャプチャするには --tproxy-dport <port> を使います。複数ポートやより細かい制御が必要な場合は、ファイアウォールルールを自分でインストールし、トラフィックをリスナーへ向けるだけにしてください — mqproxy は、ルールがリダイレクトしたものの元の宛先を読み取ります。

ルータ/ゲートウェイのデプロイ(tproxy モード)

ルータスタックが既にファイアウォールとポリシールーティングのルールを所有している場合(例: OpenMPTCProuter、または PREROUTINGTPROXY ターゲットを置きパケットをマークする任意のセットアップ)、--setup-redirect を OFF のままにし、mqproxy にはリスナーの提供だけをさせます — その --tproxy-fwmark/--tproxy-table をルールが使う値に合わせてください。

bash
sudo ./build/mqproxy client \
  --server <server>:4433 --token secret123 \
  --tproxy 0.0.0.0:12443 \
  --tproxy-mode tproxy \
  --tproxy-fwmark 1 \
  --tproxy-table 100
  # --setup-redirect なし — ルータスタックがルールを所有

ループ回避とセキュリティ上の注意

  • --tproxy-uid <uid> は、自身の外向き トラフィックがリダイレクトから除外される UID を 1 つ指定します(mqproxy 自身のサーバーへの接続が自分自身に再キャプチャされないように)。デフォルトはプロセスの geteuid() です。専用の非 root サービスアカウントとして実行することを推奨します。uid 0 を使うと全 root トラフィックが除外され、意図より広くなります。
  • デフォルトで透過キャプチャは 不透明 です。mqproxy は生の TLS バイトをリレーし、決して復号しません。証明書ピンニングを行うアプリケーションも引き続き動作します。--mitm を追加すると、このキャプチャ経路が TLS 終端の L7 プロキシになります — TLS MITM モード を参照してください。MITM は --mitm が渡されない限り OFF です。

Apache License 2.0 に基づき公開