Hier mal die “Anleitung” für multi-fastd, auf das dies jemand automatisieren kann.
Kontext
fastd, unsere VPN Waffe der Wahl zur Zeit, ist super für Clients (da klein und effizient) aber auf den Supernodes genau das Gegenteil. Es ist Single-Threaded und es setzt auf TAP auf. Langfristig gibt es andere Optionen aber momentan ist es halt fastd.
Der Single-Threaded Aspekt führt dazu das fastd die vorhanden Kapazität nicht nutzen kann. Sobald fastd halbwegs in die CPU Sättigung fährt, fängt es an Pakete zu verlieren was die Performance der Clients dramatisch verschlechtert (siehe “Mathis formula”). Dieser Effekt ist bei fastd Instanzen mit weniger als 100% CPU zu beobachten. D.h. man schafft es nichtmal einen Core auszulasten. Sehr ineffizient.
Überliefert ist die Daumenregel von 100 VPN connections pro fastd instanz auf x86.
Der Workaround ist simpel: Mehrere fastd Instanzen. Das ist ziemlich simpel, die Unterschiede zu einer single instanz installation:
- Man brauch pro Instanz ein Schlüsselpaar und Config File (auf den kgbvax’ nodes heissen die fastd-a … fastd-d
- Pro fastd instanz wird ein eigener Port verwendet
- Wichtig kann man aber schnell vergessen: Pro fastd wird ja ein Netzwerk Interface erzeugt welches auch eine individuelle MAC Adresse braucht. Da könnte man einfach das vierte Oktett hochzählen oder so.
Also nochmal, unterschiede in den Config Files bei (kgbvax2|3)
- status socket
- bind addresses (port nummer)
- interface (abweichende namen, zb meshvpn-a … meshvpn-d)
- private key
- on up… eigene MAC Adresse
- Sowie eignen .service, damit systemd die Instanz auch startet.
Das war’s dann schon. Klinkt sich automatisch in batman ein.
Ich hoffe damit kann man das nun nachbauen
Damit kann man nun die Hardware besser nutzen und spart massiv Blech und VMs.
Apropos VM: Es macht aus meiner durchaus Sinn mehr fastd instanzen zu fahren als Cores vorhanden sind. Also zb. 3xfastd auf einer VM mit 2 vCPU (bis diese in die Sättigung fahren halt).
Und noch einen aus der Kiste: Statische Allokation von Cores zu VMs reduziert ebenfalls die Effizienz des Gesamtsystems.