KVM 가상 머신의 IP 주소를 찾는 방법은 무엇입니까?


30

이 안내서 ( KVM On Ubuntu 11.10으로 가상화)를 따라 Ubuntu 11.10 서버에서 KVM (가상 머신 소프트웨어)을 설정했습니다. 그러나 VM을 만들 때 VM을 사용하는 대신 VM의 IP 주소를 설정하지 않았습니다.

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

사용 : (명령 줄에서 "--ip = 192.168.0.101 --gw = 192.168.0.1"삭제)

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

가이드가 지시 한대로 네트워크 브리지를 설정했으며 새 VM의 인터페이스가 네트워크 브리지에 연결되었습니다.

KVM에서 DHCP를 통해 VM을 할당한다고 가정하지만 새 VM의 IP 주소에 대한 정보가 없습니다. VM의 IP 주소와 SSH를 새 VM에 어디에서 찾을 수 있습니까? 감사.

[참고 : VM의 IP 주소를 몰라도 VM에 로그인했습니다. " X 그래픽 전달과 함께 Xming + SSH 사용" 하지만 내 VM에 할당 된 DHCP IP 주소가 없습니다. 위 질문 외에 다른 질문이 있습니다. VM에서 DCHP를 활성화하여 Xming을 사용하여 로그인 할 때 " virt viewer "나는 적어도 내 IP 주소가있는 것을 볼 수있다.]


문제를 파악하고 해결했습니다. / etc / network / interfaces에서 "network"및 "broadcast"정보를 삭제하고 DHCP가 게스트 VM에서 작동했습니다. 이제 게스트 VM으로 ssh 할 수 있습니다. "네트워크 XXX.XXX.XXX.XXX"또는 "브로드 캐스트 XXX.XXX.XXX.XXX"가 잘못되었습니다. 이 안내서는 여전히 이런 종류의 설정에 적합합니다. 네트워크 환경을 설정할 때주의하십시오. 문제가 해결되었습니다 !!!
Xianlin

1
libvirt는 domifaddr과 net-dhcp-leases라는 두 가지 명령을 가지고 있습니다
Nehal J Wani

링크 를 참조하십시오 . 답을 찾으십시오.

답변:


20

arp -n가상 머신이 어느 IP를 선택하는지 확인하기 위해 실행할 수 있습니다 . 그런 식으로 guest vm에 로그인 할 필요가 없습니다 ifconfig.

아래 블로그에는 자세한 내용이 있으며 가상 머신의 주소 찾기를 자동화하는 perl 스크립트가 포함되어 있습니다.

팁 : 가상 머신의 IP 주소 찾기


너무 간단합니다.
Indika K

1
링크가 다운되면 xyz 웹 페이지로 이동하여 답변이 좋지 않습니다. "전체 답변"을 게시하십시오
FreeSoftwareServers

31

이 시도:

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

MAC 주소를 알고있는 경우 다음 양식을 사용할 수도 있습니다.

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

MAC 주소는 dumpxml 명령에서 찾을 수 있습니다. kvm 호스트의 가상 머신에 속하는 가상 인터페이스를 판별하는 방법이 있습니까?를 참조하십시오 .


5
이것이 정답입니다. 해킹없이 작동합니다. 고마워
chmac

1
"virsh net-list"여야합니다. "net"과 "list"사이에 공백이 없습니다. 그렇지 않으면 완벽하게 작동합니다.
Dave Hein

@DaveHein 수정 해 주셔서 감사합니다. 답변을 업데이트했습니다.
Rahul

빈 결과가 sudo
나오면

6

나는 이것이 오래된 질문이라고 생각하지만, 현재 버전의 버전은 virshNAT 또는 브리지 개인 네트워크를 사용하는 경우이를 훨씬 쉽게 만듭니다. steak(라우팅 된) 개인 네트워크 (AKA "NAT")에 이름이 지정된 가상 머신이 있습니다. 내장 메커니즘에 의해 할당 된 IP를 찾는 것은 단지 두 가지 명령입니다.

