Freifunk Regensburg e.V.

KVM VPN Offloader bauen

Für Hochlastszenarien kann es von Vorteil sein, die VPN Last weg vom Router auf ein leistungsfähigeres Gerät zu verlagern. Dies kann irgendeine Art von x86 Hardware sein, auf der KVM läuft. Theoretisch könnte man das ganze auch ohne KVM realisieren. Die deutlich wartungsärmere Variante ist jedoch, das von uns zur Verfügung gestellte KVM Image zu benutzen.

Ich habe mal eine kurze und knappe c&p Anleitung geschrieben. Grundannahme: frisch installiertes Ubuntu Server oder Desktop, offene Rootshell. eth0 == WAN, eth1 = Mesh, KVM Storage pool heisst „images“, VM heisst „offloader“.

Installation

1. Zutaten Installieren

apt-get install kvm libvirt-bin virtinst screen

2. Screen starten und KVM konfigurieren

modprobe kvm
mkdir /kvmimages
virsh pool-define-as images dir - - - - /kvmimages/
virsh pool-list --all
virsh pool-build images
virsh pool-start images
virsh pool-autostart images
cd /kvmimages

3. Gluon KVM Image holen und entpacken (URL und Dateiname auf aktuelle Version anpassen):

wget http://regensburg.freifunk.net/firmware/experimental/factory/gluon-ffrgb-bat15-v2015.2-ffrgb-11-g8cb6421-x86-kvm.img.gz
gunzip gluon-ffrgb-bat15-v2015.2-ffrgb-11-g8cb6421-x86-kvm.img.gz

4. Storage Pool refreshen:

virsh pool-refresh images

5. Zweite Bridge für Mesh anlegen, dazu folgenden Code in /etc/network/interfaces einfügen:

# The secondary network interface and bridge
auto virbr1
iface virbr1 inet manual
        bridge_ports eth1
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

6. Bridge starten:

ifup virbr1

7. Gluon Image importieren:

virt-install --connect qemu:///system --ram 256 -n offloader --os-type=linux --disk vol=images/gluon-ffrgb-bat15-v2015.2-ffrgb-11-g8cb6421-x86-kvm.img --network=bridge:virbr0,model=virtio --network bridge=virbr1,model=virtio --import

8. Nun startet das Image im Config mode (genauso als hättet ihr gerade einen Hardwarerouter neu geflashed. Um darauf zuzugreifen könnt ihr euch zB einen IP Alias auf virbr0 anlegen, der im 192.168.1.0/24er Netzbereich liegt:

ifconfig virbr0:0 192.168.1.2/24 up

Nun könnt ihr mittels rinetd oder lokalem browser auf das Luci Webinterface zugreifen. Hier fix Knotennamen und ggf Koordinaten konfigurieren und speichern.

9. Nun muss man Gluon nur noch sagen, Mesh auf der zweiten Bridge rauszuschmeissen. Dazu in der Gluon Console (per virsh console oder per ssh):

uci set network.client.ifname='bat0'
uci set network.mesh_lan=interface
uci set network.mesh_lan.ifname="eth1"
uci set network.mesh_lan.mesh=bat0
uci set network.mesh_lan.proto=batadv
uci commit network
/etc/init.d/network restart

10. Zum Schluss noch ein paar Befehle, die ihr im Umgang mit KVM eventuell ganz nützlich finden könntet:

VM auf Autostart setzen:

virsh autostart offloader

VM neu starten:

virsh --connect qemu:///system start offloader

KVM Konsole verbinden:

virsh console offloader

KVM Konsole trennen:

Ctrl+]
Ctrl+5