Làm cách nào để tìm địa chỉ IP của Máy ảo KVM mà tôi có thể SSH vào nó?


30

Tôi đã làm theo hướng dẫn này ( Ảo hóa với KVM trên Ubuntu 11.10 ) để thiết lập KVM (Phần mềm máy ảo) trên Máy chủ Ubuntu 11.10 của tôi. Tuy nhiên, tôi đã không thiết lập địa chỉ IP của VM khi tạo VM, thay vì sử dụng:

vmbuilder kvm ubuntu --suite=oneiric --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

Tôi đã sử dụng: (Tôi đã xóa "--ip = 192.168.0.101 --gw = 192.168.0.1" khỏi dòng lệnh)

vmbuilder kvm ubuntu --suite=oneiric --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

Tôi đã thiết lập cầu nối mạng như hướng dẫn đã chỉ dẫn và giao diện của VM mới được kết nối với cầu mạng.

Tôi giả sử KVM sẽ chỉ định VM của tôi qua DHCP nhưng tôi không có thông tin về địa chỉ IP của VM mới, tôi có thể tìm địa chỉ IP của VM và SSH cho VM mới ở đâu? Cảm ơn.

[Ghi chú: Tôi đã quản lý để đăng nhập VM mà không biết địa chỉ IP của VM. Sử dụng " Xming + SSH với X chuyển tiếp đồ họa " Nhưng không có địa chỉ IP DHCP nào được gán cho máy ảo của tôi, ngoài câu hỏi trên, tôi có một câu hỏi khác ở đây: Làm cách nào để bật DCHP trên máy ảo của tôi để khi tôi sử dụng Xming để đăng nhập qua " người xem tài năng "Tôi ít nhất có thể thấy địa chỉ IP của mình ở đó.]


Tôi đã tìm ra vấn đề và giải quyết nó. Trong / etc / mạng / giao diện, tôi đã xóa thông tin "mạng" và "quảng bá" và DHCP hoạt động trên các máy khách VM của tôi. Bây giờ tôi có thể ssh vào máy khách của tôi. Tôi đoán "mạng XXX.XXX.XXX.XXX" hoặc "phát sóng XXX.XXX.XXX.XXX" của tôi là sai. hướng dẫn vẫn hoạt động tốt cho loại thiết lập này, chỉ cần cẩn thận khi thiết lập môi trường mạng của riêng bạn. Vấn đề đã được giải quyết!!!
Xianlin

1
libvirt hiện có hai lệnh: domifaddr và net-dhcp-cho thuê
Nehal J Wani

vui lòng tham khảo liên kết này , bạn sẽ tìm thấy câu trả lời:

Câu trả lời:


20

Bạn có thể chạy arp -nđể xem IP của máy ảo của bạn. Theo cách đó, bạn không phải đăng nhập vm khách và gõ ifconfig.

Blog dưới đây có nhiều chi tiết hơn và bao gồm tập lệnh perl tự động tìm địa chỉ của máy ảo.

Mẹo: Tìm địa chỉ IP của máy ảo


Quá dễ. Tuyệt vời ....
Indika K

1
Truy cập trang web xyz để biết câu trả lời là không tốt nếu liên kết không hoạt động, vui lòng đăng "câu trả lời đầy đủ"
FreeSoftwareServers

31

Thử đi:

virsh net-list
virsh net-dhcp-leases <net-name>   <--- net-name from above command

Bạn cũng có thể sử dụng mẫu sau nếu bạn biết địa chỉ MAC:

virsh net-dhcp-leases <net-name> --mac <mac-address>

Địa chỉ MAC có thể được tìm thấy từ lệnh dumpxml. Xem Có cách nào để xác định giao diện ảo nào thuộc về máy ảo trong máy chủ kvm không?


5
Đây là câu trả lời chính xác. Hoạt động mà không có hack. Cảm ơn rất nhiều.
chmac

1
Phải là "danh sách mạng virsh" ... không có khoảng cách giữa "mạng" và "danh sách". Nếu không, điều này hoạt động hoàn hảo.
Dave Hein

@DaveHein Cảm ơn đã sửa. Cập nhật câu trả lời.
Raul

