VM mittels Vagrant/libvirt im Netz verfügbar machen



  • Hallo,

    ich will mir für Experimente ein kleines Neutzwerk aufbauen und habe mangels Blech vor, das Ganze mittels VMs auf einem extra Rechner umzusetzen. Hierz nutze ich Vagrant mit libvirt im Hintergrund auf einem Debian Bookworm.
    Der Einfachheit halber möchte ich sämtliche virtuellen Maschinen direkt von meinem PC aus erreichen können.

    Hierzu baut nach meinem Verständniss libvirt eine virtuelle bridge auf (virbr0) die ich auch sehen kann, allerdings nur als root:

    $ sudo brctl show
    bridge name	bridge id		STP enabled	interfaces
    virbr0		8000.52540096e2dd	yes 
    

    Was mich hier wundert ist, dass der bridge kein Interface zugeordnet ist, ich Nappel weiß aber auch nicht, wie ich dieses tun sollte.. Mein letzter Versuch endete damit, dass der Server gar nicht mehr im Netz verfügbar war und ich ihn neu starten musste.. (Edit siehe unten)

    Laut Anleitung soll dann das Vagrantfile ca. so aussehen.

    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    Vagrant.configure("2") do |config|
      # first initialize the basic box parameters
      config.vm.box = "generic/debian11"
      config.vm.host_name = "draft"
    
      config.vm.network :public_network,
        :dev => "virbr0",
        :mode => "bridge",
        :type => "bridge"
    end
    

    Wenn ich die Maschine starten möchte passiert aber Folgendes

    $ vagrant up
    Bringing machine 'default' up with 'libvirt' provider...
    There are errors in the configuration of this machine. Please fix
    the following errors and try again:
    
    Libvirt Provider:
    * network configuration 0 for machine default is a public_network referencing host device 'virbr0' which does not exist, consider adding ':dev => ....' referencing one of eno1
    

    Meine aktuelle Vermutung ist, dass da ein Berechtigungsproblem existiert.. Aber ich hab keinen Plan, wo genau in dieser Kette OS<->qemu<->libvirt<->vagrant das liegt..

    Hat jemand das Phänomen schonmal gehabt und kann mir einen Hinweis geben? Die gemeingültigen Suchmaschinen sind mir da nicht geholfen... 😞

    Edit:
    Das virbr0 ist auf jeden fall auch auf dem Host da:

    $ ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr0 state UP group default qlen 1000
        link/ether 40:b0:34:f7:c5:39 brd ff:ff:ff:ff:ff:ff
        altname enp0s31f6
        inet 192.168.178.146/24 brd 192.168.178.255 scope global dynamic eno1
           valid_lft 780289sec preferred_lft 780289sec
        inet6 2a02:2454:3d9:600:42b0:34ff:fef7:c539/64 scope global dynamic mngtmpaddr 
           valid_lft 6721sec preferred_lft 3121sec
        inet6 fe80::42b0:34ff:fef7:c539/64 scope link 
           valid_lft forever preferred_lft forever
    3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 52:54:00:96:e2:dd brd ff:ff:ff:ff:ff:ff
        inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
           valid_lft forever preferred_lft forever
    

    Zwischenzeitlich hab ich noch rausgefunden, dass ein Neustart nach dem brctl addif virbr0 eno1 nicht notwendig gewesen wäre, der Rechner kriegt sich nach zwei Minuten auch so wieder ein.. Netzwerken war noch nie meine Stärke.. Deshalb mach ich den Blödsinn ja zu Fuß..
    Ändert aber leider nix am Gesamtergebnis..



  • Ich erinner mich an ein aehnliches problem das ich vor einigen jahren hatte. libvirt konnte keine systemd networkd managed networks finden. allerdings wurde das soweit mir bekannt upstream gefixt, sollte also kein problem mehr sein wenn du einen halbewegs aktuellen stack benutzt.

    kannst mal output von virsh -c qemu:///system iface-list --all und virsh version posten?



  • Aber sicher:

     $ virsh -c qemu:///system iface-list --all
     Name     Status    MAC-Adresse
    ---------------------------------------
     eno1     Aktiv     40:b0:34:f7:c5:39
     lo       Inaktiv   00:00:00:00:00:00
     virbr0   Inaktiv   52:54:00:96:e2:dd
    
    $ virsh version
    Kompiliert gegen die Bibliothek: libvirt 9.0.0
    Verwende Bibliothek: libvirt 9.0.0
    
    Verwende API: QEMU 9.0.0
    
    Laufender Hypervisor: QEMU 7.2.0
    
    $ uname -a
    Linux kublech 6.1.0-7-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.20-1 (2023-03-19) x86_64 GNU/Linux
    
    

Anmelden zum Antworten