Jason A. Donenfeld, Autor von VPN WireGuard, o in den Hauptbestandteil des OpenBSD-Kerneltreibers „wg“ für das WireGuard-Protokoll, einer spezifischen Netzwerkschnittstelle und Werkzeugen, die im Benutzermodus arbeiten. OpenBSD ist das zweite Betriebssystem nach mit vollständiger und integrierter Unterstützung für WireGuard. Die Einbindung von WireGuard wird für die OpenBSD-Version 6.8 erwartet.
Die Patches umfassen den Treiber für den OpenBSD-Kernel, Änderungen an den Tools ifconfig und tcpdump mit Unterstützung für die Funktionalität von WireGuard, Dokumentation und kleine Änderungen 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 bietet isakmpd mit den Standardkonfigurationen von ike psk einen Durchsatz von 380 mbit/s.
Bei der Entwicklung des Treibers für den OpenBSD-Kernel wurden einige architektonische Entscheidungen getroffen, die mit dem Treiber für Linux vergleichbar sind, aber der Treiber wurde in erster Linie für OpenBSD entwickelt, unter Berücksichtigung der Besonderheiten dieses Systems und unter Berücksichtigung der Erfahrungen, die bei der Erstellung des Treibers für Linux gesammelt wurden. Mit Zustimmung des ursprünglichen Autors von WireGuard wird der Code des neuen Treibers vollständig unter der freien ISC-Lizenz veröffentlicht.
Der Treiber ist eng in den Netzwerk-Stack von OpenBSD integriert und nutzt bestehende Subsysteme, was es ermöglicht hat, den Code sehr kompakt zu halten (etwa 3000 Zeilen Code). Zu den Unterschieden zählt auch eine andere, als für Linux, Trennung der Treiberkomponenten: spezifische für OpenBSD Schnittstellen wurden in die Dateien „if_wg.*“ verschoben, der Code zum Schutz vor DoS in „wg_cookie.*“, und die Logik zur Aushandlung von Verbindungen und Verschlüsselung in „wg_noise.*“.
Quelle: opennet.ru
