どうも。
最近、Android 16で「Always-On VPN」や「VPNなし通信をブロック」を有効にしていても、一部通信がVPNを経由せず外部へ送信される可能性がある問題が話題になっている。
しかも影響範囲はMullVadVPNだけではなく、Android上のVPNアプリ全般に及ぶ可能性があるとのこと。
Googleはこの問題を「修正困難(Won’t Fix)」としてクローズし、一方ではGrapheneOSは迅速に独自修を行った。
私は普段、外出用メイン端末にGoogle Pixel 7a(GrapheneOS)、自宅用に中国製Android端末を2台運用し、匿名性やIP保護を重視してMullvad VPNを利用している。
そのため、もしVPNを使っていても一部通信が漏れるのであれば、それは単なる不具合ではなく、セキュリティ設計そのものに関わる問題だ。
そこで今回、Android 16へ更新された に対して、ADBを使った対策設定を実施した。
この記事では、その手順と注意点を、初心者でも分かるようにまとめていく。
Mullvad 推奨 VPNユーザーならやるべき Stock AndroidのADB設定
Android 16で、Always-On VPNや「VPNなし通信をブロック」を有効にしていても、一部通信がVPNを経由せず外部へ送信される問題が確認された。
影響はMullVadVPNだけではなく、Android上のVPNアプリ全般に及ぶ可能性がある。
Googleはこの問題を「修正困難(Won’t Fix)」としてクローズしており、Mullvad側は強い懸念を示している。
一方、GrapheneOSは迅速に独自修正を行った。
私は、外出用のメイン端末としてGrapheneOSを導入したスマホ(Google Pixel 7a)を使い、サブ端末としてiPhone12 mini 、さらに自宅Wi-Fi専用として中国製Androidスマホ2台(Poco M7 Pro 5GとRedmi 12 5G )を使用している。
その中で、Poco M7 Pro 5G が Android 16 にアップデートされていたため、最近話題になっている「VPN通信の一部がVPN外へ漏れる可能性」の問題に危機感を覚えた。
私は普段、 MullVadVPNを契約して使用している。
匿名性やIP保護を重視しているため、もしVPNを使っていても一部通信が外へ漏れているのであれば、本来期待していたセキュリティ効果が十分に発揮されていないことになる。
そこで今回、ChatGPTに相談しながらADB設定を行い、Android側の該当機能を無効化する対策を実施した。
結果として、無事に設定を適用することができた。
ここからはChatGPTに聞いた回答です。
はい、その記事の内容なら、 記事が推奨している「QUIC close payload」を無効化するADBコマンドを、あなたの Poco M7 Pro 5G(Android 16)で実行する流れになります。
かなり丁寧に順番を書きます。
まず理解しておくこと
これは:
- VPN自体を変える話ではない
- Android 16側の挙動変更
- ADBでシステム設定を書き換える
という内容です。
あなたのように:
- Always-on VPN
- VPNなし通信をブロック
- MullvadやGrapheneOS思想寄り
- IPリークを嫌う
タイプなら、やる価値はあります。
必要なもの
スマホ側
- Poco M7 Pro 5G
- USBケーブル
USBケーブルは用途にあったものを使用しないと認識されません。
以下のタイプのものならOKです。

PC側
Windows / Linux Mint / Mac どれでも可能です。
あなたはLinux Mint使っているので、それで説明します。
注意点として、有線LANケーブル使用が望ましいです。
手順① 開発者オプションを有効化
Poco側で:
設定 → デバイス情報 → 「ビルド番号」を7回タップ
すると:
「開発者向けオプションが有効になりました」
と出ます。
ビルド番号とは「OS バージョン(For POCO) 3.0.1.0.WOQMIXM」のことです。

手順② USBデバッグON
設定 →
追加設定 →
開発者向けオプション →
- USBデバッグ ON
を有効化。
手順③ Linux MintにADB導入
端末を開いて:
sudo apt update
sudo apt install adb
確認:
adb version
手順④ USB接続
スマホとPCをUSB接続。
スマホ側に:
「USBデバッグを許可しますか?」
が出るので:
- このPCを信頼
- 許可
を押す。
手順⑤ 接続確認
Linux Mint側:
adb devices
成功すると:
List of devices attached
xxxxxxxx device
と出る。
手順⑥ 問題の設定を無効化
これを打つ:
adb shell device_config put tethering close_quic_connection -1
エラーが出なければOK。
手順⑦ 本当に設定できたか確認
adb shell device_config get tethering close_quic_connection
これで:
-1
と表示されれば成功。
手順⑧ 再起動
adb reboot
または普通にスマホ再起動。
補足:この設定は何をしている?
Android 16 の:
registerQuicConnectionClosePayload
関連の挙動を実質止めています。
つまり:
「QUIC切断通知をVPN外へ直接送るな」
という設定。
デメリット
記事通り:
- 一部サーバー接続が少し長く残る
- timeout待ちになる
程度。
普通の人は体感しない可能性が高いです。
注意点
かなり重要。
OSアップデートで戻る可能性
以下でリセットされることがあります:
- Androidアップデート
- Google Play System Update
- Xiaomi/HyperOS更新
なので、更新後は再確認推奨。
確認コマンドだけ覚えておくと便利:
adb shell device_config get tethering close_quic_connection
さらに重要な話
これは:
「VPN絶対安全」
にするものではありません。
Android Stock系は:
- Google Play Services
- OEM独自通信
- HyperOS独自処理
- Xiaomiテレメトリ
などもあるので、
GrapheneOSほどの厳密性はありません。
ただ、
- Always-on VPN
- VPNなし通信ブロック
- Mullvad
- このADB設定
までやると、一般Androidとしてはかなり強い部類です。
もし希望なら次に:
- Linux MintでADBが認識しない時の対処
- HyperOSでUSBデバッグが切れる問題
- Mullvadの「VPNなし通信をブロック」の正しい設定
- Android16で実IPリーク確認する方法
- Wiresharkで実際に検証する方法
も説明できます。
今回の設定は、「これで完全安全になる」という魔法ではない。
Stock Android系には、Google Play ServicesやOEM独自通信、HyperOS固有の処理など、依然として不透明な部分も残っている。
ただ、
- Always-On VPN
- VPNなし通信ブロック
- Mullvad VPN
- ADBによるQUIC設定対策
まで組み合わせることで、一般的なAndroid運用としては、かなり強固な構成に近づけるだろう。
少なくとも私は、「高い金を払ってVPNを契約しているのに、知らないところで漏れていた」という状態を放置したくなかった。
セキュリティは、一発で完成するものではなく、小さな確認と積み重ねの連続なのだと改めて感じる。

