OPNsense TCP Sessions häufige Retransmissions
Hallo,
ich habe seit einigen Tagen eine OPNsense 25.1.5_4 mit Wireguard und BGP am laufen. Soweit erstmal alles i.O.
Leider muss ich aber bei TCP Sessions wie SSH oder VNC feststellen, das es häufig zu TCP Retransmissions kommt. Das mag jetzt erstmal nicht ungewöhnlich sein, aber dabei hängt dann immer die jeweilige Session spürbar für wenige Milisekunden. Manchmal sogar Sekunden.
Die Abstände sind kurz hintereinander, manchmal nach 5 Minuten, dann auch mal wieder gleich 2 Minuten. In den Logs steht nichts auffälliges. Nach etlicher Zeit der Recherche ins Blaue, habe ich nach systematischer Suche herausgefunden, das es nichts mit dem Wireguard-Tunnel zu tun hat. Obwohl mir da schon auffiel, da es ungewöhnliche viele In Errors auf dem Interface gab:
Die Aufzeichnung ergab jedes Mal nur die Retransmission. Ansonsten nichts ungewöhnliches. Ich habe dann mit OpenVPN getestet der sich von intern nach extern verbindet, dort das selbe Verhalten. Sobald es durch die OPNsense geht, habe ich diese "Hänger".
Dann hatte ich im Verdacht, das eventuell die Firewall States killed, die im Idle sind. Aber das ist nicht der Fall. Meine SSH-Session ist verbunden seit drei Tagen und State ist established.
Sachen die ich jetzt schon ausprobiert habe testweise:
Die meisten Sache habe ich gefunden anhand von Recherche bei Leuten die das selbe Problem unter OPNsense hatten. Leider führte nichts zum ersehnten Erfolg.
Jemand noch eine andere Idee?
Gruß
ich habe seit einigen Tagen eine OPNsense 25.1.5_4 mit Wireguard und BGP am laufen. Soweit erstmal alles i.O.
Leider muss ich aber bei TCP Sessions wie SSH oder VNC feststellen, das es häufig zu TCP Retransmissions kommt. Das mag jetzt erstmal nicht ungewöhnlich sein, aber dabei hängt dann immer die jeweilige Session spürbar für wenige Milisekunden. Manchmal sogar Sekunden.
Die Abstände sind kurz hintereinander, manchmal nach 5 Minuten, dann auch mal wieder gleich 2 Minuten. In den Logs steht nichts auffälliges. Nach etlicher Zeit der Recherche ins Blaue, habe ich nach systematischer Suche herausgefunden, das es nichts mit dem Wireguard-Tunnel zu tun hat. Obwohl mir da schon auffiel, da es ungewöhnliche viele In Errors auf dem Interface gab:
Die Aufzeichnung ergab jedes Mal nur die Retransmission. Ansonsten nichts ungewöhnliches. Ich habe dann mit OpenVPN getestet der sich von intern nach extern verbindet, dort das selbe Verhalten. Sobald es durch die OPNsense geht, habe ich diese "Hänger".
Dann hatte ich im Verdacht, das eventuell die Firewall States killed, die im Idle sind. Aber das ist nicht der Fall. Meine SSH-Session ist verbunden seit drei Tagen und State ist established.
Sachen die ich jetzt schon ausprobiert habe testweise:
- MSS Clamping und MSS für LAN-Interface auf 1300 eingestellt > MTU Wireguard 1420 und LAN 1500
- Firewall>Settings>Advanced das "Static route Filtering" deaktiviert, da meine Vermutung war das dies die Buffer überlastet und somit zu Performance-Problemen führt
- PowerD HiAdaptive => deaktiviert => dann AC Mode Maximum
- Firewall>Settings>Advanced Profile auf conservative gestellt
- In den Tunables "net.inet.ip.intr_queue_maxlen" auf 2000 verdoppelt
Die meisten Sache habe ich gefunden anhand von Recherche bei Leuten die das selbe Problem unter OPNsense hatten. Leider führte nichts zum ersehnten Erfolg.
Jemand noch eine andere Idee?
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6909971359
Url: https://administrator.de/contentid/6909971359
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
23 Kommentare
Neuester Kommentar
Default, alles deaktiviert.
Eigentlich falsch! Wenn du NIC Hardware hast (z.B. Intel, Broadcom) die de facto Offloading supporten ist es kontraproduktiv das zu deaktivieren. Solltest du nicht tun bei HW NICs.Bei VMs sieht das ggf. anders aus ist aber ja dann nicht das Thema.
Ich habe zwei Verbindungen über Wireguard und über jede dieser spreche ich einen Neighbor an.
Das ist auch normal wenn du das bekannte Konzept aus deinem BGP Thread übernommen hast. Die Standorte terminieren ja 2 BGP Peers jeweils aus den beiden Hauptstandorten.Was nutzt du als BGP Peer Adressen? Idealerweise sollten das die statischen Wireguard IPs sein von den virtuellen Interfaces. Die sind immer physisch UP sofern der WG Prozess rennt. Flapping sollte dann nie passieren.
Nutzt du eBGP oder iBGP sprich unterschiedliche AS oder ein gemeinsames?
Das eigentliche Problem ist Packetloss im Wireguard-Tunnel.
Gut, da gilt es dann als erstes die Ursache zu klären. Das kann primär ja erstmal vieles sein.wenn ich einen zusätzlichen Hop dazwischen schalte
Wie meinst du das?? Einen zusätzlichen Routing Hop auf der Tunnelseite oder einen im lokalen Netz??Default frisch nach der Installation ist bei der OPNsense immer so hier:
Bei der pfSense ist es so bei der OPNsense aber nicht. Zumindestsn nicht beim aktuellen Installer.Das liegt daran das der eine auf Nummer sicher geht bei VM Installationen. Viele der virtuellen NICs konnen kein Offloading, ganz besonders kein LRO oder nicht richtig wie z.B. ja auch der Thread des Kollegen @MysticFoxDE hier deutlich zeigt.
Bei VM Installation also besser deaktivieren oder den richtigen virt. Adapter wählen.
Bei Hardware NICs mit entsprechender Ausstattung sollte man es aber immer aktivieren weil so deutlich Last von der Firewall CPU genommen wird.
eBGP, ich route zwischen verschiedenen AS.
Ggf. wäre der Einsatz von OSPF hier sinnvoller wegen des etwas einfacheren Split Horizon Handlings das hängt aber aber wieviel Netze und Endgeräte du hast und man müsste die Struktur kennen um das final sagen zu können.eine Verbindung geht über drei verschiedene AS
Was genau meinst du damit?? BGP ist, wie der Name schon sagt, ein "Border" Protokoll. Es sprechen also immer nur die AS direkt miteinander. "Über" geht gar nicht vom Design her.Es wäre sicher hilfreich wenn du das einmal skizzieren könntest damit man sich das vorstellen kann. Ich vermute das das Side Effects eines fehlerhaften BGP Setups ist. Wie gesagt, ggf. wäre OSPF in dem Design für dich die bessere Wahl.
OSPF wurde versucht, aber habe ich habe hier übergreifend zuviele Netze.
Könntest du ggf. mit Auto Summarization arbeiten? 300 Netze innerhalb einer Area wäre je nach Plattform noch tolerabel. Wenn du Standorte in separate Areas packst wäre es noch eleganter.mit bescheidenen Paint-3D-Skills:
Ist aber ok und macht das verständlich. Gibt es einen Grund warum du die unterschiedlichen Standorte in separate wg Interface splittest?
Das ist bei vielen Standorten wenig skalierbar und verkompliziert unnötig das Setup.
Du solltest lediglich 2 WG Interfaces auf den Hauptroutern haben wg0 und wg1 und dort jeweils ALLE primären Peers (wg0) und alle sekundären Peers (wg1) in einem gemeinsamen Netz betreiben.
Dieses Design ist deutlich schlanker und vermutlich auch beim Failover deutlich schneller weil du mit sehr viel weniger Netzen hantieren musst.
sonst würde die Verbindung über diesen direkt gehen
Das ist logisch, denn die redundante Route hat einen Hop mehr, ist also von den Costs schlechter.und gehen dann erst zu den Standorten.
Das wäre sehr verwunderlich, denn die direkte Route von Router 1 auf Router 0 wäre deutlich besser weil ein Hop weniger. 🤔Das zeigt das an deinem BGP Peering irgendetwas nicht stimmt. Router 1 und 2 müssen einen iBGP Peer haben! Ist der eingerichtet?
Wenn du dir die BGP Routing Tabelle ansiehst müssten deine direkten Routen auf die Standorte deutlich besser sein von den Costs und mit einem "*" davor versehen sein. Der "*" zeigt bei parallelen Routen immer die an die aktiv ist.
Das sieht so aus als ob du noch einen Fehler im Setup hast. Die falsche Routing Wahl und die Paket Verluste sprechen dafür. M.M. nach ist auch das WG IP Peering unglücklich gelöst das solltest du wie oben beschrieben machen.
Manche Standorte waren vorher mit IPsec VTI angebunden.
Ist ja per se nicht schlecht und bei IPsec eine gute Sache. Da aber WG in sich ja schon so eine Struktur über das Crypto Routing mitbringt ist es bei WG nocht nötig und in deinem Setup sogar kontraproduktiv.Bei dem Routing zwischen VTI und Wireguard-Interface, auf dem selben Host, läuft irgendwas schief.
Das kann man natürlich ohne deine dedizierte Konfig zu kennen schlecht beurteilen. Normal sollte das nicht passieren, denn der Sinn von VTIs ist ja gerade das sie sich wie klassische Netzwerk Interfaces verhalten.drei andere Standorte genauso angebunden habe und die machen solche Probleme nicht.
Rein logisch gesehen MUSS es dazu ja dann Unterschiede geben. Die gilt es zu finden... Du solltest aber zumindestens in der WG Umgebung die Tunnel Interfaces immer auf ein gemeinsames IP Netz setzen und bei den Clients dann mit einer /32er Hostmaske arbeiten bei den AllowedIPs. Damit hast du dann immer ein wasserdichtes Routing.
Wenn ich alle umgestellt habe, werde ich nochmal berichten.
Wir sind gespannt...! 😉
Wenn es das denn nun war, bitte deinen Thread hier dann auch als erledigt schliessen!!
Die Verbindungen werden von einigen Daemons immer wieder als Down markiert.
Welche Daemons meinst du hier? Den BGP Routing Prozess also, FRR?das selbe Spiel zwischen OPNsense und FRR unter Debian
Mit anderen Worten du hast noch einen Hostrechner der am BGP partizipiert?BFD hat einen deutlich kürzeren Keepalive, deshalb werden Link outages dort auch in sehr viel kürzeren Intervallen detektiert und BFD wird auch direkt auf die Routing Table wenn Links als down deklariert werden. Insofern ist das Verhalten verständlich.
Es zeigt dann aber in Summe das du Instabilitäten im Netz bei den Peer to Peer Links hast. Sprich die Tunnel fallen vermutlich zyklisch runter.
Dabei stellen sich dann ein paar Fragen:
- Warum arbeitest du mit BFD wenn du das gleiche besser mit den WG Tunnel Keepalives erreichen kannst? BFD ist primär ein Layer 2 Feature aber dein WG Umfeld ist vollständig geroutet. BFD macht nur Sinn wenn man im Layer 2 Medienbrüche im Pfad hat z.B. Switch Kaskaden, Medienwandler etc.
- Was die Tunnel anbetrifft musst du darauf achten ggf. mit Wireguard Keepalives zu arbeiten. Die BGP Keepalives sind im default 60 Sekunden so das dies nicht ausreicht, denn die UDP Session Timer in NAT Routern oder Firewalls liegt darunter. WG baut dann den Tunnel ab wenn kein Traffic da ist was ggf. ein Grund dieser kurzen Abbrüche bei dir sein kann. Ein Grund warum die Wireguard Keepalive Timer mit 25 Sekunden arbeiten.
Fakt ist das du Link Abbrüche hast, denn sonst hättest du diese Effekte nicht.
Ein Testaufbau zw. 2 per WG gekoppelten OPNsense wovon eine per BGP an 3 Cisco Router gekoppelt ist rennt hier tagelang völlig unauffällig ohne jegliche Unterbrechung. Alles mit den Default Timer Settings, ohne BFD und die Initiator OPNsense macht ein 25 Sek WG Tunnelkeepalive auf den Responder.
Das ist sehr verwunderlich, denn BGP basiert bekanntlich auf TCP hat also in sich auch eine Session Sicherheit. Bevor ein BGP Peer wegbricht muss also schon recht viel passieren. In der Regel eine längere Unterbrechung.
Wenn es stimmt was du sagst das die Tunnelverbindungen selber nicht betroffen sind, dann rennt die BGP Session ggf. über vermeintlich andere Routing Wege und nicht die die du dafür vorgesehen hast. Hier müsstest du ggf. mit den Peer Source und Destination Adressen nochmal wasserdicht Tracerouten oder die in den Peer Defintionen dediziert angeben.
Fakt ist ja das es irgendwo zu einem Verbindungsverlust kommt.
Wenn es stimmt was du sagst das die Tunnelverbindungen selber nicht betroffen sind, dann rennt die BGP Session ggf. über vermeintlich andere Routing Wege und nicht die die du dafür vorgesehen hast. Hier müsstest du ggf. mit den Peer Source und Destination Adressen nochmal wasserdicht Tracerouten oder die in den Peer Defintionen dediziert angeben.
Fakt ist ja das es irgendwo zu einem Verbindungsverlust kommt.
Hatte mein Testsetup hier wieder abgeschaltet und die Paket Counter am Tunnel Interface leider nicht überprüft. Ist aber kein Thema ist eh ne VM und die ist in 10 Sek. wieder online.
Ich checke das mal. Wenn der Tunnel selber nicht zusammenbricht, also bestehen bleibt dann können IN Errors nur vom sendenden Tunnelende auf der anderen Seite kommen.
Das könnten auch MTU Fehler sein, wenn du PPPoE als Internet Anschluss benutzt:
https://github.com/opnsense/plugins/issues/2690
https://forum.opnsense.org/index.php?topic=26056.0
https://www.hitoha.moe/wireguard-mtu-over-pppoe/
Korrekt wäre bei PPPoE Anschlüssen dann eine Tunnel MTU von minimal 1412 und man müsste die Tunnel MTU anpassen weil es sonst zu Drops bei größeren Framesizes kommt was den oben erhöhten Wert dann erklärt. Das wäre in jedem Falle einen Test wert. Damit die MTU korrekt übernommen wird ist ein Reboot erforderlich.
Ich checke das mal. Wenn der Tunnel selber nicht zusammenbricht, also bestehen bleibt dann können IN Errors nur vom sendenden Tunnelende auf der anderen Seite kommen.
Das könnten auch MTU Fehler sein, wenn du PPPoE als Internet Anschluss benutzt:
https://github.com/opnsense/plugins/issues/2690
https://forum.opnsense.org/index.php?topic=26056.0
https://www.hitoha.moe/wireguard-mtu-over-pppoe/
Korrekt wäre bei PPPoE Anschlüssen dann eine Tunnel MTU von minimal 1412 und man müsste die Tunnel MTU anpassen weil es sonst zu Drops bei größeren Framesizes kommt was den oben erhöhten Wert dann erklärt. Das wäre in jedem Falle einen Test wert. Damit die MTU korrekt übernommen wird ist ein Reboot erforderlich.
VRRP(-E) oder HSRP passiviert nicht ein komplettes Gerät sondern ist lediglich eine Technik für eine Gateway Virtualisierung. Das L3 Gechäft (Forwarding Table) ist dabei immer unberührt und bleibt bestehen. (Siehe auch hier). Gut, klassisches VRRP ggf. nicht so, weil es kein Local Forwarding kann
Etwas Unterschied gibts also schon.
Rein Interesse halber: Was ist der Grund für dich BGP und nicht OSPF zu verwenden? Kürzere Failoverzeiten und ECMP würden doch eher für OSPF sprechen...
Etwas Unterschied gibts also schon.
Rein Interesse halber: Was ist der Grund für dich BGP und nicht OSPF zu verwenden? Kürzere Failoverzeiten und ECMP würden doch eher für OSPF sprechen...