네트워크상의 이름

이 페이지에서는 두 가지 이름을 다룹니다. Mac이 이름으로 게스트에 접근할 수 있게 하는 게스트 자신의 .local 이름, 그리고 게스트가 확인하는 이 Mac의 .local 이름입니다.

게스트의 이름(mDNS)

기본적으로 꺼져 있습니다. 켜면 이름으로 게스트에 접근할 수 있습니다.

vphone-cli vm config <name> --mdns on
ping <vm-name>.local
설정효과
--mdns on게스트가 <vm-name>.local에 응답합니다. 가상 머신 이름에서 영문자와 숫자가 아닌 문자는 하이픈이 됩니다. ipad_pro.13은 ipad-pro-13.local이 됩니다.
--mdns <name>게스트가 직접 고른 다른 이름에 응답합니다.
--mdns off게스트 자신의 이름으로 돌아갑니다.

이 이름은 none을 포함한 모든 모드에서 동작합니다.

모드<name>.local이 확인되는 주소
nat공유 네트워크에서의 게스트 주소, 그리고 USB 링크 주소
bridgedLAN의 모든 기기에 대해 게스트의 LAN 주소, Mac에서는 USB 링크 주소도
tunnel, none게스트의 USB 링크 주소(Mac에서만)

게스트에는 네트워크 카드 외에도, 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에 접근하는 주소로 즉시 확인합니다.

모드게스트에서의 <Mac>.local
nat공유 네트워크의 Mac. 보통 192.168.65.1(--nat-peers off이면 192.168.64.1)
tunnel게이트웨이. 기본값은 192.168.127.1입니다. QEMU와 VirtualBox의 10.0.2.2처럼, 이 주소로의 연결은 Mac의 루프백(127.0.0.1)에 도달합니다
bridged브리지된 인터페이스에서의 Mac 주소

철회하려면 다음을 실행합니다.

vphone-cli vm config <name> --mac-name off

게스트의 확인자가 무엇을 반환하는지, 각 주소에 연결되는지 확인하려면 다음을 실행합니다.

vphone-launchpad-cli guest rpc <name> network.resolve '{"host":"<Mac>.local","family":"ipv4","port":8000}'

필요한 이유

mDNS만으로는 게스트에서 Mac 이름의 IPv4 조회가 실패할 수 있었습니다. 게스트는 USB 링크에서도 Mac의 응답을 받는데, 그 링크에서 Mac에는 IPv4 주소가 없으므로 '해당 레코드 없음'으로 응답합니다. 먼저 응답한 링크가 조회 결과를 정했기 때문에, IPv4 주소가 필요한 앱은 다른 링크의 실제 응답이 캐시될 때까지 오류를 받았습니다. 또한 조회 결과에서 USB 링크의 Mac 169.254 주소가 먼저 나왔습니다. iOS는 169.254.0.0/16을 기본 인터페이스로 라우팅하므로, 이 주소에 연결하는 일반 소켓은 아무도 응답하지 않는 en0으로 나가 시간 초과까지 기다릴 수 있었습니다.

vphoned는 /etc/hosts의 한 줄처럼 게스트 자체의 mDNSResponder에 이 이름을 로컬 레코드로 등록합니다. 그러면 네트워크에 묻지 않고, 캐시된 응답도 쓰지 않고, IPv4 조회에 그 주소 하나로 즉시 응답합니다. vphone-vm이 연결할 때마다, 그리고 vphoned가 시작될 때 다시 등록하므로, 재시동 후 앱이 실행되기 전에 이름이 준비됩니다. 게스트의 시스템 볼륨은 읽기 전용이므로 /etc/hosts 자체는 수정하지 않으며, 어떤 네트워크에도 알리지 않습니다. IPv6 조회는 여전히 mDNS로 갑니다.

함께 보기