$ 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

또한 eggs일반 네트워크에 연결되는 다른 VM ( )이 있습니다 (하이퍼 바이저 호스트의 브리지 장치에 연결됨). Libvirt는 주소를 할당하지 않습니다. 내 네트워크의 DHCP 서버에서 주소를 얻습니다.이 경우 동적 DNS도 업데이트됩니다. domifadd이 VM에 대한 출력 이 없을 때 가능성 이 있습니다. 의미 - ARP 테이블에서 그것을 찾는 가장 쉬운 - 그것은 다른 기계처럼 그래서, 당신은 기본적으로 주소를 찾을 수있다 ip neighbour, 이제 arp사용되지되지 않고 일부 배포판에 더 이상 존재하지. 운 좋게도 vouwel을 사용하여 철자를 쓰지 않는 사람들에게는 운 좋게도 (또는 ) ip neigh와 같은 더 짧은 버전을 사용할 수도 있습니다 . ;) 아래 에서 MAC 주소를 찾는 데 사용 합니다 (연결되어 있음에 유의하십시오)ip nip neighbordomiflistbr0 "소스"열에서)를 찾은 다음 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

vms 목록 :

virsh list

이름에서 vm MAC 가져 오기

virsh domiflist debian8

grep을 사용하여 vm 서브넷을 스캔합니다 (MAC는 대문자 여야 함)

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

결과

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

VM에 대한 콘솔 액세스 권한이 있으면 ifconfig -a게스트에서 실행 하십시오. 머무는 동안 게스트가 네트워크에 연결되어 있고 sshd실행 중인지 확인하십시오.

콘솔 액세스 권한이 없으면 DHCP에서 IP 주소를 할당했을 가능성이 있습니다. DHCP 할당을 받고있는 다른 컴퓨터 (예 : 호스트 서버)를 찾은 다음 주소에 1을 추가하고 시도하십시오. 실제로 다음 5 개 또는 6 개의 주소를 사용해보십시오. 그래도 작동하지 않으면 활성 네트워크가 커서 서브넷의 모든 IP 주소를 시도해야하거나 호스트에 대한 경로가 없거나 동일한 MAC 주소를 가진 두 개의 호스트와 같은 낮은 수준의 네트워크 문제가있는 것입니다. 아니면 당신은 그냥 달리지 않았다 sshd.

이 문제를 해결하는 가장 쉬운 방법은 콘솔을 사용하는 것입니다.


실제로 Xming Server + "virt-viewr"명령을 통해 VM에 연결할 수있었습니다. VM에있는 동안 게스트에 할당 된 IP가 없습니다. DHCP를 작동시키는 방법? 변경해야하는 XML 파일은 무엇입니까?
Xianlin

안녕 마이클, 내 서버에 액세스 할 수있게 해주면 도와 줄 수 있다고 생각하니? DHCP 및 고정 IP를 시도했지만 게스트 VM에 IP가 제공되지 않고 호스트 서버가 여전히 인터넷에 액세스 할 수 있습니다. 감사.
Xianlin

3

VM의 IP 주소를 보려면 다음을 실행하십시오.

$ arp -n

시스템에 arp가 설치되어 있지 않으면 net-tools패키지를 설치하십시오 .


2

로 내장 VNC를 통해 연결할 virt-manager수 있으며 tty 로그인을 수행하고을 사용하여 IP 주소를 찾으십시오 ifconfig eth0. 달리 지정하지 않는 한 일반적으로 eth0.


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

스캔 서브넷. awk로 출력을 구문 분석하여 다음과 같은 줄을 얻습니다 <IP> <MAC>. 그런 다음 VM의 MAC 목록을 사용하여 grep하십시오.

