ネットワーク上の名前
このページでは 2 つの名前について説明します。Mac が名前でゲストに到達できるようにする、ゲスト自身の .local 名と、ゲストが解決するこの Mac の .local 名です。
ゲストの名前(mDNS)
標準ではオフです。オンにすると、名前でゲストに到達できます。
名前は none も含め、すべてのモードで使えます。
ゲストには、ネットワークカードのほかに、USB で接続した iPhone が Mac に提供するのと同じネットワークリンクがあります。これは Mac 上で 169.254 のアドレスを持つ en インターフェースとして表示されます。このアドレスはリンクローカルですが、Mac はこのアドレスで直接ゲストに到達できるため、tunnel モードでも <name>.local への接続はポート転送なしでゲストのサービスに届きます。
知っておくべきこと:
- ほかのデバイスがすでにその名前を使っている場合、mDNS はゲストの名前を変更します(
name-2)。 vm renameは、--mdns onで仮想マシン名から作られた名前を変更します。手動で選んだ名前はそのまま残ります。vm stopやウィンドウを閉じて停止した仮想マシンは、自身のアナウンスを取り消せません。Mac のリゾルバは、キャッシュされたレコードの期限が切れるまで古いアドレスを返し続けます。ホストアドレスの場合、これは 75 分(TTL 4500 秒)です。
vphoned は、vphone-vm が接続するたびにゲストのネットワーク設定(LocalHostName)に名前を設定し、ゲストの mDNSResponder がすべてのリンクでそれをアナウンスします。
ゲスト内でのこの Mac の名前
標準ではオンです。ゲストは、この Mac の mDNS 名(scutil --get LocalHostName に .local を付けたもの)を、ゲストが Mac に到達するためのアドレスにすぐに解決します。
これを無効にするには:
ゲストのリゾルバが返す内容と、各アドレスに接続できるかどうかを確認するには:
必要な理由
mDNS だけでは、ゲスト内での Mac の名前の IPv4 検索が失敗することがありました。ゲストは USB リンク上でも Mac の応答を受け取りますが、そこでは Mac に IPv4 アドレスがないため「そのようなレコードはない」と応答します。最初に応答したリンクで検索結果が決まるため、IPv4 アドレスを必要とするアプリは、別のリンクからの正しい応答がキャッシュされるまでエラーを受け取っていました。また、検索結果では USB リンク上の Mac の 169.254 アドレスが先頭に来ていました。iOS は 169.254.0.0/16 をプライマリインターフェース経由でルーティングするため、そのアドレスに接続する通常のソケットは、何も応答しない en0 から送り出され、タイムアウトまで待たされることがありました。
vphoned は、/etc/hosts の行と同じように、ゲスト自身の mDNSResponder にローカルレコードとして名前を登録します。これにより、ネットワークに問い合わせることも、キャッシュした応答を使うこともなく、IPv4 の検索にその 1 つのアドレスですぐに応答します。登録は vphone-vm が接続するたびに行われ、vphoned の起動時にも行われるため、再起動後にアプリが動き出す前に名前が用意されます。ゲストのシステムボリュームは読み取り専用なので、/etc/hosts そのものは編集されず、どのネットワークにも何もアナウンスされません。IPv6 の検索は引き続き mDNS に送られます。