KVM을 실행하는 VM의 IP 찾기

KVM을 실행하는 VM의 IP 찾기

Nmap을 사용하여 KVM에서 VM의 IP를 어떻게 찾을 수 있나요? 그렇지 않은 경우 Libvirt에 이를 수행하는 기능이 있습니까?

답변1

Centos 63 x86_64의 KVM에 대한 빠르고 더러운 예입니다. VM이 이 세그먼트에 있을 수 있는 모든 가능한 IP 주소에 대해 백그라운드에서 짧은 핑

for i in {1..249}
 do
  ping -c 1 -n -q -r  -t 1 -s 1  -W 1   192.168.100.$i > /dev/null &
done

virsh를 통해 VM의 이름과 MAC 주소를 추출하고 ARP 테이블에서 IP를 추출합니다.

for name in `virsh list | grep running | awk '{ print $2 }'`
do
  printf  "\n$name\n "
  arp -e | grep "`virsh dumpxml  $name | grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`" | 
  awk '{ printf  $1 ;  printf  " "  ; printf  $3 }'
done

답변2

오랜 시간 손을 더럽힌 끝에 우연히 발견한이것에픽 링크.

  1. VM의 구성 파일에서 VM의 MAC 주소를 가져옵니다(KVM을 사용하고 있으므로 .xml 파일에서 MAC 주소를 쿼리했습니다).
  2. 그런 다음 arp -a를 사용하여 모든 MAC 주소와 인터페이스의 주소를 가져와 파일에 저장합니다.
  3. 1단계에서 VM의 MAC 주소에 대한 파일을 쿼리합니다.

답변3

나는 이 작업을 수행하고 이름이 "swarm"인 시스템을 필터링하기 위해 bash 스크립트를 작성했습니다. 필요에 따라 필터를 제거하거나 변경할 수 있습니다. (제거 | grep "swarm") 이것을 전체 스크립트로 사용하거나 여기에서 하나의 라이너를 복사하여 붙여넣을 수 있습니다.

#!/usr/bin/env bash
# we make assumption that the VM's we want have the word swarm in their name.  Edit for different name or to get all unfiltered names
for i in $(virsh list | grep "swarm" | awk '{print $2;}' ); do virsh domifaddr $i | sed 3q | sed '$!d' |awk '{print $4}'  ; done;

구성 부분은 virsh 명령으로, virsh list모든 VM 목록을 가져온 다음 for 루프에서 domifaddr <VM NAME>IP 주소를 가져옵니다. 나머지는 한 줄에 하나씩 IP 주소로만 텍스트를 필터링하는 것입니다. Ubuntu KVM 서버 15.10에서 이것을 작성/실행했습니다.

답변4

virt-cat 명령을 사용하면 VM의 모든 파일을 쿼리할 수 있습니다. 예를 들어 dhcp 임대 파일은 다음과 같습니다.

virt-cat -d your_domain /var/lib/dhcp/dhclient.eth0.leases

관련 정보