Làm cách nào để tìm địa chỉ IP của máy ảo bằng VMware Fusion?


19

Tôi có thể xác định IP của máy ảo bằng VMware Fusion mà không thực sự vào hệ điều hành chạy trên máy ảo không? Tôi đang tìm kiếm một tùy chọn menu, dòng lệnh hoặc nếu không tôi có thể phát hành đối với hình ảnh ảo với chính Phần mềm VMware Fusion.

Cảm ơn - Adron


Nếu bạn biết địa chỉ MAC của máy ảo NIC, bạn luôn có thể cố gắng tận dụng bộ đệm ARP của máy chủ hoặc đảo ngược ARP.
ta.speot.is

Thật đáng kinh ngạc khi vmware không làm cho điều này trở nên rõ ràng và dễ dàng như các vms khác! Chúc mừng cho câu trả lời avahi và nmap nếu bạn tuyệt vọng, nhưng vẫn - Thất bại lớn, VMware!
nealmcb 8/2/2015

Câu trả lời:


1

Trả lời ngắn gọn: Không

Câu trả lời dài: Không nhưng có lẽ

Địa chỉ IP hoàn toàn là trách nhiệm của HĐH. Do đó, khung ảo chứa HĐH không có ý tưởng nào về ngăn xếp TCP / IP trừ khi có các bổ sung cộng sinh cho khung như Hyper-V và các công cụ khách bổ sung của VMware (nhờ các ý kiến ​​dưới đây của baba.speot.is) . Nó không khác nhiều so với việc muốn duyệt các tệp trên VM mà không khởi động nó trước.

Về mặt kỹ thuật, nếu VM dựa vào DHCP, bạn có thể tìm kiếm máy chủ DHCP của mình (có thể là bộ định tuyến LAN của bạn) cho hợp đồng thuê cuối cùng được gửi đến địa chỉ MAC của NIC ảo để biết IP có thể là gì lần sau nó ra mắt. Điều đó giả định rằng cùng một IP không được trao cho một thiết bị khác ở giữa khi bạn xem lịch sử cho thuê và khi VM khởi động.


1
Argh. Tôi đã hy vọng rằng VMware có một số kết nối với HĐH sẽ cung cấp điều đó. :( Tôi không có quyền truy cập vào DHCP công ty, do đó tôi cũng không biết vì tôi cũng không có quyền truy cập vào HĐH thực tế.
Adron

Một trình ảo hóa có thể kết nối và lấy địa chỉ IP, Hyper V thực hiện điều đó với phần Bổ sung khách của nó. Và có vẻ như một số hương vị của VMware cũng sẽ nói với bạn, kb.vmware.com/Plevelop/Publishing/images/1006098.JPG - nhưng như WesleyDavid nói, đó thực sự không phải là trách nhiệm của nhà cung cấp dịch vụ.
ta.speot.is

46

VMWare cung cấp, không có gì đáng ngạc nhiên, một công cụ tích hợp cho việc này , vmrun. Đó là dưới /Applications/VMware Fusion.app/Contents/Library/vmrunmặc dù nó đã di chuyển xung quanh trong Fusion khác phát hành một chút.

🍺 vmrun list
    Total running VMs: 1
    .docker/machine/machines/myvm.vmx

🍺  vmrun getGuestIPAddress ~/.docker/machine/machines/myvm.vmx
    172.16.213.128

7
Đây phải là câu trả lời được chấp nhận. Làm việc hoàn hảo.
Michael Potter

2
Đẹp! vmrunTheo mặc định là trong PATH Mac của tôi, vì vậy vmrun getGuestIPAddress "$(vmrun list | grep vmx)", bao gồm các trích dẫn!
Big Rich

Rõ ràng VMWare Tools cần chạy trong VM. (Fusion V8.5)
Laryx Decidua

10

Đây là một mẹo trong trường hợp nó giúp bất cứ ai. Cài đặt avahi-daemontrên VM. Điều này cho phép bạn kết nối thông qua tên máy chủ vmname.local, vmnametên máy ảo của bạn ở đâu. Trong trường hợp của tôi, tên của VM là baremetalvà trên máy chủ tôi có thể chạy:

ssh baremetal.local

Không cần biết IP của VM. :)