Nếu bạn nhận được kết quả trống, hãy thử chạy virsh vớisudo
Freedom_Ben

6

Tôi đoán đây là một câu hỏi cũ, nhưng các phiên bản hiện tại virshlàm cho việc này dễ dàng hơn rất nhiều nếu bạn đang sử dụng mạng riêng hoặc cầu nối. Tôi có một máy ảo được đặt tên steaktrên một mạng riêng (định tuyến) (AKA "NAT"). Đó chỉ là hai lệnh để tìm IP nào được gán bởi cơ chế tích hợp:

$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
 21    steak                          running

$ sudo virsh domifaddr steak
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet0      76:0c:28:ab:0e:ee    ipv4         10.14.1.1/24

Tôi cũng có một VM ( eggs) khác được kết nối với mạng thông thường (được kết nối với một thiết bị cầu nối trên máy chủ hypanneror). Libvirt không gán cho nó một địa chỉ; nó nhận được một địa chỉ từ máy chủ DHCP của mạng tôi, cũng cập nhật DNS động trong trường hợp của tôi. Đó là một khả năng có thể xảy ra khi không có đầu ra domifaddcho VM này. Vì vậy, về cơ bản, bạn phải tìm địa chỉ giống như bất kỳ máy nào khác - tìm địa chỉ trong bảng arp có lẽ là dễ nhất - có nghĩa là ip neighbourbây giờ, như arpkhông dùng nữa và không còn xuất hiện trên một số bản phân phối. May mắn thay cho những người trong chúng ta không đánh vần những thứ có vouwels, bạn cũng có thể sử dụng các phiên bản ngắn hơn, như ip neighip n(hoặc ip neighbor). ;) Dưới đây, tôi sử dụng domiflistđể tìm địa chỉ MAC (lưu ý rằng nó được kết nối vớibr0 trong cột "nguồn") và sau đó tìm thấy trong bảng arp.

$ sudo virsh domifaddr eggs
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------

$ sudo virsh domiflist eggs
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      bridge     br0        virtio      52:54:00:2c:ac:ee

$ ip neigh | grep -i 52:54:00:2c:ac:ee
192.168.0.226 dev br0 lladdr 52:54:00:2c:ac:ee REACHABLE
$ host eggs
eggs.home.domain.com has address 192.168.0.226

5

danh sách cho vms:

virsh list

lấy vm MAC từ tên

virsh domiflist debian8

thực hiện quét mạng con vm của bạn bằng grep (MAC phải được viết hoa)

nmap -sP 10.0.0.0/24 | grep 52:54:00:FD:1F:92 -B 3 

kết quả

Nmap scan report for 10.0.0.173
Host is up (0.0012s latency).
MAC Address: 52:54:00:FD:1F:92 (QEMU Virtual NIC)

4

Nếu bạn có quyền truy cập bàn điều khiển vào VM thì chỉ cần chạy ifconfig -atrên máy khách. Trong khi bạn ở đó, hãy kiểm tra để đảm bảo rằng khách có kết nối mạng và nó sshdđang chạy.

Nếu bạn không truy cập bàn điều khiển, thì rất có thể địa chỉ IP được gán bởi DHCP. Hãy tìm một máy khác cũng đang nhận nhiệm vụ DHCP, có thể là máy chủ lưu trữ, sau đó thêm 1 vào địa chỉ và thử. Trong thực tế, hãy thử 5 hoặc 6 địa chỉ tiếp theo. Nếu điều đó không hoạt động, thì bạn có một mạng hoạt động lớn và sẽ cần thử mọi địa chỉ IP trong mạng con hoặc có một vấn đề mạng cấp thấp hơn như không có tuyến đến máy chủ hoặc hai máy chủ có cùng địa chỉ MAC. Hoặc có thể bạn không sshdchạy.

Sử dụng bàn điều khiển là cách dễ nhất để giải quyết vấn đề này.


Tôi thực sự đã quản lý để kết nối với máy ảo của mình thông qua lệnh Xming Server + "virt-viewr". Tôi thấy không có IP nào được gán cho khách khi tôi đang ở trong VM. Làm thế nào để DHCP hoạt động? Bất kỳ tệp XML nào tôi cần thay đổi?
Xianlin

