Kurz zusammengefasst: pfSense ist ein Routing und Firewall OS, kostenfrei verfügbar und Multi-WAN fähig, einschl. Load Balancing.
Diese Firewall kann auf Bare Metal, aber auch als Virtuelle Maschine (VM), beispielsweise auf Hyper-V, betrieben werden. Bei Hyper-V (ab Version 2019) gibt es seit der pfSense Version 2.6 eine Besonderheit, die zu mieserablem Throughput führen kann, wenn Traffic von physischen Geräten ankommt.
So führt das auf Standard-Konfiguration z. B. dazu, dass WAN ankommend nur ca. 5 Mb/s möglich sind, obwohl 100 Mb/s anliegen müssten. Wenn ein physischer Client raus sendet, sogar nicht einmal 1 Mb/s. VMs haben es dagegen etwas besser. Sie erreichen beim Senden volle Bandbreite, wohingegen der Downstream weiterhin auf 5 Mb/s gedrosselt bleibt.
Nach langer Recherche bin ich darauf gestoßen, dass pfSense – zumindest in der kostenfreien Version – nicht richtig mit RSC (Receive Segment Coalescing, auf Deutsch: Empfangssegmentzusammenfügung) vom Hyper-V vSwitch zusammen arbeitet. Was genau das ist, kann man auf der Microsoft-Seite nachlesen.
Die Lösung: Auf allen betroffenen vSwitches das RSC abschalten. Das kann auf allen Switches des Hyper-V mit folgendem PowerShell-Befehl kurzerhand realisiert werden:
Get-VMSwitch -Name * | Set-VMSwitch -EnableSoftwareRsc $false
Es muss nichts neu gestartet werden. Die Auswirkung zeigt sich unverzüglich.