1
Ý tưởng hay nhưng những máy ảo chạy hệ điều hành avahi-daemonkhông có sẵn thì sao? Ví dụ, Windows xuất hiện trong tâm trí ... :-)
Laryx Decidua

4

Có thể - ít nhất, trong trường hợp phổ biến, nơi mạng kiểu NAT được cấu hình cho khách. Vì VMWare đang cung cấp NAT-ing, nên nó có thể cho chúng tôi biết, địa chỉ hiện tại nó đang được NAT cung cấp. Một cái gì đó giống như vmrun listnên xuất ra thông tin này. Rằng nó không phải là một lỗ hổng ...

Nhưng, trong mọi trường hợp, đây là cách người ta có thể tìm ra bằng mọi cách. Đầu tiên, chạy ifconfigtrên máy Mac của bạn (có lẽ, ipconfigsẽ làm tương tự trên Windows, nhưng tôi chưa thử nghiệm nó). Điều này sẽ liệt kê tất cả các giao diện mạng trên máy - cả vật lý và ảo. Hãy tìm những người vmnet. Trên máy Mac của tôi, nó tạo ra:

% 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

Vì vậy, IP khách của tôi nằm trên một trong hai mạng riêng VM này: 192.168.82.0/24 hoặc 192.168.123.0/24. Trên máy chủ của bạn có thể chỉ có một, may mắn cho bạn hoặc hơn hai - chúng tôi cần kiểm tra tất cả. Đây là một tập lệnh tcsh rất đơn giản, được nhập trực tiếp trên dòng lệnh, nó đã làm điều đó cho tôi. Nó cố gắng ping từng địa chỉ trong tất cả các mạng riêng lớp C được quản lý bởi vmnet và kết thúc, khi ping thành công. Các -W 500tùy chọn cho ping để chờ chỉ nửa giây cho một phản ứng (có thể, có lẽ, sử dụng thậm chí ít hơn), và -c 1nói với nó để gửi đúng một gói:

% 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

Kịch bản nhỏ ở trên đã chạy trong một thời gian liệt kê tất cả các nỗ lực không thành công để đạt được các địa chỉ không tồn tại:

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
...

Cho đến khi cuối cùng nó đã thành công và kết thúc:

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

Voilà, tôi đã có thể ssh vào khách của tôi:

% ssh 192.168.123.130
Password:

Bây giờ, tôi chỉ có một khách duy nhất đang chạy - vì vậy địa chỉ IP đầu tiên phản hồi ping là đúng. Nếu bạn chạy nhiều khách cùng một lúc, bạn có thể cần sử dụng lệnh ping tương tự hoặc tương tự để tạo danh sách tất cả các địa chỉ IP riêng hợp lệ như vậy và sau đó thử tất cả chúng cho đến khi bạn vào đúng khách ...

(Và, có lẽ, .30 là một dự đoán tốt cho các địa chỉ dựa trên NAT. Nhưng tôi không thể nói chắc chắn được.)


1
Với nmap, bạn tìm thấy các IP tăng nhanh hơn ;-)nmap -sP 192.168.123.*
Robert Reiz

4

Như Mikhail T. đã nói, "Bởi vì VMWare đang cung cấp NAT-ing, nên nó có thể cho chúng tôi biết, địa chỉ hiện tại nó đang được NAT cung cấp." Thật vậy, nó làm:

Trong bản cài đặt VMware Fusion 6 của tôi, vmnet-dhcpddaemon ghi các tệp của nó vào các tệp /var/db/vmware/vmnet-dhcpd-vmnetX.leases, trong đó "X" là 1 và 8. Theo kinh nghiệm :-) Tôi đã thiết lập rằng đó là vmnet8 mà tôi nên tìm kiếm. Đây là một đoạn trích từ tập tin cho thuê /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";
}

Các client-hostnamelà tên của máy ảo và số sau chữ leaselà IP của nó. Bạn có thể phân tích các mục này hoặc chỉ đơn giản là nhìn vào những mục gần đây nhất. Hãy chắc chắn rằng hợp đồng thuê bạn đang xem vẫn còn hiệu lực.