Xin chào Michael, bạn có nghĩ rằng bạn có thể giúp tôi nếu tôi cấp cho bạn quyền truy cập vào máy chủ của tôi không? Tôi đã thử DHCP và IP tĩnh nhưng máy ảo khách không nhận được bất kỳ IP nào, máy chủ của tôi vẫn có thể truy cập internet. cảm ơn.
Xianlin

3

Để xem địa chỉ IP của VM / s của bạn, hãy chạy:

$ arp -n

Nếu arp không được cài đặt trên hệ thống của bạn, chỉ cần cài đặt net-toolsgói.


2

Có thể kết nối thông qua VNC dựng sẵn virt-managervà bạn không đăng nhập, tìm địa chỉ IP với ifconfig eth0. Thông thường eth0, trừ khi bạn đã chỉ định khác.


2

sudo nmap -sn 192.168.5.0/24 | awk '/Nmap scan report/{printf $5;printf " ";getline;getline;print $3;}' | fgrep -if <(virsh list --name | grep . | while read n; do virsh domiflist $n; done | grep --only-matching ..:..:..:..:..:..)

Quét mạng con. Phân tích đầu ra với awk để có được các dòng như <IP> <MAC>. Sau đó grep trong chúng bằng cách sử dụng danh sách MAC của VM.

Danh sách các MAC thu được bằng cách liệt kê tất cả các VM (cũng loại bỏ các dòng trống), sau đó thực hiện virsh domiflistcho từng loại, và sau đó greping cho một mẫu trông giống như MAC.

Nguồn:

https://serverfault.com/a/669862/284568


0

Nếu bạn có QEMU (trình giả lập VM), hãy chuyển đến nút "i" và kiểm tra card mạng được liên kết với mạng "Br0". Ghi lại địa chỉ mac của NIC. Bây giờ Đăng nhập vào VM của bạn -> Mở Terminal -> gõ: lệnh "ifconfig" trong thiết bị đầu cuối -> ghi chú địa chỉ IP được liên kết với địa chỉ Mac mà bạn đã lưu ý trước đó.

Bạn có thể đăng nhập vào VM của mình bằng Putty hoặc bất kỳ ứng dụng khách ssh nào bằng IP bạn đã lưu ý ở bước cuối cùng.


0

Tôi có khách KVM của mình trên giao diện br0 vì vậy tôi nghĩ nó hơi khác một chút, nhưng đây là hai kịch bản tôi đã thực hiện.

Lưu ý để sử dụng ARP trước tiên bạn cần có MAC trong Bảng Arp của mình. Do đó, tốt nhất là sử dụng fping để thực hiện ping nhanh toàn bộ mạng (mất 2 giây). Điều này đảm bảo bộ đệm Arp của bạn được cập nhật.

apt-get install fping
yum install fping

Tìm một IP khách thông qua:

cat << 'EOF' > ~/findip.sh
#!/bin/bash
#FreeSoftwareServers.com

echo "Finding All Active IP's in Network via single Ping"
sleep 2s

fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24

echo "Please Enter the Exact Name of the VM Guest:"

read guestname

arp -na | awk -v mac=$(virsh domiflist $guestname | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}'
EOF
chmod +x ~/findip.sh
sudo sh -c 'echo "alias findguestip=~/findip.sh" >> ~/.bashrc'
source ~/.bashrc
findguestip

Tìm tất cả IP của khách thông qua:

cat << 'EOF' > ~/findallips.sh
#!/bin/bash
#FreeSoftwareServers.com

echo "Finding All Active IP's in Network via single Ping"
sleep 2s

fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24

domainlog=/tmp/domain.log

virsh list --all | grep running |  cut -c 8- >> "$domainlog"

sed -i 's/running*//g' "$domainlog"

readarray domain < "$domainlog"

