Saya memiliki beberapa VM yang berjalan di Ubuntu 9,10 melalui KVM + libvirt. Saya ingin dapat mengetahui alamat IP yang telah ditetapkan untuk setiap host tanpa secara fisik membuka "konsol" fisik untuk setiap mesin dan memohon ifconfig
.
Mempertimbangkan:
rascher @ localhost: ~ $ virsh -c qemu: /// daftar sistem --all Menghubungkan ke uri: qemu: /// system Status Nama Id ---------------------------------- 1 mesin1 berjalan 2 mesin2 berjalan - machine3 dimatikan
Konfigurasi jaringan saya terlihat seperti:
<network>
<name>default</name>
<uuid>1be...</uuid>
<forward mode='route' dev="eth0"/>
<bridge name='virbr0' stp='on' forwardDelay='0' />
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254' />
</dhcp>
</ip>
</network>
Jadi bagaimana saya bisa mendapatkan daftar yang mengatakan:
machine1 alamat IP = 192.168.122.16 alamat IP machine2 = 192.168.122.238 ...
Saya bermain dengan arp
:
rascher @ localhost: ~ $ arp Alamat HWtype HWaddress Flags Mask Iface 192.168.122.238 eter 00: 16: 36: 00: 61: b0 C virbr0 192.168.122.16 eter 00: 16: 36: 52: e8: 9c C virbr0 ...
Tapi ini tidak memetakan ke ID mesin virtual.
Apakah ada alat (melalui baris perintah, virsh
atau virt-*
) saya dapat memastikan informasi ini? Atau apakah saya perlu memiliki beberapa skrip mewah yang berjalan pada masing-masing VM, memeriksa IP sendiri, dan melaporkannya kembali ke host OS?
Saya memiliki masalah yang sama sehingga saya membuat skrip berikut:
sumber
Lars Kellogg-Stedman telah membuat satu set skrip untuk mengotomatisasi beberapa proses ini. Dia menyebutnya 'kebajikan'.
Dia menjelaskannya di posting blognya di sini: http://blog.oddbit.com/2013/10/04/automatic-dns-entrie/
Dia juga memiliki github dengan beberapa skrip yang ditulisnya, di sini:
https://github.com/larsks/virt-utils
Anda pada dasarnya dapat menjalankan ini:
dan Anda akan mendapatkan daftar setiap mesin virtual dengan "nama domain" di dalam virtual-machine-manager libvirt. Sebagai contoh, pada mesin saya, saya memiliki 3 vms berjalan.
Catatan, ini bukan 'hostname' yang digunakan oleh VM itu sendiri, tetapi untuk sejumlah besar kasus penggunaan, ini akan menjadi 'cukup baik' dan memecahkan masalah karena harus 'ifconfig' dari dalam setiap VM di lahan dhcp.
Posting blog Lars juga menunjukkan cara ini untuk 'memperbarui secara otomatis' file Anda sendiri / etc / hosts ketika libvirt memulai dan / atau menghentikan VM baru. Ini memungkinkan Anda melakukan hal-hal seperti ssh myname @ fedora20vm atau ssh myname @ debian6vm tanpa harus menemukan alamat 192.168.122.x dengan tangan.
Saya telah menambahkan beberapa perangkat tambahan yang sangat kecil, seperti skrip untuk meludahkan beberapa opsi ~ / .ssh / config (sangat berguna untuk menggunakan github di VM, melalui Agen Forwarding), di sini:https://github.com/donbright/virt-utils (tampaknya dihapus?)Saya juga ingin mencatat bahwa metode pengeditan dhclient.conf untuk 'mengirim nama host xxxxx' hanya berfungsi pada sistem yang benar-benar menggunakan dhclient.conf dengan cara standar. Mageia, misalnya, memiliki pengaturan yang tidak biasa tentang cara kerjanya dhclient, jadi instruksi sederhana tidak selalu bekerja. Namun, dengan metode Lars, ia berfungsi dengan sangat baik dari pengaturan dhcp OS tamu, karena ia tidak mengandalkan VM untuk mengirim nama hostnya - ia menggunakan 'nama domain' di dalam manajer mesin libvirt.
sumber
setidaknya pada fedora Anda bisa mendapatkan informasi itu dengan cara ini:
cat /var/lib/libvirt/dnsmasq/default.leases
memiliki output yang mirip dengan:
1412006226 52:54:00:fe:b3:c0 192.168.122.117 coreos0 01:52:54:00:fe:b3:c0
Meskipun itu sedikit lebih dari yang Anda minta
sumber
Di Ubuntu, dnsmasq digunakan untuk menyediakan layanan DNS dan DHCP ke para VM. Proses dnsmasq pada host menyimpan sewa mereka dalam file ini:
Ini adalah file teks normal dan baris di dalamnya mungkin terlihat mirip dengan ini di sini:
Bidang yang menarik bagi Anda adalah kolom ketiga dan keempat: bidang ketiga berisi alamat IPv4 dari VM dan bidang keempat berisi asterisk atau nama host dari VM. Ini tergantung pada balasan DHCP yang dikirim oleh tamu ke proses layanan dnsmasq.
sumber
Anda dapat mengubah
default
definisi jaringan, memetakan MAC ke IP dalam xml:Setelah Anda memulai tamu, Anda dapat mendaftar semua alamat MAC tamu melalui
Menurut byte terakhir dari alamat MAC, Anda dapat menyimpulkan alamat IP tamu.
sumber
virsh list --all --mac
tidak bekerja dalam versi 3.0.0