Как найти IP-адрес виртуальной машины с помощью VMware Fusion?
Могу ли я определить IP-адрес виртуальной машины с помощью VMware Fusion без фактического входа в операционную систему, работающую на виртуальной машине? Я ищу пункт меню, командную строку или что-либо еще, что я могу создать для виртуального образа с помощью самого программного обеспечения VMware Fusion.
Спасибо - адрон
11 ответов
Краткий ответ: нет
Длинный ответ: нет, но возможно
IP-адрес является исключительно ответственностью ОС. Следовательно, виртуальная платформа, в которой находится ОС, не имеет представления о стеке TCP/IP, если только в нее не добавлены симбиотические дополнения, такие как дополнительные гостевые инструменты Hyper-V и VMware (благодаря todda.speot.is в комментариях ниже), Это не сильно отличается от желания просматривать файлы на виртуальной машине, не запуская ее сначала.
Технически, если виртуальная машина полагается на DHCP, вы можете найти на вашем DHCP-сервере (скорее всего, в маршрутизаторе вашей локальной сети) последнюю аренду, которая была передана MAC-адресу виртуального сетевого адаптера, чтобы получить представление о том, какой IP-адрес, вероятно, будет в следующий раз он запускается. Это предполагает, что тот же IP не был передан другому устройству в промежутке между просмотром истории аренды и запуском виртуальной машины.
VMWare предоставляет, что неудивительно, встроенный инструмент для этого, vmrun
, Это под /Applications/VMware Fusion.app/Contents/Library/vmrun
хотя в других релизах Fusion он немного изменился.
vmrun list
Total running VMs: 1
.docker/machine/machines/myvm.vmx
vmrun getGuestIPAddress ~/.docker/machine/machines/myvm.vmx
172.16.213.128
Вот совет на случай, если это кому-нибудь поможет. устанавливать avahi-daemon
на ВМ. Это позволяет вам подключаться через имя хоста vmname.local
, где vmname
это имя вашей виртуальной машины. В моем случае имя виртуальной машины baremetal
и на хосте я могу запустить:
ssh baremetal.local
Не нужно знать IP виртуальной машины. :)
Как сказал Михаил Т. "Поскольку VMWare обеспечивает NAT-вход, он должен быть в состоянии сказать нам, для каких адресов он в настоящее время используется NAT". Это действительно так:
В моей установке VMware Fusion 6 vmnet-dhcpd
демон записывает свои файлы в аренду /var/db/vmware/vmnet-dhcpd-vmnetX.leases
, где "X" - 1 и 8. Опытным путем:-) Я установил, что это vmnet8, что я должен искать. Вот выдержка из файла аренды /var/db/vmware/vmnet-dhcpd-vmnet8.leases
:
lease 192.168.177.129 {
starts 1 2014/02/17 09:34:19;
ends 1 2014/02/17 09:36:56;
hardware ethernet 00:0c:29:2b:2b:10;
client-hostname "ubuntu";
}
client-hostname
это имя виртуальной машины и номер после слова lease
это его IP. Вы можете разобрать эти записи или просто посмотреть самые последние. Убедитесь, что аренда, на которую вы смотрите, все еще действительна.
Это возможно - по крайней мере, в общем случае, когда сеть в стиле NAT настроена для гостя. Поскольку VMWare обеспечивает NAT-вход, он должен быть в состоянии сказать нам, для каких адресов он в настоящее время используется NAT. Что-то вроде vmrun list
должна выводить эту информацию. То, что это не является недостатком...
Но, в любом случае, вот как это можно узнать в любом случае. Первый забег ifconfig
на вашем Mac (возможно, ipconfig
будет делать то же самое на Windows, но я не проверял это). Это перечислит все сетевые интерфейсы на машине - как физические, так и виртуальные. Ищите vmnet-ы. На моем Mac это производит:
% ifconfig | grep -A2 ^vmnet
vmnet1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:01
inet 192.168.82.1 netmask 0xffffff00 broadcast 192.168.82.255
vmnet8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:08
inet 192.168.123.1 netmask 0xffffff00 broadcast 192.168.123.255
Итак, IP-адрес моего гостя находится в одной из этих двух частных сетей виртуальных машин: либо 192.168.82.0/24, либо 192.168.123.0/24. На вашем хосте может быть только один, вам повезло, или более двух - нам нужно проверить их все. Вот очень простой tcsh-скрипт, введенный прямо в командной строке, который сделал это для меня. Он пытается пропинговать каждый адрес во всех частных сетях класса C, управляемых vmnet, и завершается, когда эхо-запрос успешен. -W 500
опция говорит ping ждать только полсекунды для ответа (возможно, мог бы использовать даже меньше), и -c 1
говорит ему отправить ровно один пакет:
% set i=2
% while ( $i < 255 )
while? ping -W 500 -c 1 192.168.82.$i && break
while? ping -W 500 -c 1 192.168.123.$i && break
while? @ i++
while? end
Вышеприведенный небольшой сценарий некоторое время выполнялся с перечислением всех неудачных попыток достичь несуществующих адресов:
PING 192.168.82.2 (192.168.82.2): 56 data bytes
--- 192.168.82.2 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING 192.168.123.2 (192.168.123.2): 56 data bytes
...
Пока это наконец не получилось и не закончилось
64 bytes from 192.168.123.130: icmp_seq=0 ttl=64 time=0.307 ms
--- 192.168.123.130 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
Вуаля, я смог войти в моего гостя:
% ssh 192.168.123.130
Password:
Теперь у меня был запущен только один гость, поэтому первый IP-адрес, отвечающий на пинг, был правильным. Если вы запускаете несколько гостей одновременно, вам может понадобиться использовать одну и ту же или похожую команду ping для создания списка всех таких действительных частных IP-адресов, а затем пробовать их все, пока вы не попадете в нужного гостя...
(И, возможно, .130 в любом случае является хорошим предположением для адресов на основе NAT. Но я не могу сказать точно.)
Мое решение этого было:
После установки инструментов VMware настройте общий доступ, чтобы вы могли получить доступ к папке (любой папке) из CentOS. Затем измените /etc/sysconfig/network-scripts/ifup-post, чтобы добавить свою текущую дату и IP-адрес в файл в этой общей папке.
Как это сделать:
Изменить: /etc/sysconfig/network-scripts/ifup-post
добавьте это перед последней строкой ifup-post ("exit 0"):
date >> /path/to/shared/folder/guest_ip.log
ifconfig >> /path/to/shared/folder/guest_ip.log
Это добавит ваш guest_ip.log с датой и возвращаемым значением ifconfig при каждом подключении к сети.
В моем случае я решил использовать префикс 192 для моего IP-адреса, поскольку я знаю, что между моим домом и работой всегда 192. Это можно сделать, изменив вышеприведенное, как указано ниже:
date >> /path/to/shared/folder/guest_ip.log
ifconfig | grep 192 >> /path/to/shared/folder/guest_ip.log
Запустить в консоли VM ipconfig
(если ВМ - это Windows) или ifconfig
(если ВМ это Linux).
IP из eth0
это IP-адрес, который вы ищете.
У меня была такая же проблема при запуске VMPlayer на Ubuntu 15.04. Моя виртуальная машина была настроена на NAT, и хотя я мог определить ее IP-адрес, войдя в графический интерфейс и запустив ifconfig на виртуальной машине, я не смог пропинговать или ssh войти в нее.
Оказывается, когда установлен VMPlayer, он не включил dhcp на адаптере vmnet1 и vmnet8. Решением было использовать графический интерфейс ubuntu для редактирования сетевых подключений с помощью "Редактировать подключения". Найдите vmnet1 под ethernet и нажмите кнопку редактирования. В настройках IPv4 включите DHCP, сохраните и перезагрузите компьютер.
Теперь, если вы запустите ifconfig в командной строке, вы заметите, что vmnet1 имеет IP-адрес. SSHing в nat-ed VM с хоста теперь также работает.
Из man-страниц vmrun (версия 1.14.4 build-3204469):
getGuestIPAddress Path to vmx file Gets the IP address of the guest
[-wait]
Однако имейте в виду, что для того, чтобы это работало, пакет VMware Tools должен быть установлен в гостевой ОС, и этот шаг не может быть выполнен без входа в гостевую ОС. Вы можете установить инструменты в "базовое изображение" и создавать новые изображения из него с помощью клонирования. Затем вы можете использовать вышеуказанную команду, чтобы получить IP-адрес вновь созданных виртуальных машин.
arp -a| grep vmnet
? (172.16.65.132) at 0:c:29:83:1:e0 on vmnet8 ifscope [ethernet]