Como encontrar o endereço IP de uma máquina virtual KVM, para que eu possa fazer o SSH nela?

30

Eu segui este guia ( Virtualização com KVM no Ubuntu 11.10 ) para configurar meu KVM (Software de máquinas virtuais) no meu servidor Ubuntu 11.10. No entanto, não configurei o endereço IP da minha VM ao criar a VM, em vez 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

Eu usei: (apaguei "--ip = 192.168.0.101 --gw = 192.168.0.1" na linha 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

Configurei a ponte de rede conforme as instruções do guia e a nova interface da VM está conectada à ponte de rede.

Presumo que o KVM atribua minha VM via DHCP, mas não tenho informações sobre o endereço IP da minha nova VM, onde posso encontrar o endereço IP e o SSH da VM para a nova VM? Obrigado.

[Notas: Eu consegui fazer login na VM sem saber o endereço IP da VM. Usando " Xming + SSH com X Graphic Forwarding " Mas não há um endereço IP DHCP atribuído à minha VM. Além da pergunta acima, tenho outra pergunta aqui: Como habilitar o DCHP na minha VM, portanto, quando eu uso o Xming para fazer login via " virt viewer "Pelo menos posso ver meu endereço IP.]

Xianlin
fonte
Eu descobri o problema e o resolvi. Nas interfaces / etc / network /, excluí as informações de "rede" e "transmissão" e o DHCP funcionava nas minhas VMs convidadas. Agora eu posso ssh na minha VM convidada. Acho que minha "rede XXX.XXX.XXX.XXX" ou "transmitida XXX.XXX.XXX.XXX" está errada. o guia ainda está funcionando bem para esse tipo de configuração, apenas tome cuidado ao configurar seu próprio ambiente de rede. O problema está resolvido!!!
Xianlin
11
libvirt tem dois comandos agora: domifaddr e-dhcp-locações líquidas
Nehalem J Wani
consulte este link, você vai encontrar uma resposta:

Respostas:

20

Você pode executar arp -npara ver qual IP sua máquina virtual obtém. Dessa forma, você não precisa fazer o login guest vm e digitar ifconfig.

O blog abaixo tem mais detalhes e inclui um script perl que automatiza a localização do endereço de uma máquina virtual.

Dica: Encontre o endereço IP de uma máquina virtual

chenwj
fonte
Tão simples. Grande ....
Indika K
11
Ir para página xyz por respostas não são bons se a ligação cair, por favor poste "respostas completas"
FreeSoftwareServers
31

Tente o seguinte:

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

Você também pode usar o seguinte formulário se souber o endereço MAC:

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

O endereço MAC pode ser encontrado no comando dumpxml. Consulte Existe uma maneira de determinar qual interface virtual pertence a uma máquina virtual em um host kvm?

Rahul
fonte
5
Essa é a resposta correta. Funciona sem hackers. Muito obrigado.
chmac
11
Deve ser "lista de rede virsh" ... não há espaço entre "rede" e "lista". Caso contrário, isso funciona perfeitamente.
Dave Hein
@DaveHein Obrigado por corrigir. Atualizado a resposta.
Rahul
Se você estiver obtendo resultados vazios, tente executar o virsh comsudo
Freedom_Ben
6

Acho que essa é uma pergunta antiga, mas as versões atuais virshtornam isso muito mais fácil se você estiver usando uma rede privada nat ou em ponte. Eu tenho uma máquina virtual nomeada steakem uma rede privada (roteada) (AKA "NAT"). São apenas dois comandos para encontrar qual IP foi atribuído pelo mecanismo interno:

$ 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

Também tenho outra VM ( eggs) conectada à rede comum (conectada a um dispositivo de ponte no host do hipervisor). Libvirt não atribui um endereço a ele; ele obtém um endereço do servidor DHCP da minha rede, que também atualiza o DNS dinâmico no meu caso. Essa é uma possibilidade provável quando não há saída domifaddpara esta VM. Portanto, você basicamente precisa encontrar o endereço como qualquer outra máquina - encontrá-lo na tabela arp é provavelmente o mais fácil - o que significa ip neighbouragora, pois arpestá obsoleto e não está mais presente em algumas distribuições. Felizmente, para aqueles que não soletram coisas com vales extras, você também pode usar versões mais curtas, como ip neighe ip n(ou ip neighbor). ;) Abaixo, eu uso domiflistpara encontrar o endereço MAC (observe que ele está conectado aobr0 na coluna "origem") e, em seguida, localize-o na tabela 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
fonte
5

lista para vms:

virsh list

obter vm MAC do nome

virsh domiflist debian8

faça a varredura da sua sub-rede vm com grep (o MAC deve ser capitalizado)

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)
Antonín Vrba
fonte
4

Se você tiver acesso do console à VM, basta executar ifconfig -ano convidado. Enquanto estiver lá, verifique se o convidado tem conectividade de rede e se sshdestá em execução.

