トンネルモード

Mac の通信が VPN やプロキシアプリを経由していて、ゲストの通信も同じ経路を通る必要がある場合は、tunnel モードを使います。nat と bridged では、ゲストのパケットは VPN を経由しません。

有効にする

マシンを停止してから、次を実行します。

vphone-cli vm config <name> --network tunnel

Launchpad では、マシンの Settings… の Network セクションで tunnel を選びます。バンドルの vphone-cli vm config --help に tunnel が表示される必要があります。古いバンドルはこの設定を拒否します。

動作を確認する

  1. マシンを起動し、起動が完了するまで待ちます。

  2. ゲストのアドレスを読み取ります。

    vphone-launchpad-cli guest rpc <name> device.network

    en0 に 192.168.127.3 が表示されるはずです。fe80:: のアドレスしか表示されない場合は、DHCP がまだ完了していません。数秒待ってからもう一度試してください。

  3. ゲストでページを開きます。

    vphone-launchpad-cli guest rpc <name> apps.open_url '{"url":"https://example.com"}'
  4. Mac で、接続が vphone-vm に属し、VPN のアドレスを使っていることを確認します。

    lsof -nP -a -i -p "$(pgrep -f 'vphone-vm.*<name>')"

ゲストから見える内容

項目値
ゲストのアドレスDHCP による 192.168.127.3/24、または固定アドレス
ゲートウェイと DNS192.168.127.1、または固定アドレスのサブネットの最初のアドレス
MTU1500
DNS192.168.127.1 への問い合わせは Mac のリゾルバに送られます
ゲートウェイへのその他の接続Mac のループバック 127.0.0.1(TCP と UDP)

プロキシアプリでは、ゲストはマシンの名前が付いた独立したクライアントとして表示され、アプリのルールがほかのアプリと同じように適用されます。

制限

  • IPv4 のみ。 ゲストには IPv6 アドレスが割り当てられず、IPv6 の通信は破棄されます。
  • 転送したポートを除き、外向きのみ。 ポート転送で指定したポート以外では、Mac や LAN からこのネットワークを通じてゲストに到達することはできません。USB 経由のアクセス(iproxy、ideviceinstaller)と vphone.sock はゲストのネットワークを使わないため、引き続き動作します。.local 名でも USB リンク経由でゲストに到達できます。ネットワーク上の名前をご覧ください。
  • ping はゲートウェイにしか届きません。 インターネットへの ICMP は転送されないため、TCP と UDP が動作していても、ゲストでの ping 1.1.1.1 は失敗します。
  • スループットは vphone-vm によって制限されます。 すべてのパケットはこのプロセスで処理されます。ダウンロードやビデオは問題なく動作しますが、VPN が関係しない場合は nat のほうが高速です。

仕組み

VPN が Mac のデフォルトルートを握っている場合(WireGuard、Cloudflare WARP、または Surge や Clash などの TUN モードのプロキシアプリ)、nat と bridged が物理インターフェースから送り出すパケットは VPN を経由しません。暗号化されないまま送られるか、まったく送られません。

tunnel モードでは、ゲストのネットワークカードは vphone-vm の内部で実装されます。ゲートウェイとして DHCP、ARP、ping に応答し、ゲストの各 TCP 接続と UDP フローを Mac 上の通常のソケットに変換します。それらのソケットはほかのアプリと同じく Mac のルーティングテーブルに従うため、VPN がそれらを運びます。root 権限も、新しいネットワークインターフェースも、Mac のネットワーク設定の変更も必要ありません。

関連項目