Freifunk-Gluon-VM in KVM/libvirt

Ziel

Eine Virtuelle Maschine, in der Gluon läuft und über virtuelle Netzwerkschnittstellen das Freifunk-Client-Netz und das Mesh-Netzwerk zu Verfügung stellt.

Motivation

Die VM kann dann als VPN-Offloader für Freifunk-Access Points dienen, oder als Gateway für andere VMs um Dienste im Freifunk-Netz anzubieten. Und man kann Hostapd dran klemmen und Freifunk ohne extra Access Point anbieten. Oder Freifunk über WLAN-Accesspoints ohne Freifunk-Firmware anbieten. Oder was auch immer.

So geht’s – prinzipiell

Ich setzte voraus dass libvirt und Virt-Manager installiert sind.

Die Gluon-VM erhält drei virtuelle Netzwerkschnittstellen mit folgenden Funktionen:

  • Internetzugang
  • Freifunk-Client-Netzwerk: Für den direkten Zugang in’s Freifunk-Netz
  • Freifunk-Mesh-Netzwerk: Zum Anschluss von anderen Freifunk-Access Points, VM dient als Offloader

Alle drei Netzwerkschnittstellen werden der Einfachheit halber auf dem Server (der Rechner, auf dem die VM läuft) als Bridges ausgeführt:

  • br-internet
  • br-ff-client
  • br-ff-mesh

So geht’s – Schritt für Schritt

  1. Bridges auf dem Server anlegen
    /etc/network/interfaces:

     

    # Internet ###
    # Prämisse: Internetzugang erfolgt bislang über eth0
    # Achtung: Alles was bisher über eth0 gemacht wurde (Firewall? Serverdienste?)
    # muss danach auf br0 umgestellt werden!
    auto br-internet
    iface br-internet inet dhcp
        bridge_stp on
        bridge_fd 3
        bridge_ports eth0
    auto eth0
    iface eth0 inet manual
    
    # Freifunk Clientnetzwerk ###
    auto br-ff-client
    iface br-ff-client inet static
        address 0.0.0.0
        bridge_ports none
        bridge_fd 0
        bridge_stp off
        bridge_waitport 0
        
    # Freifunk Meshnetzwerk ###
    auto br-ff-mesh
    iface br-ff-mesh inet static
        address 0.0.0.0
        bridge_ports none
        bridge_fd 0
        bridge_stp off
        bridge_waitport 0
  2. Anschließend am Besten den Server neu starten um zu prüfen, ob alle Dienste die Umstellung von eth0 auf br-internet verkraftet haben.
  3. Von deiner Freifunk-Community ein passendes Image runterladen und nach /var/lib/libvirt/images kopieren (Daumenregel: Dateiname enthält „x86“ und „img“, z.B. „gluon-ffin-v2017.1.7-10+4-x86-64.img.gz“. Wenn das Image, wie hier, noch gepackt ist, gleich noch entpacken.
  4. Virt-Manager starten
    1. „Neue Virtuelle Maschine erstellen“
    2. „vorhandenes Festplatten-Abbild importieren“ -> Gluon-Image auswählen
    3. Betriebssystemtyp: „Linux“, Version: „Generic Linux 2020“
    4. Speicher: 128 MByte, CPU: 1
    5. Name: Gluon-VM, „Konfiguration bearbeiten vor Installation“: Ja
    6. „Abschließen“
    7. Disk 1: „Festplattenbus“ auf „VirtIO“ stellen
    8. Network: Gerätemodell: „virtio“, Netzwerkquelle: „Bridge device“, Namen des gemeinsam verwendeten Geräts: „br-internet“
    9. Eine zweite Netzwerkschnittstelle hinzufügen, Gerätemodell: „virtio“, Netzwerkquelle: „Bridge device“, Namen des gemeinsam verwendeten Geräts: „br-ff-mesh“
    10. „Installation beginnen“
  5. In der VM sollte nach wenigen Sekunden Gluon laufen und auf die Ersteinrichtung per Browser warten. Standardmäßig lauscht Gluon dazu auf der IP-Adresse 192.168.1.1. Da mein Heimnetzwerk aber im Bereich 192.168.3.xxx liegt, ändere ich diese Adresse in der VM auf irgendwas in diesem Adressbereich ab: ifconfig br-setup 192.168.3.200
  6. Mit dem Browser auf http://192.168.3.200 gehen und Gluon ganz normal einrichten.
  7. Gluon-VM herunterfahren
  8. Im Virt-Manager an den beiden Netzwerkschnittstellen die Netzwerkgeräte vertauschen: „br-internet“ zu „br-ff-mesh“ ändern, und „br-ff-mesh“ zu „br-internet“.
  9. Um das Client-Netzwerk rauszuleiten jetzt im Virt-Manager noch eine dritte Netzwerkschnittstellen zur Gluon-VM hinzufügen, Name des gemeinsam verwendeten Geräts: „br-ff-client“.
  10. Die Gluon-VM wieder starten.
  11. In der Gluon-VM dann die neue, dritte Netzwerkschnittstelle an das Client-Netz hängen:
    uci add_list network.client.ifname=eth2
    Änderungen speichern mit uci commit
  12. Die Gluon-VM neu starten: reboot

Update November 2022: An Gluon v2021 angepasst.