How to find the IP address of a KVM Virtual Machine, that I can SSH into it?
I have follow this guide (Virtualization With KVM On Ubuntu 11.10) to setup my KVM (Virtual Machines Software) on my Ubuntu 11.10 Server. However, I didn’t setup my VM’s IP address when creating the VM, instead of using:
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
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
I have set up the network bridge as the guide instructed and the new VM’s interface is connected to the network bridge. I assume the KVM will assign my VM via DHCP but I don’t have information on my new VM’s IP address, where can I find the VM’s IP address and SSH to the new VM? Thanks. [Notes: I have managed to login the VM without knowing the IP address of the VM. Using «Xming + SSH with X Graphic Forwarding» But there is no DHCP ip address assigned to my VM, Besides the above question, I have another question here: How to enable the DCHP on my VM so when I use Xming to login via «virt viewer» I can at least see my IP address is there.]
I have figured out the problem and solved it. In the /etc/network/interfaces I deleted «network» and «broadcast» information and the DHCP worked on my guest VMs. Now I can ssh into my Guest VM. I guess my «network XXX.XXX.XXX.XXX» or «broadcast XXX.XXX.XXX.XXX» is wrong. the guide is still working well for this kind of setup, just be careful when set up your own network environment. The problem is solved.
14 Answers 14
virsh net-list virsh net-dhcp-leases
You can also use following form if you know the MAC address:
You can run arp -n to see what IP your virtual machine pick up. In that way, you don't have to login guest vm and type ifconfig .
The blog below has more details and includes a perl script which automates finding the address of a virtual machine.
I guess this is an old question, but the current versions of virsh make this a lot easier if you're using a nat or bridged private network. I have a virtual machine named steak on a (routed) private network (AKA "NAT"). It's just two commands to find what IP is was assigned by the built-in mechanism:
$ 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
I also have another VM ( eggs ) which is bridged to the regular network (connected to a bridge device on the hypervisor host). Libvirt doesn't assign it an address; it gets an address from my network's DHCP server, which also updates dynamic DNS in my case. That's one likely possibility when there's no output from domifadd for this VM. So, you basically have to find the address like it's any other machine - finding it in the arp table is probably the easiest -- which means ip neighbour now, as arp is deprecated and no longer present on some distributions. Luckily for those of us who don't spell things with extrae vouwels, you can also use shorter versions, like ip neigh and ip n (or ip neighbor ). 😉 Below, I use domiflist to find the MAC address (note that it's connected to br0 in the "source" column) and then find that in the arp table.
$ 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
How to find IP of virtual machine?
If I have a VM (using VirtualBox, for instance) running inside my main OS; how can I identify the virtual interface and IP address (of the VM) from within the original (host) OS? I thought I could just use ifconfig , ip a , or similar; but no information related to the connected VM is displayed. Although it shows the main (host) OS has been assigned 192.168.1.104 via wlan0 . However, if I run one of those commands from inside the VM, I can confirm that it's currently active @ 10.0.2.15 via eth0 .
If you use NAT mode for network emulation (default), it setups private network within VirtualBox which is not visible externally. You'll need bridged or host-only network configuration.
@myaut Ah. Okay, I thought it was bridged by default. But, even despite NAT; if the VM is receiving it's LAN connection, and it's route to the internet, from the main host; surely, the main host must have some kind of record of that link in the IP chain. Because it's accommodating what is effectively another system; forwarding packets back and forth, and that sort of thing. Right?
4 Answers 4
Virtualbox includes a tool called VBoxManage . This tool can access information about the guest OS.
In this example (Windows 10, in a PowerShell window), I want to find the IP of my VM called DS201 :
PS C:\Program Files\Oracle\VirtualBox> .\VBoxManage.exe guestproperty get DS201 "/VirtualBox/GuestInfo/Net/0/V4/IP" Value: 10.0.2.15
(It works the same in Linux and Mac OS X as it does in Windows)
Documentation about the capabilities of VBoxManage can be found at https://www.virtualbox.org/manual/ch08.html.
To your comment that the 'host must . record . the IP chain' it's VirtualBox, not the host as such, that does this:
The network frames sent out by the guest operating system are received by VirtualBox's NAT engine, which extracts the TCP/IP data and resends it using the host operating system. To an application on the host, or to another computer on the same network as the host, it looks like the data was sent by the VirtualBox application on the host, using an IP address belonging to the host. VirtualBox listens for replies to the packages sent, and repacks and resends them to the guest machine on its private network.
To your original Q, it is only VirtualBox that knows about the guest's simulated address:
The virtual machine receives its network address and configuration on the private network from a DHCP server integrated into VirtualBox. The IP address thus assigned to the virtual machine is usually on a completely different network than the host. As more than one card of a virtual machine can be set up to use NAT, the first card is connected to the private network 10.0.2.0, the second card to the network 10.0.3.0 and so on. If you need to change the guest-assigned IP range for some reason, please refer to Section 9.11, “Fine-tuning the VirtualBox NAT engine”.
Как узнать IP-адрес виртуальной машины KVM
Когда у вас есть гостевая виртуальная машина (ВМ), созданная с помощью гипервизора KVM, бывают обстоятельства, когда вы хотите узнать ее IP-адрес. Например, вы используете виртуальную машину на удаленном безголовом сервере, и у вас возникли проблемы с доступом к консоли входа в виртуальную машину, либо из-за того, что сервер не поддерживает удаленный доступ к консоли VNC, либо из-за того, что консоль virsh на сервере не работает по какой-то причине. Не зная IP-адреса виртуальной машины, вы не можете использовать SSH для виртуальной машины.
В этой ситуации допустим, что единственный доступ, который у вас есть, — это сервер гипервизора KVM, на котором работает виртуальная машина. Тогда как узнать IP-адрес виртуальной машины?
Конечно, можно узнать IP-адрес виртуальной машины без входа в виртуальную машину через консоль или SSH. Инструкции различаются в зависимости от того, какой тип гостевой сети используется для вашей виртуальной машины: сеть NAT или сетевой мост. Далее я опишу, как обнаружить IP-адрес виртуальной машины с помощью гипервизора KVM в каждом из этих случаев.
Сеть NAT
В виртуализации на основе KVM/libvirt сеть на основе NAT обычно используется для гостевых ВМ, поскольку сетью по умолчанию для ВМ (если не указано иное) является виртуальная сеть на основе NAT. В большинстве дистрибутивов Linux libvirt автоматически создает мост NAT по умолчанию с именем virbr0 . При желании вы также можете создать собственные виртуальные сети для своих виртуальных машин с помощью инструментов libvirt (например, virsh , virt-manager ), которые создадут соответствующие мосты NAT. Каждому из этих мостов NAT (по умолчанию или нет) назначена собственная частная подсеть (например, 192.168.122.0/24 для virbr0 в Ubuntu), и вашей виртуальной машине будет назначен частный IP-адрес из подсети. связан с любым мостом NAT, к которому он подключен. Для назначения IP-адреса libvirt использует выделенный сервер DHCP ( dnsmasq ) для каждого моста NAT.
Если ваша виртуальная машина использует сеть NAT, вы можете легко узнать ее IP-адрес из командной строки следующим образом.
В приведенном выше примере я указываю сеть по умолчанию (которая называется default ). Выходные данные команды показывают, что запущены две виртуальные машины, и что им назначены адреса 192.168.122.240 и 192.168.122.104.
Кроме того, вы можете сначала узнать имя своей виртуальной машины с помощью:
Затем получите IP-адрес вашей виртуальной машины, запустив:
Мостовая сеть
Недостатком сети на основе NAT является то, что ваша гостевая виртуальная машина скрыта за мостом NAT и недоступна за пределами сервера гипервизора без сложной переадресации портов или маскировки IP. Альтернативной гостевой сетью является сетевой мост, когда виртуальный интерфейс вашей виртуальной машины подключается к внешней локальной сети через физический интерфейс хоста KVM. В этом случае IP-адрес виртуальной машины не находится под управлением DHCP libvirt. Вместо этого виртуальной машине назначается IP-адрес DHCP-сервером, работающим в локальной сети с мостом. Естественно, этот IP-адрес не виден libvirt.
Чтобы узнать IP-адрес виртуальной машины с сетевым мостом, вы можете использовать инструмент командной строки под названием dhcpdump . С помощью этого инструмента вы можете отслеживать запросы и ответы DHCP, которыми ваша виртуальная машина обменивается с внешним DHCP-сервером.
Например, предположим, что ваша виртуальная машина подключена к локальной сети через мост с именем br0 . Затем выполните следующую команду, чтобы отслеживать DHCP-связь вашей виртуальной машины:
Во время выполнения команды dhcpdump включите виртуальную машину и подождите, пока на экране не появится DHCP-трафик.
Вывод dhcpdump включает IP-адрес DHCP, а также адрес DHCP-сервера. IP-адрес, назначенный вашей виртуальной машине через DHCP, появится в поле YIADDR , как показано выше.
Если вам интересно узнать IP-адрес виртуальной машины, созданной с помощью продукта VMware, обратитесь к этому руководству.
Как узнать IP адрес виртуальной машины KVM
Рано или поздно такая задача перед вами все равно появится - как узанать, какой IP адрес у конкретной виртуальной машины KVM. Даже если машина только одна - не подключаться же к ней, в самом деле. Я нашел три способа, причем третий мне очень понравился, на мой взгляд, потенциально, он самый лучший для траблшутинга при многих проблемах с сетью и совсем необязательно только с KVM.
1. Список арендованных адресов (virsh net-dhcp-leases)
Просто узнаем арендованные IP адреса виртуальной сети.
Уточним, какие вообще сети есть:
Список арендованных адресов сети:
# virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname
-------------------------------------------------------------------------------
2020-04-16 52:54:00:5d:e0:c4 ipv4 192.168.122.109/24 debian
2. IP адрес конкретной виртуальной машины:
3. Узнать адрес виртуальной машины с помощью ARP
Честно говоря, когда я увидел этот вариант, то захотел его запомнить и поделиться с другими. Ведь таким образом можно решать далеко не только лишь задачу по выяснению IP адреса виртуальной машины.
Узнаем MAC адрес виртуальной машины:
# virsh dumpxml vm1 | grep "mac address" | awk -F\' '< print $2>'
62:51:00:6d:e0:c4
В таблице arp ищем адрес сопоставленный с этим mac-адресом:
# arp -an | grep 62:51:00:6d:e0:c4
? (192.168.122.109) at 62:51:00:6d:e0:c4 [ether] on virbr0
Красиво? Мне понравилось, а подсмотрел здесь.
Авторизуйтесь для добавления комментариев!