KVM / libvirt: Cara mengkonfigurasi alamat IP tamu statis pada host virtualisasi

31

Yang ingin saya lakukan adalah mengatur konfigurasi jaringan para tamu (alamat IP, subnet, gateway, alamat broadcast) dari sistem host. Pengaturan jaringan yang digunakan dalam bridgemode. Bagaimana saya bisa mengkonfigurasi jaringan dari host daripada mengkonfigurasi klien itu sendiri ke konfigurasi jaringan statis?

Jika saya menjalankan:

virsh edit vm1

ada <network>blok juga dan saya mencoba mengkonfigurasi antarmuka jaringan dari sana, tapi sayangnya VM tamu sepertinya tidak menggunakannya dan karena itu offline ke jaringan (karena hanya menggunakan konfigurasi jaringan otomatis) ... Tamu VM keduanya, berbasis Linux dan Windows. Bantuan apa pun akan sangat dihargai.

beta
sumber
2
Apakah membagi alamat IP melalui DHCP yang disewa bukan opsi?
MadHatter mendukung Monica
Hm saya kira begitu, tapi saya ingin menetapkan VM # 1 ke IP # 1, VM # 2 ke IP # 2 dll (daripada memberi mereka IP acak dari sewa saya). Apakah Anda pikir akan mungkin untuk mengkonfigurasi seperti ini dengan DHCP? Jika ya, saya akan senang mencoba pendekatan ini.
beta
2
Saya menyarankan untuk mengubah nama pertanyaan menjadi sesuatu seperti " KVM / libvirt: Cara mengkonfigurasi alamat IP tamu statis pada host virtualisasi "
Nils Toedtmann
1
Setuju dengan @NilsToedtmann, setiap detail tambahan tentang hypervisor yang digunakan seperti OS dasar, dll akan bermanfaat. Mungkin ada alat manajemen berbasis OS tambahan untuk membantu dengan konfigurasi jaringan untuk sistem virtual. Ada panduan hebat tentang KVM dan LXC untuk digunakan dengan sistem operasi berbasis SUSE yang dapat memanfaatkan YaST.
Matt

Jawaban:

52

Jika Anda tidak ingin melakukan konfigurasi di dalam tamu, maka satu-satunya pilihan adalah server DHCP yang membagikan alamat IP statis. Jika Anda menggunakan bridgemode, itu mungkin beberapa server DHCP eksternal. Konsultasikan manualnya untuk mengetahui cara melayani sewa statis.

Tetapi setidaknya dalam mode maju natatau route, Anda dapat menggunakan built-in libvirt dnsmasqd(Versi libvirtd yang lebih baru mendukung opsi dnsmasq "dhcp-hostsfile"). Begini caranya:

Pertama, cari tahu alamat MAC dari VM yang ingin Anda tetapkan alamat IP statis:

virsh  dumpxml  $VM_NAME | grep 'mac address'

Kemudian edit jaringan

virsh  net-list
virsh  net-edit  $NETWORK_NAME    # Probably "default"

Temukan <dhcp>bagian, batasi rentang dinamis dan tambahkan entri host untuk VM Anda

<dhcp>
  <range start='192.168.122.100' end='192.168.122.254'/>
  <host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/>
  <host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/>
  <host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/>
</dhcp>

Kemudian, reboot VM Anda (atau restart klien DHCP-nya, mis. ifdown eth0; ifup eth0)


Pembaruan: Saya melihat ada laporan bahwa perubahan mungkin tidak berlaku setelah "virsh net-edit". Dalam hal ini, coba ini setelah diedit:

virsh  net-destroy  $NETWORK_NAME  
virsh  net-start    $NETWORK_NAME  

... dan mulai ulang klien DHCP VM.

Jika itu masih tidak berhasil, Anda mungkin harus melakukannya

  • hentikan layanan libvirtd
  • bunuh semua proses dnsmasq yang masih hidup
  • memulai layanan libvirtd

Catatan: Tidak mungkin host KVM dapat memaksa VM dengan OS yang tidak dikenal dan konfigurasi yang tidak diketahui untuk menggunakan konfigurasi jaringan tertentu. Tetapi jika Anda tahu bahwa VM menggunakan protokol konfigurasi jaringan tertentu - katakanlah DHCP - Anda dapat menggunakannya. Inilah yang diasumsikan oleh postingan ini.

Beberapa OS (misalnya beberapa distro Linux) juga memungkinkan untuk melewatkan opsi konfigurasi jaringan ke dalam guest misalnya melalui baris perintah kernel. Tapi itu sangat spesifik untuk OS, dan saya tidak melihat keuntungan dari metode DHCP.

Nils Toedtmann
sumber
Terima kasih saya akan mencobanya dan melaporkan kembali jika saya berhasil dengan cara itu.
beta
Keren. Tetapi Anda harus mengubah mode jaringan.
Nils Toedtmann
1
Saya datang ke sini karena saya memiliki kebutuhan yang sama, dan saya pikir saya bisa menjelaskan keuntungan menggunakan DHCP, setidaknya untuk kasus penggunaan saya. Situasinya memang tidak biasa. Saya memiliki server yang bergerak bolak-balik antara dua jaringan setiap beberapa minggu. Ada sekitar 10 tamu. Salah satu jaringan memiliki server DHCP (yang sulit dikendalikan untuk saya), yang lain tidak. Itu cukup banyak aturan menggunakan DHCP. Saya mencari cara untuk mengubah IP host dan secara otomatis memperbarui alamat IP tamu dll berdasarkan itu (saya menggunakan chef untuk otomatisasi, jadi setelah alamat IP diatur, saya baik-baik saja).
Kevin Keane
2
Saya dapat mengonfirmasi bahwa perubahan tidak berpengaruh tanpa merusak dan memulai ulang jaringan. Saya juga menemukan, anehnya, bahwa saya harus mematikan, dan kemudian memulai VM. Cukup me-reboot meninggalkan antarmuka dalam keadaan rusak.
orodbhen
Restart jaringan tidak memperbarui sewa DHCP. Untuk ini, Anda harus menghapus file status jaringan di / var / lib / libvirtd / dnsmasq
orodbhen
3

Saya telah dapat membuat dnsmasq'melihat' pemetaan IP-MAC yang baru ditambahkan dengan hanya mengirim -HUPsinyal ke dnsmasqproses. Setelah itu, me-reboot tamu baru sudah cukup untuk memiliki IP yang benar ditugaskan untuk itu, tanpa perlu me-restart libvirtdatau jaringan itu sendiri.

Dokumentasi libvirt resmi ( http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network ) menyebutkan skrip Perl tidak resmi ini yang mengotomatiskan seluruh proses: https://gist.github.com/bendiken/032ea1bddb9ffafe98b4

Saya belum mencoba skrip ini sendiri, karena saya tahu bahwa hostsfile sudah diperbarui dan hanya mengirim sinyal -HUP sudah cukup.

Tuan rumah menjalankan Debian 7.8 dan versi paket adalah:

  • kvm 1: 1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1
Stefano Rago
sumber