MAC 목록은 모든 VM을 나열하고 (빈 줄도 제거) virsh domiflist각 VM 에 대해 수행 한 다음 MAC처럼 보이는 패턴을 그 리핑하여 얻습니다.

출처 :

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


0

QEMU (VM 에뮬레이터)가있는 경우 "i"버튼으로 이동하여 "Br0"네트워크와 연결된 네트워크 카드를 확인하십시오. NIC의 mac 주소를 기록해 두십시오. 이제 VM에 ​​로그인하십시오-> 터미널 열기-> 터미널에서 "ifconfig"명령을 입력하십시오.-> 앞에서 언급 한 Mac 주소와 관련된 IP 주소를 기록하십시오.

마지막 단계에서 적어 둔 IP를 사용하여 Putty 또는 ssh 클라이언트를 사용하여 VM에 로그인 할 수 있습니다.


0

br0 인터페이스에 KVM 게스트가 있으므로 약간 다르게 생각하지만 여기에 내가 작성한 두 개의 스크립트가 있습니다.

ARP를 사용하려면 먼저 Arp 테이블에 MAC이 있어야합니다. 따라서 fping을 사용하여 전체 네트워크를 빠르게 핑 (2 초 정도 소요)하는 것이 가장 좋습니다. Arp 캐시가 최신 상태인지 확인합니다.

apt-get install fping
yum install fping

다음을 통해 단일 게스트 IP를 찾으십시오.

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

다음을 통해 모든 게스트 IP 찾기 :

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

arp-scan으로 결국이 문제를 해결했습니다. 예 : sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 --numeric --retry = 1 내가 적극적으로 검색하고 싶을 때였습니다. addrwatch를 사용하여 백그라운드에 앉아 mac / ip 주소 매핑을 축적했습니다.
Duke Dougal


0
  1. 다음으로 도메인 목록을 가져옵니다. virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. 을 사용하여 도메인 ID 또는 이름으로 도메인 인터페이스 목록 virsh domiflist yourDomainId을 가져 오면 도메인 인터페이스의 MAC 주소가 표시됩니다.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. nmapLAN 스캔을 사용 nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2하면 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

qemu-guest 에이전트를 사용하는 훌륭한 솔루션입니다.

a) qemu-guest 에이전트를 사용하도록 vm 구성 호스트에서 : virt-manager를 사용하여 "qemu-guest-agent"채널을 추가하면 정말 쉽습니다. 필자의 경우 컴퓨터는 "Debian"이라고하며 수정 후 xml은 다음과 비슷합니다. 이.

 <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) 게스트 설치 qemu-guest-agent에서 시작되었는지 확인하십시오.

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) 마지막으로이 멋진 파이프는 NAMEOFVMNIC 대신 eth0, enp1s0 등을 대신하여 ip를 반환합니다.

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

-1

(단순히 대답하기에는 너무 진보 된 것처럼 보이지만)

의지

$ ifconfig

작업?


또한 동일한 컴퓨터의 중복 인스턴스가있는 경우 가짜 MAC 주소 등에 문제가 있으므로 수동으로 편집 할 수있는 방법이 있습니다 (그리고 명령도 실행한다고 생각합니다)
David

내 우분투 서버 호스트에 하나의 VM "vm1"만 있고 "ifconfig"명령 출력에 "eth0"네트워크 어댑터에 할당 된 IP 주소가 표시되지 않습니다.
Xianlin

그래, 당신은 IP가 없습니다 ... 당신은 "dhclient eth0"를 시도 했습니까-sudo가 필요할 수 있습니다
David

시도했지만 여전히 호스트 서버에서 게스트 VM으로 dhcp ip를 얻지 못했습니다. 호스트 서버에 고정 IP가 할당되어 인터넷에 액세스 할 수 있습니다.
Xianlin

상위 네트워크에 있지 않은 IP를 원하는 경우 브리지 대신 VM 설정에서 NAT를 선택하려고합니다.
David
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.