Se você não tiver acesso ao console, é provável que o endereço IP tenha sido atribuído pelo DHCP. Procure outra máquina que também esteja recebendo uma atribuição DHCP, talvez o servidor host, e adicione 1 ao endereço e tente. De fato, tente os próximos 5 ou 6 endereços. Se isso não funcionar, você possui uma rede ativa grande e precisará tentar todos os endereços IP na sub-rede, ou há um problema de rede de nível inferior, como nenhuma rota para hospedar ou dois hosts com o mesmo endereço MAC. Ou talvez você simplesmente não tenha sshdfugido.

Usar o console é a maneira mais fácil de resolver esse problema.

Michael Dillon
fonte
Na verdade, eu consegui me conectar à minha VM via Xming Server + comando "virt-viewr". Descobri que não há IP atribuído ao convidado enquanto estou na VM. Como fazer o DHCP funcionar? Algum arquivo XML que preciso alterar?
Xianlin
Olá Michael, você acha que pode me ajudar se eu lhe der acesso ao meu servidor? Eu tentei DHCP e IP estático, mas as VMs convidadas não estão recebendo nenhum IP, mas meu servidor host ainda pode acessar a Internet. obrigado.
Xianlin
3

Para ver o endereço IP das suas VMs, basta executar:

$ arp -n

Se o arp não estiver instalado no seu sistema, basta instalar o net-toolspacote.

Alxs
fonte
2

É possível conectar-se através do VNC interno virt-managere, ao fazer o login tty, encontre o endereço IP com ifconfig eth0. Normalmente eth0, a menos que você tenha especificado o contrário.

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

Digitalizar sub-rede. Analise a saída com awk para obter linhas como <IP> <MAC>. Em seguida, grep neles usando uma lista dos MACs das VMs.

A lista dos MACs é obtida listando todas as VMs (também retira as linhas vazias), fazendo virsh domiflistpara cada uma delas e depois cumprimentando por um padrão que se parece com um MAC.

Fontes:

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

Velkan
fonte
0

Se você possui QEMU (emulador de VM), vá para o botão "i" e verifique a placa de rede associada à rede "Br0". Anote o endereço mac da NIC. Agora, faça login na sua VM -> Open Terminal -> digite: "ifconfig" no terminal -> anote o endereço IP associado ao endereço Mac que você anotou anteriormente.

Você pode fazer login na sua VM usando o Putty ou qualquer cliente ssh usando o IP que você anotou na última etapa.

saurav
fonte
0

Eu tenho meus convidados KVM na interface br0, então acho que é um pouco diferente, mas aqui estão os meus dois scripts que fiz.

Nota: Para usar o ARP, você primeiro precisa ter o MAC na sua tabela Arp. Portanto, é melhor usar o fping para fazer um ping rápido na rede inteira (leva cerca de 2 segundos). Isso garante que o cache do Arp esteja atualizado.

apt-get install fping
yum install fping

Encontre um único IP de convidado via:

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

Encontre todos os IPs de convidados via:

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
fonte
Eu lidei com esse problema no final com o arp-scan. exemplo: sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 --numeric --retry = 1 que era para quando eu queria pesquisar ativamente. Eu usei o addrwatch para ficar em segundo plano e acumular um mapeamento de endereço mac / ip para mim.
Duke Dougal
0
  1. Obtenha sua lista de domínios por virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. Obtenha sua lista de interfaces de domínio por ID ou nome de domínio usando virsh domiflist yourDomainIde você verá o ENDEREÇO ​​MAC da interface do domínio.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. Usando nmap digitalização da sua LAN nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2, você obterá o ENDEREÇO ​​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
fonte
0

Uma boa solução que usa o agente qemu-guest.

a) Configure sua vm para usar o qemu-guest agent No host: adicione com virt-manager um canal "qemu-guest-agent" É realmente fácil. No meu caso, a máquina é chamada "Debian" e o xml após a modificação será semelhante a isto.

 <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) No convidado, instale o qemu-guest-agent e verifique se ele foi iniciado

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 este belo canal retornará o ip, em vez de NAMEOFVMNIC colocar eth0, enp1s0, etc.

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

(Embora você pareça avançado demais para uma resposta tão simples)

Vai

$ ifconfig

trabalhos?

David
fonte
Além disso, tenha cuidado, se você tiver instâncias duplicadas da mesma máquina, pois a máquina terá problemas com o endereço MAC falso, etc ... existem maneiras de editar isso manualmente (e acho que execute um comando para isso também)
David
Eu tenho apenas uma VM "vm1" no host do servidor ubuntu e a saída do comando "ifconfig" não mostra nenhum endereço IP atribuído ao meu adaptador de rede "eth0".
Xianlin
sim, você não tem ip ... Você tentou "dhclient eth0" necessidade --might sudo
David
Tentei, mas ainda não obtive o dhcp ip do meu servidor host para minhas VMs convidadas. Meu servidor host possui um IP fixo e pode acessar a Internet.
Xianlin
se você deseja que um ip não esteja na rede pai, selecione NAT nas configurações da VM em vez de em ponte.
David David