iPhone を充電のために接続し、しばらくすると Mac の VPN が通信を通さなくなります。システム設定には iPhone USB という新しいサービスが表示され、目先の対処はそれを削除することに見えます。しかしその判断は多くの場合に誤りです。このサービスはテザリングの可能性もあれば、Xcode やデバイス用ツールが iPhone と通信するためのリンクの可能性もあり、両者の挙動は十分に異なるため、削除の前に識別が必要です。

手順 1: iPhone が実際に作成したサービスを読む

システム設定を開き、ネットワークを選び、iPhone を外した状態と接続した状態でサービス一覧を比較します。現在の macOS ではサービスは iPhone USB として表示されます。それが有効か、サービスの順序のどこにあるか、Mac がデフォルト経路に使っているかを記録します。サービスの順序が重要なのは、macOS が宛先に到達できる最も上位の有効なサービスを選ぶからであり、名前を知っているサービスを選ぶわけではありません。

Apple の パーソナルホットスポットのガイド はその仕組みを説明しています。iPhone でパーソナルホットスポットが有効な間、USB で接続すると、充電だけのつもりでも Mac が iPhone の携帯回線を使うことがあります。これは VPN クライアントの不具合ではなく、ルーティングテーブルが Wi-Fi より先に起動したサービスに従っているだけです。

サービスが存在しても、iPhone を接続したまま無効のままなら、ホットスポットではなく充電専用の接続かデバイスリンクを見ている可能性が高いです。この区別を保ってください。次の二つの手順は、アイコンから推測するのではなく、その区別を検証します。

手順 2: VPN の端点が使う経路を確認する

経路は Web サイトではなく、VPN サーバーの解決済みアドレスに対して読みます。 route -n get は読み取り専用で、カーネルが使うインターフェイスとゲートウェイを表示し、どちらの行も重要です。

scutil --dns | head -20
route -n get 203.0.113.10

上のアドレスは文書用のプレースホルダーです。クライアントが表示する端点に置き換え、IPv6 の端点には route -n get -inet6 を使ってください。iPhone を外した状態と接続した状態で出力を比較し、二回の読み取りの間に経路を追加したり削除したりしないでください。インターフェイスが en0 から iPhone USB に変わっていれば、ホットスポット経路が検索に勝ち、VPN の外側の接続が携帯回線を通っています。

経路の変化はすべての失敗を説明しません。新しい経路の MTU が違う、あるいは事業者がプロトコルを遮断しているため、クライアントがサーバーには到達できても、トンネル内部の通信で後から失敗することがあります。何かを変える前にクライアント自身のエラーを読みます。外側のハンドシェイクのタイムアウトは到達性を示し、確立したトンネルが通信を通さなくなる場合は MTU、DNS、ポリシーを示します。

手順 3: ホットスポットとデバイス通信リンクを切り分ける

Xcode 15 以降は、USB 接続したデバイスと、リンクローカル IPv6 を含むネットワーク経由のチャネルで通信します。そのため開発用の Mac には、インターネット接続とは無関係な追加のインターフェイスが現れることがあります。Apple のテクニカルノート TN3158 はこの挙動を記録し、次の点を警告しています。VPN やセキュリティフィルタリングが干渉する可能性がある。これはホットスポットの問題の逆です。iPhone がインターネットを提供するから VPN が壊れるのではなく、VPN がデバイス接続を捕捉するから壊れます。

パケットキャプチャなしでも、二つの観察でケースを分けられます。第一に、インターフェイスに経路可能なアドレスとデフォルト経路があるか、リンクローカルの fe80:: アドレスだけかを見ます。リンクローカルだけならインターネットへの経路はありません。第二に、VPN を終了して Xcode が再びデバイスに到達できるかを見ます。到達できるなら、VPN の経路かコンテンツフィルタがリンクローカルの通信を捕捉しており、修正はネットワークパネルではなく、スプリットトンネルやフィルタの設定に属します。

ifconfig | grep -A4 -E '^en[0-9]+:'
netstat -rn -f inet6 | head

インターフェイス名だけで判断しないでください。macOS はデバイスの接続に合わせてこれらのインターフェイスを作成・破棄し、en の番号は実行時に割り当てられるため、同じ Mac でも再起動やケーブル交換の後に別の番号になることがあります。

手順 4: 一度に一つの変数で失敗を再現する

どのサービスが関与しているか分かったら、決まった順序で問題を再現します。iPhone を外し VPN を接続した状態から始めます。パーソナルホットスポットを切ったまま iPhone を接続し、ネットワーク一覧が落ち着くのを待って経路の問い合わせを再実行します。外し、パーソナルホットスポットを有効にし、再接続して繰り返します。三つの状態それぞれについてインターフェイス、ゲートウェイ、クライアントのエラーを書き留めれば、記憶ではなく比較が手に入ります。

VPN がホットスポットの状態だけで失敗するなら、iPhone をその経路から遠ざけます。充電中はパーソナルホットスポットを切り、サービスの順序で iPhone USB を Wi-Fi の下に移します。ホットスポットを切った状態を含め、接続したどの状態でも失敗するなら、クライアントがネットワーク遷移をどう扱うかを見ます。主要なサービスが変わるとトンネルを破棄し、再接続を要するクライアントもあり、それはクライアントの挙動であって iPhone の不具合ではありません。

試行ごとに一つだけ変えます。サービスの削除、VPN 設定のリセット、クライアントの再インストールを同じ分に行うと、Mac は動いても、どの操作で直ったのか分からなくなります。

手順 5: 残すものと確認するものを決める

デバイスリンクには触れないでください。Xcode が使うインターフェイスを削除しても VPN の経路は直らず、次に接続するまでデバイスへの配信が壊れます。ホットスポットのサービスが本当に不要なら、まず iPhone でパーソナルホットスポットを切ります。それが文書化された制御で、再起動しても維持されます。

サービスを削除する場合は、識別したものを削除し、その後二点を確認します。VPN の端点への経路が想定のインターフェイスに戻っていること、トンネルがインターネットだけでなく内部アドレスにも通信を通すことです。サービスの順序とクライアントのバージョンを記録してください。macOS の更新で iPhone の見え方が変わる可能性があります。

そのうえで、実際に見た失敗を分類します。ハンドシェイクのタイムアウト、トンネル確立後の MTU の停止、事業者から返る DNS 応答は、三つの異なる問題であり、修正も三つに分かれます。USB サービスはいずれも引き金であり、原因であることはまれです。

関連記事