2

Giải pháp của tôi cho vấn đề này là:

Khi bạn đã cài đặt các công cụ VMware, hãy định cấu hình chia sẻ để bạn có thể truy cập một thư mục (bất kỳ thư mục nào) từ CentOS. Sau đó, sửa đổi / etc / sysconfig / network-scripts / ifup-post để nối địa chỉ ip & ngày hiện tại của bạn vào một tệp trong thư mục dùng chung này.

Làm như thế nào:

Sửa đổi: / etc / sysconfig / network-scripts / ifup-post

thêm phần này vào dòng cuối cùng của ifup-post ("exit 0"):

date >> /path/to/shared/folder/guest_ip.log
ifconfig >> /path/to/shared/folder/guest_ip.log

Điều này sẽ nối thêm guest_ip.log của bạn với giá trị ngày và trả về của ifconfig mỗi khi mạng xuất hiện.

Trong trường hợp của tôi, tôi đã quyết định grep cho tiền tố 192 trên địa chỉ IP của mình, vì tôi biết rằng giữa nhà và nơi làm việc của tôi, nó luôn luôn là 192. Điều này có thể được thực hiện bằng cách điều chỉnh như trên:

date >> /path/to/shared/folder/guest_ip.log
ifconfig | grep 192 >> /path/to/shared/folder/guest_ip.log

"để bạn có thể truy cập một thư mục (bất kỳ thư mục nào) từ CentOS.". Còn những người 1) sử dụng các bản phân phối Linux khác, 2) sử dụng các hệ điều hành UNIX khác với Linux, 3) sử dụng các hệ điều hành không phải Unix như Windows, ... trong máy ảo của họ thì sao? :-)
Laryx Decidua

1

Chạy trong bảng điều khiển VM ipconfig(nếu VM là Windows) hoặc ifconfig(nếu VM là Linux).

IP của eth0là địa chỉ IP mà bạn đang tìm kiếm.


Câu hỏi ban đầu là "không thực sự vào hệ điều hành chạy trên máy ảo?" Điều này có thể đã thoát khỏi sự chú ý của bạn.
Laryx Decidua

Nó có thể không trả lời câu hỏi, nhưng tôi đã kết thúc ở đây với một câu hỏi hơi khác và nó rất hữu ích.
jamie-wilson

1

Tôi gặp vấn đề tương tự khi chạy VMPlayer trên Ubuntu 15.04. Máy ảo của tôi được đặt thành NAT và mặc dù tôi có thể xác định địa chỉ IP của nó bằng cách đăng nhập vào gui và chạy ifconfig trong VM, tôi không thể ping hoặc ssh vào nó.

Hóa ra khi VMPlayer được cài đặt, nó không kích hoạt dhcp trên bộ điều hợp vmnet1 và vmnet8. Giải pháp là sử dụng gui Ubuntu để chỉnh sửa các kết nối mạng với "Chỉnh sửa kết nối". Tìm vmnet1 dưới ethernet và nhấn nút chỉnh sửa. Trong cài đặt IPv4, bật DHCP, lưu và khởi động lại.

Bây giờ nếu bạn chạy ifconfig trên dòng lệnh, bạn sẽ nhận thấy rằng vmnet1 có địa chỉ IP. SSH vào máy ảo nat-ed từ máy chủ hiện cũng hoạt động.


0

Từ các trang của vmrun (phiên bản 1.14.4 build-3204469):

getGuestIPAddress        Path to vmx file     Gets the IP address of  the guest
                         [-wait]

Tuy nhiên, hãy nhớ rằng để điều này hoạt động, bộ công cụ VMware nên được cài đặt trong HĐH khách và bước này không thể thực hiện được nếu không đăng nhập vào HĐH khách. Bạn có thể cài đặt các công cụ trong một "hình ảnh cơ sở" và tạo hình ảnh mới từ nó thông qua nhân bản. Sau đó, bạn có thể sử dụng lệnh trên để lấy địa chỉ IP của các VM mới được tạo.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.