¿Cómo encontrar la dirección IP de una máquina virtual KVM para que pueda ingresar SSH?


30

He seguido esta guía ( Virtualización con KVM en Ubuntu 11.10 ) para configurar mi KVM (Software de máquinas virtuales) en mi servidor Ubuntu 11.10. Sin embargo, no configuré la dirección IP de mi VM al crear la VM, en lugar de usar:

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

Usé: (eliminé "--ip = 192.168.0.101 --gw = 192.168.0.1" de la línea de comando)

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

He configurado el puente de red como lo indicó la guía y la interfaz de la nueva VM está conectada al puente de red.

Supongo que el KVM asignará mi VM a través de DHCP, pero no tengo información sobre la dirección IP de mi nueva VM, ¿dónde puedo encontrar la dirección IP y SSH de la VM a la nueva VM? Gracias.

[Notas: He logrado iniciar sesión en la VM sin conocer la dirección IP de la VM. Uso de " Xming + SSH con reenvío gráfico X " Pero no hay una dirección IP de DHCP asignada a mi VM. Además de la pregunta anterior, tengo otra pregunta aquí: cómo habilitar el DCHP en mi VM, así que cuando uso Xming para iniciar sesión a través de " virt viewer "Al menos puedo ver que mi dirección IP está ahí.]


He resuelto el problema y lo resolví. En / etc / network / interfaces eliminé la información de "red" y "broadcast" y el DHCP funcionó en mis máquinas virtuales invitadas. Ahora puedo ingresar en mi máquina virtual invitada. Supongo que mi "red XXX.XXX.XXX.XXX" o "transmitir XXX.XXX.XXX.XXX" está mal. la guía sigue funcionando bien para este tipo de configuración, solo tenga cuidado al configurar su propio entorno de red. ¡¡¡El problema esta resuelto!!!
Xianlin

1
libvirt tiene dos comandos ahora: domifaddr y net-dhcp-
leases

consulte este enlace, encontrará una respuesta:

Respuestas:


20

Puede ejecutar arp -npara ver qué IP recoge su máquina virtual. De esa manera, no tiene que iniciar sesión como invitado vm y escribir ifconfig.

El siguiente blog tiene más detalles e incluye un script perl que automatiza la búsqueda de la dirección de una máquina virtual.

Consejo: encuentre la dirección IP de una máquina virtual


Tan sencillo. Genial ....
Indika K

1
Visite la página web de xyz para obtener respuestas que no son buenas si el enlace se cae, publique "respuestas completas"
FreeSoftwareServers

31

Prueba esto:

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

También puede usar el siguiente formulario si conoce la dirección MAC:

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

La dirección MAC se puede encontrar en el comando dumpxml. Consulte ¿Hay alguna forma de determinar qué interfaz virtual pertenece a una máquina virtual en un host kvm?


55
Esta es la respuesta correcta. Funciona sin ningún tipo de piratería. Muchas gracias.
chmac

1
Debe ser "virsh net-list" ... no hay espacio entre "net" y "list". De lo contrario, esto funciona perfectamente.
Dave Hein

@DaveHein Gracias por corregir. Se actualizó la respuesta.
Rahul

Si obtiene resultados vacíos, intente ejecutar virsh consudo
Freedom_Ben

6

Supongo que esta es una vieja pregunta, pero las versiones actuales de virshhacen que esto sea mucho más fácil si estás usando una red privada nat o puenteada. Tengo una máquina virtual nombrada steaken una red privada (enrutada) (AKA "NAT"). Son solo dos comandos para encontrar qué IP fue asignada por el mecanismo incorporado:

$ 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

También tengo otra VM ( eggs) que se conecta a la red normal (conectada a un dispositivo puente en el host del hipervisor). Libvirt no le asigna una dirección; obtiene una dirección del servidor DHCP de mi red, que también actualiza DNS dinámico en mi caso. Esa es una posibilidad probable cuando no hay salida domifaddpara esta VM. Por lo tanto, básicamente tiene que encontrar la dirección como si fuera cualquier otra máquina; encontrarla en la tabla arp es probablemente la más fácil, lo que significa ip neighbourahora, ya que arpestá en desuso y ya no está presente en algunas distribuciones. Afortunadamente para aquellos de nosotros que no deletreamos cosas con vales extra, también pueden usar versiones más cortas, como ip neighy ip n(o ip neighbor). ;) A continuación, uso domiflistpara encontrar la dirección MAC (tenga en cuenta que está conectada abr0 en la columna "fuente") y luego encuentre eso en la tabla 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

lista para vms:

virsh list

obtener vm MAC del nombre

virsh domiflist debian8

escanee su subred vm con grep (MAC debe estar en mayúscula)

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

resultado

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

Si tiene acceso de consola a la VM, simplemente ejecute ifconfig -aen el invitado. Mientras esté allí, verifique que el huésped tenga conectividad de red y que se sshdesté ejecutando.

