Jak znaleźć adres IP maszyny wirtualnej KVM, na której mogę SSH?

30

Postępuję zgodnie z tym przewodnikiem ( Wirtualizacja z KVM na Ubuntu 11.10 ), aby skonfigurować KVM (oprogramowanie maszyn wirtualnych) na moim serwerze Ubuntu 11.10. Jednak nie utworzyłem adresu IP mojej maszyny wirtualnej podczas tworzenia maszyny wirtualnej, zamiast używać:

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

Użyłem: (usunąłem „--ip = 192.168.0.101 - gw = 192.168.0.1” z wiersza poleceń)

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

Skonfigurowałem mostek sieciowy zgodnie z instrukcją, a interfejs nowej maszyny wirtualnej jest podłączony do mostka sieciowego.

Zakładam, że KVM przypisze moją maszynę wirtualną przez DHCP, ale nie mam informacji na temat adresu IP mojej nowej maszyny wirtualnej, gdzie mogę znaleźć adres IP maszyny wirtualnej i SSH na nowej maszynie wirtualnej? Dzięki.

[Uwagi: Udało mi się zalogować do maszyny wirtualnej, nie znając adresu IP maszyny wirtualnej. Używanie „ Xming + SSH z X graficznym przekazywaniem ” Ale do mojej maszyny wirtualnej nie jest przypisany adres IP DHCP. Oprócz powyższego pytania, mam inne pytanie: jak włączyć DCHP na mojej maszynie wirtualnej, więc kiedy używam Xming do logowania przez „ virt viewer „Mogę przynajmniej zobaczyć mój adres IP.]

Xianlin
źródło
Zorientowałem się i rozwiązałem problem. W / etc / network / interfaces usunąłem informacje o „sieci” i „emisji”, a DHCP działał na moich maszynach wirtualnych. Teraz mogę ssh na mojej maszynie wirtualnej gościa. Chyba moja „sieć XXX.XXX.XXX.XXX” lub „transmisja XXX.XXX.XXX.XXX” jest nieprawidłowa. przewodnik nadal działa dobrze w przypadku tego rodzaju konfiguracji, należy jednak zachować ostrożność podczas konfigurowania własnego środowiska sieciowego. Problem jest rozwiązany!!!
Xianlin,
1
libvirt ma teraz dwa polecenia: domifaddr i net-dhcp-leasing
Nehal J Wani
zapoznaj się z tym linkiem, znajdziesz odpowiedź:

Odpowiedzi:

20

Możesz uruchomić, arp -naby zobaczyć, jaki adres IP odbiera twoja maszyna wirtualna. W ten sposób nie musisz logować się do gościa vm i pisać ifconfig.

Poniższy blog zawiera więcej szczegółów i zawiera skrypt perla, który automatyzuje wyszukiwanie adresu maszyny wirtualnej.

Wskazówka: Znajdź adres IP maszyny wirtualnej

chenwj
źródło
Tak prosty. Świetnie ....
Indika K,
1
Przejdź do strony dla xyz odpowiedzi są dobre, jeśli nie idzie w dół łącza, proszę pisać „pełnych odpowiedzi”
FreeSoftwareServers
31

Spróbuj tego:

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

Możesz również skorzystać z poniższego formularza, jeśli znasz adres MAC:

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

Adres MAC można znaleźć w poleceniu dumpxml. Zobacz Czy istnieje sposób ustalenia, który interfejs wirtualny należy do maszyny wirtualnej na hoście KVM?

Rahul
źródło
5
To jest poprawna odpowiedź. Działa bez żadnego włamania. Wielkie dzięki.
chmac
1
Powinien być „virsh net-list” ... bez spacji między „net” a „list”. W przeciwnym razie działa to idealnie.
Dave Hein
@DaveHein Dzięki za poprawienie. Zaktualizowałem odpowiedź.
Rahul
Jeśli otrzymujesz puste wyniki, spróbuj uruchomić virsh zsudo
Freedom_Ben
6