for i in "${domain[@]}"
do
ip="$(arp -na | awk -v mac=$(virsh domiflist $i | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}')"
echo "Hostname : $i IP : $ip"
done
rm "$domainlog"
EOF
chmod +x ~/findallips.sh
sudo sh -c 'echo "alias findallips=~/findallips.sh" >> ~/.bashrc'
source ~/.bashrc
findallips

Tôi đã giải quyết vấn đề này cuối cùng với arp-scan. ví dụ: sudo arp-scan --interface = br0 --localnet --bandband = 8192000 --numeric --retry = 1 đó là khi tôi muốn chủ động tìm kiếm. Tôi đã sử dụng addrwatch để ngồi trong nền và tích lũy ánh xạ địa chỉ mac / ip cho tôi.
Công tước Dougal


0
  1. Nhận danh sách tên miền của bạn bằng cách virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. Nhận danh sách giao diện tên miền của bạn theo tên miền hoặc tên miền bằng cách sử dụng virsh domiflist yourDomainIdvà bạn sẽ thấy ĐỊA CHỈ MAC của giao diện tên miền.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. Sử dụng nmapquét mạng LAN của bạn bằng cách nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2, bạn sẽ nhận được ĐỊA CHỈ IP.

    [root@kvm-master ~]# nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B2 
    
    Nmap scan report for bogon (192.168.1.210)
    Host is up (0.00013s latency).
    MAC Address: 52:54:00:42:BE:96 (QEMU Virtual NIC)
    

0

Một giải pháp tốt đẹp sử dụng đại lý qemu-khách.

a) Định cấu hình vm của bạn để sử dụng qemu-guest agent Trên máy chủ: Thêm với virt-manager một kênh "qemu-guest-agent" Thực sự dễ dàng. Trong trường hợp máy của tôi có tên là "Debian" và xml sau khi sửa đổi sẽ tương tự như điều này.

 <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-3-debian/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
      <alias name='channel1'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>

b) Khi khách cài đặt qemu-khách-đại lý và đảm bảo được bắt đầu

apt -y install qemu-guest-agent

systemctl status qemu-guest-agent.service
● qemu-guest-agent.service - LSB: QEMU Guest Agent startup script
   Loaded: loaded (/etc/init.d/qemu-guest-agent; generated; vendor preset: enabled)
   Active: active (running) since Sat 2019-01-26 09:35:57 CET; 3s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1624 ExecStop=/etc/init.d/qemu-guest-agent stop (code=exited, status=0/SUCCESS)
  Process: 1630 ExecStart=/etc/init.d/qemu-guest-agent start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/qemu-guest-agent.service
           └─1638 /usr/sbin/qemu-ga --daemonize -m virtio-serial -p /dev/virtio-ports/org.qemu.guest_agent.0

c) Cuối cùng, đường ống đẹp này sẽ trả về ip, thay vì NAMEOFVMNIC đặt eth0, enp1s0, v.v.

virsh domifaddr  --domain yourvmname --source agent|grep -w NAMEOFVMNIC|egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'

-1

(Trong khi bạn có vẻ quá cao cấp cho một câu trả lời đơn giản như vậy)

Sẽ

$ ifconfig

công việc?


Ngoài ra, hãy cẩn thận, nếu bạn có các phiên bản trùng lặp của cùng một máy, vì máy sẽ gặp sự cố với địa chỉ MAC giả, v.v ... có nhiều cách để chỉnh sửa thủ công (và tôi nghĩ cũng chạy lệnh đó)
David

Tôi chỉ có một VM "vm1" trên máy chủ máy chủ Ubuntu của mình và đầu ra lệnh "ifconfig" hiển thị không có địa chỉ IP nào được gán cho bộ điều hợp mạng "eth0" của tôi.
Xianlin

vâng, bạn không có ip ... Bạn đã thử "dhclient eth0" - tôi cần sudo
David

Tôi đã thử nhưng vẫn không nhận được ip dhcp từ máy chủ lưu trữ đến máy ảo khách của tôi. Máy chủ lưu trữ của tôi được gán một IP cố định và nó có thể truy cập internet.
Xianlin

nếu bạn muốn một ip không có trên mạng mẹ, bạn muốn chọn NAT trong cài đặt vm của bạn thay vì bắc cầu.
David
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.