Een klant meldt dat de tunnel verbinding maakt, een ping antwoordt, de inlogpagina laadt en de overdracht dan bij elke poging op hetzelfde punt bevriest. Dat patroon zegt al veel: bereikbaarheid werkt en blijvende doorvoer niet. Voordat u de firewall opent, moet u nagaan of de VPN überhaupt bij de storing betrokken is. Stuur grote TCP door dezelfde gateway zonder tunnel in het pad; als dat ook bevriest, was OpenVPN nooit betrokken.

Een pfSense-gast met een virtio-netwerkkaart heeft een zeer goede reden om precies in die vorm te falen.

Kleine pakketten komen door, grote TCP blijft hangen

Handshakes, DNS-antwoorden en ICMP-echo’s zijn klein en komen meestal door. Blijvende overdrachten dwingen de gast te segmenteren, en daar komt een beschadigd offload-pad naar boven. De fout hoeft niet symmetrisch te zijn: uitgaand verkeer kan schoon zijn terwijl inkomend wegvalt, of andersom, zodat een gebruiker kan inloggen en dan bij het eerste grote antwoord blijft hangen. Omdat dezelfde client via een andere gateway werkt, krijgt de nieuwste component de schuld.

Test de gateway dus zonder de tunnel. Een LAN-naar-WAN-download die groot genoeg is om een paar seconden te lopen is voldoende, en die moet gebeuren vóór enige instellingswijziging, zodat de vergelijking daarna iets betekent.

Wat offload werkelijk belooft

virtio is paravirtueel: host en gast delen het werk, de host adverteert checksum- en segmenteringsmogelijkheden en verwacht dat de gast afmaakt wat hij begon. Als de stack van de gast dat niet doet, verlaten frames de gast met onvolledige checksums of worden ze door de host weggegooid. Een geëmuleerde E1000 biedt een eenvoudiger en langzamer model waarin het probleem verdwijnt zonder één wijziging in pfSense. Onderhandeling over mogelijkheden gebeurt per apparaat, wat verklaart waarom de ene gast maanden draait en zijn herbouwde tweeling op dag één faalt.

De onderhandelde set hangt af van de hypervisorversie en het gekozen netwerkkaartmodel, niet alleen van de configuratie die u importeerde.

Eén selectievakje houdt virtio

In de pfSense-interface bevat Systeem, dan Geavanceerd, dan Netwerk een selectievakje met de naam Hardware-checksum-offload uitschakelen. Als u het aanvinkt, berekent de gast checksums in software, wat overeenkomt met wat de FreeBSD-stack achter pfSense van een paravirtueel apparaat verwacht. Twee verwante opties op dezelfde pagina dekken hardware-TCP-segmenteringsoffload en hardware-offload voor grote ontvangst. Grijp daarnaar wanneer handshakes slagen maar grote overdrachten niet.

Laat de netwerkkaart virtio terwijl u de wijziging doorvoert. Overstappen op E1000 verbrandt CPU bij elk pakket voor de hele levensduur van de VM en verbergt het configuratieprobleem voor iedereen die de host erft, wat een slechtere ruil is dan een iets langzamer maar voorspelbaar datapad.

Meet de kosten die u zojuist hebt aanvaard

Softwarematige checksums verplaatsen werk naar de gast, dus meet daarna de doorvoer in plaats van aan te nemen dat het niets kost. Op een kleine VM is de straf reëel, maar zichtbaar en stabiel, anders dan een stil verlies. Vergelijk fouttellers van de interface en het kernellog van de gast voor en na. Een hypervisor die de bridge filtert is een aparte fout met ander bewijs, en geen enkele offload-vlag geneest die.

Wijzig één ding per test en noteer het menupad, het vakje dat u aanvinkte en het getal dat u mat. Wie de volgende herbouwde gast tegenkomt, wil alle drie.

Andere op BSD gebaseerde firewalls bieden een gelijkwaardige controle onder hun eigen interface-instellingen, dus de redenering reist ook wanneer het menupad dat niet doet.

Gerelateerde artikelen