pfSense på Virtio: TCP går i stå, indtil offload slås fra
En virtualiseret pfSense svarer på ping og går derefter i stå ved store TCP-overførsler. Slå virtio-stien til kontrolsum-offload fra, og mål omkostningen i stedet for at skifte netværkskort.
En klient rapporterer, at tunnelen opretter forbindelse, at ping svarer, at login-siden indlæses, og at overførslen derefter fryser på samme punkt ved hvert forsøg. Det mønster siger allerede meget: tilgængelighed virker, og vedvarende gennemstrømning ikke. Før du åbner firewalled, skal du finde ud af, om VPN’en overhovedet deltager i fejlen. Send stor TCP gennem samme gateway uden tunnel på vejen; hvis den også fryser, var OpenVPN aldrig involveret.
En pfSense-gæst med et virtio-netværkskort har en meget god grund til at fejle præcis i den form.
Små pakker slipper igennem, store TCP-overførsler hænger
Håndtryk, DNS-svar og ICMP-ekkoer er små og slipper normalt igennem. Vedvarende overførsler tvinger gæsten til at segmentere, og det er her, en beskadiget offload-sti kommer til syne. Fejlen behøver ikke være symmetrisk: udgående trafik kan være ren, mens indgående tabes, eller omvendt, så en bruger kan logge ind og derefter gå i stå ved det første store svar. Fordi den samme klient fungerer gennem en anden gateway, får den nyeste komponent skylden.
Test derfor gatewayen uden tunnelen. En LAN-til-WAN-download, der er stor nok til at køre i et par sekunder, er tilstrækkelig, og den skal udføres før ændringer af indstillinger, så sammenligningen bagefter betyder noget.
Hvad offload egentlig lover
virtio er paravirtualiseret: vært og gæst deler arbejdet, værten annoncerer kontrolsum- og segmenteringsevner og forventer, at gæsten færdiggør det, den startede. Hvis gæstens stak ikke gør det, forlader rammerne værten med ufuldstændige kontrolsummer eller kasseres af værten. En emuleret E1000 tilbyder en enklere og langsommere model, hvor problemet forsvinder uden en enkelt ændring i pfSense. Forhandling af evner sker per enhed, hvilket forklarer, hvorfor én gæst kører i månedsvis, mens dens genopbyggede tvilling fejler på dag et.
Det forhandlede sæt afhænger af hypervisor-versionen og den valgte netværkskortmodel, ikke kun af den konfiguration, du importerede.
Én afkrydsningsboks beholder virtio
I pfSense-grænsefladen indeholder System, derefter Avanceret, derefter Netværk en afkrydsningsboks ved navn Deaktiver hardware-kontrolsum-offload. Når den er sat, beregner gæsten kontrolsummer i software, hvilket svarer til, hvad FreeBSD-stakken bag pfSense forventer af en paravirtual enhed. To relaterede valgmuligheder på samme side dækker hardware-TCP-segmenteringsoffload og hardware-store-modtag-offload. Grib efter dem, når håndtryk lykkes, men store overførsler ikke gør.
Lad netværkskortet være virtio, mens du foretager ændringen. At skifte til E1000 brænder CPU på hver pakke i hele VM’ens levetid og skjuler konfigurationsproblemet for enhver, der arver værten, hvilket er en dårligere handel end en lidt langsommere, men forudsigelig datasti.
Mål den omkostning, du netop har accepteret
Software-kontrolsummer flytter arbejde ind i gæsten, så mål gennemstrømningen bagefter i stedet for at antage, at det ikke koster noget. På en lille VM er straffen reel, men den er synlig og stabil, i modsætning til et tavst tab. Sammenlign grænsefladens fejltællere og gæstens kernellog før og efter. En hypervisor, der filtrerer broen, er en separat fejl med andre beviser, og ingen offload-flag kurérer den.
Ændr én ting per test, og skriv menustien, den boks du satte kryds i, og det tal, du målte, ned. Den, der møder den næste genopbyggede gæst, vil have alle tre.
Andre BSD-baserede firewalls tilbyder en tilsvarende kontrol under deres egne grænsefladeindstillinger, så ræsonnementet rejser, selv når menustien ikke gør.