Si no tiene acceso a la consola, es probable que DHCP haya asignado la dirección IP. Busque otra máquina que también esté recibiendo una asignación de DHCP, tal vez el servidor host, y luego agregue 1 a la dirección y pruébelo. De hecho, pruebe las siguientes 5 o 6 direcciones. Si eso no funciona, entonces tiene una red activa grande y tendrá que probar todas las direcciones IP en la subred, o hay un problema de red de nivel inferior, como ninguna ruta al host o dos hosts con la misma dirección MAC. O tal vez simplemente no te pusiste a sshdcorrer.

Usar la consola es la forma más fácil de resolver este problema.


Realmente logré conectarme a mi VM a través del comando Xming Server + "virt-viewr". Descubrí que no hay una IP asignada al invitado mientras estoy en la VM. ¿Cómo hacer que funcione DHCP? ¿Algún archivo XML que deba cambiar?
Xianlin

Hola Michael, ¿crees que puedes ayudarme si te doy acceso a mi servidor? Probé DHCP e IP estática, pero las máquinas virtuales invitadas no obtienen ninguna IP, aunque mi servidor host todavía puede acceder a Internet. Gracias.
Xianlin

3

Para ver la dirección IP de su VM / s simplemente ejecute:

$ arp -n

Si arp no está instalado en su sistema, simplemente instale el net-toolspaquete.


2

Es posible conectarse a través de VNC incorporado virt-managery, al iniciar sesión, encuentre la dirección IP con ifconfig eth0. Normalmente eth0, a menos que haya especificado lo contrario.


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

Escanear subred. Analice la salida con awk para obtener líneas como <IP> <MAC>. Luego grep en ellos usando una lista de los MAC de las VM.

La lista de los MAC se obtiene enumerando todas las máquinas virtuales (también eliminan las líneas vacías), luego haciendo virsh domiflistpara cada una de ellas y luego buscando un patrón que se parezca a un MAC.

Fuentes:

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


0

Si tiene QEMU (emulador VM) vaya al botón "i" y verifique la tarjeta de red asociada con la red "Br0". Tome nota de la dirección mac de la NIC. Ahora inicie sesión en su máquina virtual -> Abrir terminal -> escriba: comando "ifconfig" en la terminal -> tome nota de la dirección IP asociada con la dirección Mac que anotó anteriormente.

Puede iniciar sesión en su VM utilizando Putty o cualquier cliente ssh utilizando la IP que anotó en el último paso.


0

Tengo mis invitados KVM en la interfaz br0, así que creo que es un poco diferente, pero aquí están mis dos scripts que hice.

Tenga en cuenta que para usar ARP primero debe tener el MAC en su tabla Arp. Por lo tanto, es mejor usar fping para hacer un ping rápido de toda la red (toma como 2 segundos). Esto asegura que su caché Arp esté actualizada.

apt-get install fping
yum install fping

Encuentre una única IP de invitado a través de:

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

Encuentra todas las IP de invitados a través de:

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

Enfrenté este problema al final con arp-scan. ejemplo: sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 --numeric --retry = 1 que era para cuando quería buscar activamente. Utilicé addrwatch para sentarme en segundo plano y acumular una asignación de dirección mac / ip para mí.
Duque Dougal


0
  1. Obtenga su lista de dominios por virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. Obtenga su lista de interfaz de dominio por ID de dominio o nombre usando virsh domiflist yourDomainId, y verá la DIRECCIÓN MAC de la interfaz del dominio.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. Utilizando nmapescanear su LAN nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2, obtendrá la DIRECCIÓN 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

Una buena solución que utiliza el agente qemu-guest.

a) Configure su VM para usar qemu-guest agent En el host: Agregue con virt-manager un canal "qemu-guest-agent" Es realmente fácil. En mi caso, la máquina se llama "Debian", y xml después de la modificación será similar a esta.

 <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) En invitado, instale qemu-guest-agent y asegúrese de que se inicia

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) Finalmente, esta buena tubería devolverá la ip, en lugar de NAMEOFVMNIC, ponga eth0, enp1s0, etc.

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

-1

(Si bien pareces demasiado avanzado para una respuesta tan simple)

Será

$ ifconfig

¿trabajo?


Además, tenga cuidado, si tiene instancias duplicadas de la misma máquina, ya que la máquina tendrá problemas con la dirección MAC falsa, etc ... hay formas de editarla manualmente (y creo que ejecutar un comando para eso también)
David

Solo tengo una VM "vm1" en mi host del servidor ubuntu y la salida del comando "ifconfig" no muestra ninguna dirección IP asignada a mi adaptador de red "eth0".
Xianlin

sí, no tienes ip ... ¿Intentaste "dhclient eth0"? podría necesitar sudo
David

Intenté pero aún no obtengo dhcp ip de mi servidor host a mis máquinas virtuales invitadas. Mi servidor host tiene asignada una IP fija y puede acceder a Internet.
Xianlin

si desea que una ip no esté en la red principal, desea seleccionar NAT en su configuración de vm en lugar de puenteada.
David
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.