Myślę, że to stare pytanie, ale obecne wersje virshznacznie to ułatwiają, jeśli używasz nat lub mostowej sieci prywatnej. Mam maszynę wirtualną o nazwie steakw (routowanej) sieci prywatnej (AKA „NAT”). To tylko dwa polecenia, aby dowiedzieć się, jaki adres IP został przypisany przez wbudowany mechanizm:

$ 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

Mam także inną maszynę wirtualną ( eggs), która jest połączona z normalną siecią (podłączoną do urządzenia mostu na hoście hypervisora). Libvirt nie przypisuje mu adresu; pobiera adres z serwera DHCP mojej sieci, który również aktualizuje dynamiczny DNS w moim przypadku. Jest to jedna prawdopodobna możliwość, gdy nie ma danych wyjściowych domifadddla tej maszyny wirtualnej. Tak więc w zasadzie musisz znaleźć adres jak na każdej innej maszynie - znalezienie go w tablicy arp jest prawdopodobnie najłatwiejsze - co oznacza ip neighbourteraz, ponieważ arpjest przestarzałe i nie występuje już w niektórych dystrybucjach. Na szczęście dla tych z nas, którzy nie literują rzeczy za pomocą dodatkowych vouwels, możesz także używać krótszych wersji, takich jak ip neighi ip n(lub ip neighbor). ;) Poniżej używam domiflistdo znalezienia adresu MAC (zwróć uwagę, że jest on podłączonybr0 w kolumnie „source”), a następnie znajdź to w tabeli 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
dannysauer
źródło
5

lista vms:

virsh list

pobierz vm MAC z nazwy

virsh domiflist debian8

wykonaj skanowanie swojej podsieci vm za pomocą grep (MAC musi być pisany wielkimi literami)

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

wynik

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)
Antonín Vrba
źródło
4

Jeśli masz dostęp konsoli do maszyny Wirtualnej, po prostu uruchom go ifconfig -ana gościu. Gdy tam jesteś, sprawdź, czy gość ma połączenie sieciowe i czy sshddziała.

Jeśli nie masz dostępu do konsoli, prawdopodobnie adres IP został przypisany przez DHCP. Poszukaj innej maszyny, która również otrzymuje przypisanie DHCP, być może hosta, a następnie dodaj 1 do adresu i spróbuj. W rzeczywistości wypróbuj kolejne 5 lub 6 adresów. Jeśli to nie zadziała, oznacza to, że masz dużą aktywną sieć i będziesz musiał wypróbować każdy adres IP w podsieci, lub występuje problem z siecią na niższym poziomie, taki jak brak trasy do hosta lub dwa hosty z tym samym adresem MAC. A może po prostu nie sshduciekłeś.

Korzystanie z konsoli jest najprostszym sposobem rozwiązania tego problemu.

Michael Dillon
źródło
Udało mi się połączyć z moją maszyną wirtualną za pomocą polecenia Xming Server + „virt-viewr”. Odkryłem, że nie ma przypisanego adresu IP do gościa, gdy jestem na maszynie wirtualnej. Jak sprawić, by DHCP działał? Jakiś plik XML, który muszę zmienić?
Xianlin,
Cześć Michael, czy myślisz, że możesz mi pomóc, jeśli dam ci dostęp do mojego serwera? Próbowałem DHCP i statycznego adresu IP, ale maszyny wirtualne gościa nie uzyskują żadnego adresu IP, ale mój serwer hosta nadal może uzyskać dostęp do Internetu. dzięki.
Xianlin,
3

Aby zobaczyć adres IP maszyny wirtualnej, po prostu uruchom:

$ arp -n

Jeśli arp nie jest zainstalowany w twoim systemie, po prostu zainstaluj net-toolspakiet.

Alkss
źródło
2

Możliwe jest połączenie za pomocą wbudowanego VNC virt-manager, a ty logujesz się tty, znajdź adres IP za pomocą ifconfig eth0. Zwykle eth0, chyba że określono inaczej.

stokrotka
źródło
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 ..:..:..:..:..:..)

Skanuj podsieć. Analizuj dane wyjściowe za pomocą awk, aby uzyskać linie takie jak <IP> <MAC>. Następnie grep w nich za pomocą listy adresów MAC maszyn wirtualnych.

