KVM / libvirt: jak skonfigurować statyczny adres IP gościa na hoście wirtualizacji

31

Chciałbym ustawić konfigurację sieci gości (adres IP, podsieć, brama, adres rozgłoszeniowy) z systemu hosta. Użyta konfiguracja sieci jest w bridgetrybie. Jak mogę skonfigurować sieć z hosta zamiast konfigurować samego klienta do statycznej konfiguracji sieci?

Jeśli wykonam:

virsh edit vm1

jest też <network>blok i próbowałem skonfigurować interfejs sieci stamtąd, ale niestety gość VM nie wydaje się go używać i jako taki jest offline w sieci (ponieważ używa tylko automatycznej konfiguracji sieci) ... Gość Maszyny wirtualne są oparte zarówno na systemie Linux, jak i Windows. Każda pomoc byłaby bardzo mile widziana.

beta
źródło
2
Czy przekazywanie adresów IP za pośrednictwem zarezerwowanych dzierżaw DHCP nie jest opcją?
MadHatter obsługuje Monikę
Hm, chyba tak, ale chciałbym przypisać VM nr 1 do IP nr 1, VM nr 2 do IP nr 2 itd. (Zamiast dać im losowe IP z mojej dzierżawy). Czy uważasz, że można by tak skonfigurować go za pomocą DHCP? Jeśli tak, chętnie wypróbuję to podejście.
beta
2
Proponuję zmienić nazwę pytania na coś takiego jak „ KVM / libvirt: Jak skonfigurować statyczny adres IP gościa na hoście wirtualizacji
Nils Toedtmann
1
Zgadzam się z @NilsToedtmann, wszelkie dodatkowe szczegóły dotyczące korzystania z hiperwizora, takie jak podstawowy system operacyjny itp., Byłyby korzystne. Mogą istnieć dodatkowe narzędzia do zarządzania oparte na systemie operacyjnym, które pomogą w konfiguracji sieci dla systemów zwirtualizowanych. Istnieją świetne przewodniki na temat KVM i LXC do użytku z systemami operacyjnymi opartymi na SUSE, które mogą korzystać z YaST.
Matt

Odpowiedzi:

52

Jeśli nie chcesz wykonywać żadnej konfiguracji wewnątrz gościa, jedyną opcją jest serwer DHCP, który rozdaje statyczne adresy IP. Jeśli używasz bridgetrybu, prawdopodobnie będzie to jakiś zewnętrzny serwer DHCP. Zapoznaj się z instrukcją, aby dowiedzieć się, jak obsługiwać statyczne dzierżawy.

Ale przynajmniej w trybach przekazywania natlub routemożesz użyć wbudowanej dnsmasqdbiblioteki libvirt (nowsze wersje libvirtd obsługują opcję „dhcp-hostsfile” dnsmasq). Oto jak:

Najpierw sprawdź adresy MAC maszyn wirtualnych, którym chcesz przypisać statyczny adres IP:

virsh  dumpxml  $VM_NAME | grep 'mac address'

Następnie edytuj sieć

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

Znajdź <dhcp>sekcję, ogranicz zakres dynamiczny i dodaj wpisy hosta dla swoich maszyn wirtualnych

<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>

Następnie uruchom ponownie maszynę wirtualną (lub uruchom ponownie klienta DHCP, np. ifdown eth0; ifup eth0)


Aktualizacja: Widzę raporty, że zmiana może nie wejść w życie po „virsh net-edit”. W takim przypadku wypróbuj to po edycji:

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

... i zrestartuj klienta DHCP maszyny wirtualnej.

Jeśli to nadal nie działa, być może będziesz musiał

  • zatrzymaj usługę libvirtd
  • zabij wszystkie procesy dnsmasq, które są jeszcze aktywne
  • uruchom usługę libvirtd

Uwaga: W żaden sposób host KVM nie może zmusić maszyny wirtualnej z nieznanym systemem operacyjnym i nieznaną konfiguracją do użycia określonej konfiguracji sieci. Ale jeśli wiesz, że maszyna wirtualna używa określonego protokołu konfiguracji sieci - powiedzmy DHCP - możesz z niej skorzystać. Tak zakłada ten post.

Niektóre systemy operacyjne (np. Niektóre dystrybucje Linuksa) pozwalają również na przekazywanie opcji konfiguracji sieci do gościa, np. Poprzez wiersz poleceń jądra. Ale to jest bardzo specyficzne dla systemu operacyjnego i nie widzę żadnej przewagi nad metodą DHCP.

Nils Toedtmann
źródło
Dzięki, spróbuję i zdam raport, jeśli mam działać w ten sposób.
beta
Fajne. Ale musisz zmienić tryb sieci.
Nils Toedtmann
1
Przybyłem tutaj, ponieważ mam podobną potrzebę i myślę, że mogę wyjaśnić przewagę nad korzystaniem z DHCP, przynajmniej w moim przypadku użycia. Sytuacja jest wprawdzie niezwykła. Mam serwer, który przemieszcza się między dwiema sieciami co kilka tygodni. Ma około 10 gości. Jedna z sieci ma serwer DHCP (który jest dla mnie trudny do kontrolowania), druga nie. To prawie wyklucza korzystanie z DHCP. Szukam sposobu na zmianę adresu IP hosta i automatyczną aktualizację adresów IP gości itp. Na tej podstawie (używam szefa kuchni do automatyzacji, więc kiedy adresy IP zostaną skonfigurowane, jestem gotowy do pracy).
Kevin Keane
2
Mogę potwierdzić, że zmiany nie zostaną wprowadzone bez zniszczenia i ponownego uruchomienia sieci. Dziwnie też odkryłem, że musiałem zamknąć, a następnie uruchomić maszynę wirtualną. Ponowne uruchomienie spowodowało uszkodzenie interfejsu.
orodbhen
Ponowne uruchomienie sieci nie odnawia dzierżawy DHCP. W tym celu należy usunąć plik stanu sieci w katalogu / var / lib / libvirtd / dnsmasq
orodbhen
3

Byłem w stanie dnsmasq„zobaczyć” nowo dodane mapowanie IP-MAC, po prostu wysyłając -HUPsygnał do dnsmasqprocesu. Następnie wystarczyło zrestartować nowego gościa, aby przypisać mu poprawny adres IP, bez potrzeby ponownego uruchamiania libvirtdani samej sieci.

Oficjalna dokumentacja libvirt ( http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network ) wspomina o tym nieoficjalnym skrypcie Perla, który automatyzuje cały proces: https://gist.github.com/bendiken/032ea1bddb9ffafe98b4

Sam nie próbowałem tego skryptu, ponieważ zorientowałem się, że plik hostów został już zaktualizowany i wystarczyło tylko wysłanie sygnału -HUP.

Na hoście działa Debian 7.8, a wersje pakietów to:

  • 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
źródło