Jason A. Donenfeld, Autor von VPN WireGuard, größten in den Hauptbestandteil des OpenBSD-Kernel-Treibers „wg“ für das WireGuard-Protokoll, einer spezifischen Netzwerkschnittstelle und Werkzeugen, die im Benutzermodus arbeiten. OpenBSD wurde das zweite Betriebssystem nach mit vollständiger und integrierter Unterstützung für WireGuard. Die Einbeziehung von WireGuard wird in der Version OpenBSD 6.8 erwartet.
Die Patches umfassen einen Treiber für den OpenBSD-Kernel, Änderungen an den Tools ifconfig und tcpdump zur Unterstützung der WireGuard-Funktionalität, Dokumentation und kleinere Anpassungen zur Integration von WireGuard in das restliche System. Der Treiber verwendet eine eigene Implementierung der Algorithmen , und , sowie die bereits im OpenBSD-Kernel vorhandene Implementierung von SipHash.
Die Implementierung ist mit allen offiziellen WireGuard-Clients für Linux, Windows, macOS, *BSD, iOS und Android kompatibel. Leistungstests auf dem Laptop des Entwicklers (Lenovo x230) zeigten eine Durchsatzrate von 750 Mbit/s. Zum Vergleich: isakmpd mit den Standard-Einstellungen für ike psk ermöglicht einen Durchsatz von 380 Mbit/s.
Bei der Entwicklung des Treibers für den OpenBSD-Kernel wurden einige architektonische Entscheidungen übernommen, die auch für den Linux-Treiber verwendet werden, doch wurde der Treiber in erster Linie für OpenBSD entwickelt, wobei die Besonderheiten dieses Systems berücksichtigt und die Erfahrungen aus der Erstellung des Linux-Treibers einflossen. Mit Zustimmung des ursprünglichen Autors wird der gesamte Code des neuen Treibers unter der ISC-Lizenz veröffentlicht.
Der Treiber ist eng mit dem Netzwerk-Stack von OpenBSD integriert und nutzt bestehende Subsysteme, was den Code sehr kompakt macht (ca. 3000 Zeilen Code). Zudem wird das, im Vergleich zu Linux, unterschiedliche Design der Treiberkomponenten erwähnt: Die spezifischen OpenBSD-Schnittstellen sind in den Dateien „if_wg.*“ untergebracht, der Code zum Schutz vor DoS befindet sich in „wg_cookie.*“, während die Logik für die Aushandlung von Verbindungen und die Verschlüsselung in „wg_noise.*“ zu finden ist.
Quelle: opennet.ru