Listę adresów MAC uzyskuje się, wyświetlając listę wszystkich maszyn wirtualnych (również usuwając puste linie), a następnie wykonując czynności virsh domiflistdla każdej z nich, a następnie wyszukując wzór, który wygląda jak MAC.

Źródła:

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

Velkan
źródło
0

Jeśli masz QEMU (emulator VM), przejdź do przycisku „i” i sprawdź kartę sieciową powiązaną z siecią „Br0”. Zanotuj adres MAC karty sieciowej. Teraz zaloguj się do maszyny wirtualnej -> Otwórz terminal -> wpisz: polecenie „ifconfig” w terminalu -> zanotuj adres IP powiązany z adresem Mac, który zanotowałeś wcześniej.

Możesz zalogować się na maszynie wirtualnej za pomocą Putty lub dowolnego klienta ssh przy użyciu adresu IP zanotowanego w ostatnim kroku.

saurav
źródło
0

Mam gości KVM na interfejsie br0, więc myślę, że jest trochę inny, ale oto moje dwa skrypty, które stworzyłem.

Uwaga: aby użyć ARP, musisz najpierw mieć MAC w swojej Tabeli Arp. Dlatego najlepiej użyć fping, aby wykonać szybki ping całej sieci (zajmuje to około 2 sekund). Dzięki temu pamięć podręczna Arp jest aktualna.

apt-get install fping
yum install fping

Znajdź adres IP jednego gościa za pomocą:

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

Znajdź wszystkie adresy IP gości za pośrednictwem:

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
FreeSoftwareServers
źródło
Ostatecznie rozwiązałem ten problem za pomocą arp-scan. przykład: sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 - numeryczny --retry = 1, który był, kiedy chciałem aktywnie wyszukiwać. Użyłem addrwatch, aby usiąść w tle i zgromadzić dla mnie mapowanie adresu mac / ip.
Duke Dougal
0
  1. Pobierz listę domen przez virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. Pobierz listę interfejsów domeny według identyfikatora lub nazwy domeny virsh domiflist yourDomainId, a zobaczysz ADRES MAC interfejsu domeny.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. Za pomocą nmapprzeskanowania sieci LAN nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2otrzymasz adres 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)
    
Rod Terry
źródło
0

Ładne rozwiązanie wykorzystujące agenta qemu-guest.

a) Skonfiguruj vm do korzystania z agenta qemu-guest Na hoście: Dodaj za pomocą virt-manager kanał „qemu-guest-agent” jest naprawdę łatwy. W moim przypadku maszyna nazywa się „Debian”, a xml po modyfikacji będzie podobny do to.

 <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) Na gościu zainstaluj qemu-guest-agent i upewnij się, że jest uruchomiony

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) W końcu ta fajna rura zwróci ip, zamiast NAMEOFVMNIC wstawić eth0, enp1s0 itd.

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

(Chociaż wydajesz się zbyt zaawansowany, aby uzyskać tak prostą odpowiedź)

Wola

$ ifconfig

praca?

David
źródło
bądź też ostrożny, jeśli masz zduplikowane instancje tego samego komputera, ponieważ komputer będzie miał problemy z fałszywym adresem MAC itp. ... istnieją sposoby ręcznej edycji tego (i myślę, że uruchom także polecenie dla tego)
David
Mam tylko jedną maszynę wirtualną „vm1” na hoście serwera Ubuntu, a wyjście polecenia „ifconfig” nie pokazuje adresu IP przypisanego do mojej karty sieciowej „eth0”.
Xianlin,
tak, nie masz ip ... Czy próbowałeś „dhclient eth0” - może potrzebujesz sudo
David
Próbowałem, ale nadal nie otrzymuję IP protokołu DHCP z mojego hosta na moich maszynach wirtualnych. Mój serwer hosta ma przypisany stały adres IP i może uzyskać dostęp do Internetu.
Xianlin,
jeśli chcesz, aby ip nie był w sieci nadrzędnej, chcesz wybrać NAT w ustawieniach VM zamiast mostka.
David