トンネル

スイッチが扱うのはシステムのインタフェースであり、ある 1 本のレコードではない。

ホーム画面上部のスイッチが起動するのは iOS の Network Extension です。端末の送信は Shadowrocket の仮想 NIC に入ります。レコード、ルール、Data はそのインタフェースのあとで起きます。プラットフォームの制限は システム です。

  1. 01初めてスイッチを入れるとき
  2. 02「接続中」はトンネルがあることだけを示す
  3. 03Config · Proxy · Direct
  4. 04接続がトンネルに入ったあと
  5. 05システムは個人 VPN を同時に 1 本しか維持しない

01

初めてスイッチを入れるとき

システムは VPN 構成の追加を求めます。許可すると、「設定」の VPN 一覧に Shadowrocket が出ます。これは OS が個人 VPN を認可する手続きであり、ノード提供者へのログインでも、本アプリのアカウントでもありません。アプリにアカウントはありません。

拒否すると仮想 NIC は作られず、スイッチの対象がありません。あとからシステム設定でこの構成を消す、スクリーンタイム / MDM で VPN を禁じると、スイッチは再び効かなくなり、再許可が必要です。再インストールでこのシステム構成が消えることがあり、「急に繋がらなくなった」ように見えます。許可が消えたのであり、レコードの期限切れではありません。

許可の対象は端末上の拡張です。その先の行き先は、選んだレコードと現在のポリシーが決めます。ストアのライセンスが覆うのはここまでです。アプリがシステム VPN を申請できる、という層です。出口は含まれません。

02

「接続中」はトンネルがあることだけを示す

Shadowrocket ホーム:スイッチオフ、Global Routing は Config
上部のスイッチがトンネルです。Global Routing で Config / Proxy / Direct を選びます。App Store 掲載画面。端末の版に従ってください。

ステータスバーに VPN アイコンが出て、スイッチがオンのままなら、拡張は動いています。そのときでも接続は DIRECT と判定され、セルラーや Wi-Fi の元経路で出て、ハイライトしたレコードを一切通らないことがあります。

だから「もう繋がった」を「すべての要求がノードに入った」にしてはいけません。バイトがレコードに入ったかは Data のふたつのカウンタ を見ます。ルールがホストを直通に残したかは ルール を見ます。

スイッチが点滅して何度も戻るのは、拡張が安定して起きなかった、ということです。よくある原因は、現在のレコードのハンドシェイク失敗(タイプ、トランスポート、証明書、UUID が対向と不一致)、またはシステムに使える VPN 構成がないことです。レコードを替える前に、ポリシーが Direct でないことを確認してください。Direct ではトンネルは点いたままで、対向へのハンドシェイクはしません。スイッチが戻ることと「ノードが壊れた」は別の失敗です。

ハイライト行がないままスイッチを入れる結果はバージョン次第です。「未選択でも繋がる」に頼らないでください。一覧には出口にできるレコードが必要です。オブジェクト を見てください。

03

Config · Proxy · Direct

この三項は現在の構成全体を覆い、1 行のルールより先に見えます。答えるのは、トラフィックがトンネルに入ったあと、ルールをまだ問うかです。

ポリシーとレコードは別々に選びます。レコードを替えても Config / Proxy / Direct は変わりません。ポリシーを替えてもハイライト行は変わりません。両方間違っていても、画面は接続中のままです。

切り分けは Direct → Proxy → Config の順で、一度に動かすのはポリシーだけです。Data を見てください。Config の下で FINAL をいじりながらレコードも替えるのは、切り分けではありません。

04

接続がトンネルに入ったあと

拡張が送信を受けたあと、おおよそこの順で処理します。細部は現在のバージョンに従います。

  1. ポリシーが Direct なら: システムの元経路へ戻し、ルールは問わず、現在のレコードへはハンドシェイクしません。
  2. ポリシーが Proxy なら: ルールは問わず、今ハイライトされているレコードへ送ります。レコードのハンドシェイクが失敗すると、この段で止まります。
  3. ポリシーが Config なら: 現在の構成のリストを上から照合し、DIRECT / PROXY / REJECT を得ます。
  4. DIRECT の接続は元経路へ戻り、REJECT は捨て、PROXY の接続は現在のレコードへ行きます。
  5. リライトが有効なら、要求が見えたあとに URL やヘッダを変えます。リライト を見てください。振り分け結果をさかのぼって書き換えません。

UDP も TCP もトンネルに入りますが、すべてのレコードタイプが UDP を同等に転送するわけではありません。あるアプリが UDP だけで失敗する(ゲーム、一部の通話)なら、先にそのレコードが対応を宣言しているかを見、次にルールがポートで REJECT していないかを見ます。

照合の前後のどの段で名前解決するかが、ルールが見るのが名前かアドレスかを決めます。DNS を見てください。

05

システムは個人 VPN を同時に 1 本しか維持しない

別の VPN アプリが接続中のとき、iOS は通常、トラフィックを Shadowrocket に渡しません。本アプリのスイッチが点いていても、バイトはこの拡張に入っていないことがあります。障害を切り分けるときは、先にシステムの VPN 一覧で今効いているのがどれかを見てください。

機内モード、Wi-Fi とセルラーの切替、低電力、システムのバックグラウンド回収は、いずれもトンネルを壊します。フレームワークの挙動であり、レコードが急に「期限切れ」になったのではありません。ポータル認証の網は、先に端末自身にログインページを終わらせてから、スイッチを入れてください。これらの境界の展開は システム です。