Ein klient melder at tunnelen koplar til, at ping svarar, at innloggingssida lastar, og at overføringa deretter frys på same punkt ved kvart forsøk. Det mønsteret seier allereie mykje: tilgjenge fungerer, og vedvarande gjennomstrauming gjer det ikkje. Før du opnar brannmuren, finn ut om VPN-en i det heile deltek i feilen. Send stor TCP gjennom same gateway utan tunnel i bana; om den også frys, var OpenVPN aldri involvert.

Ein pfSense-gjest med eit virtio-nettverkskort har ein særs god grunn til å feile nøyaktig i den forma.

Små pakkar slepp gjennom, store TCP-overføringar heng

Handtrykk, DNS-svar og ICMP-ekko er små og slepp vanlegvis gjennom. Vedvarande overføringar tvingar gjesten til å segmentere, og det er der ei skadd offload-bane dukkar opp. Feilen treng ikkje vere symmetrisk: utgåande trafikk kan vere rein medan inngåande blir droppa, eller omvendt, slik at ein brukar kan logge inn og deretter stoppe på det første store svaret. Fordi den same klienten verkar gjennom ein annan gateway, får den nyaste komponenten skulda.

Test difor gatewayen utan tunnelen. Ei LAN-til-WAN-nedlasting som er stor nok til å gå i nokre sekund er tilstrekkeleg, og ho må gjerast før noka innstilling blir endra, slik at samanlikninga etterpå tyder noko.

Kva offload eigentleg lovar

virtio er paravirtualisert: vert og gjest deler arbeidet, verten annonserer kontrollsum- og segmenteringsevner og ventar at gjesten fullfører det han starta. Om stacken til gjesten ikkje gjer det, forlèt rammer verten med ufullstendige kontrollsummar eller blir droppa av verten. Ein emulert E1000 tilbyr ein enklare og langsammare modell der problemet forsvinn utan ei einaste endring i pfSense. Forhandling av evner skjer per eining, noko som forklarar kvifor ein gjest går i månadsvis medan den gjenoppbygde tvillingen feilar på dag éin.

Settet som blir forhandla fram, avheng av hypervisorversjonen og den valde nettverkskortmodellen, ikkje berre av konfigurasjonen du importerte.

Éin avkryssingsboks held virtio

I pfSense-grensesnittet inneheld System, deretter Avansert, deretter Nettverk ein avkryssingsboks kalla Deaktiver maskinvare-offload for kontrollsum. Når han er sett, reknar gjesten kontrollsummar i programvare, noko som svarar til det FreeBSD-stacken bak pfSense ventar av eit paravirtualt apparat. To nærskylde alternativ på same side dekkjer maskinvare-TCP-segmenteringsoffload og maskinvare-offload for stor mottak. Grip etter dei når handtrykk lukkast, men store overføringar ikkje gjer det.

Lat nettverkskortet vere virtio medan du gjer endringa. Å byte til E1000 brenn CPU på kvar pakke gjennom heile levetida til VM-en og skjuler konfigurasjonsproblemet for alle som arvar verten, noko som er eit dårlegare byte enn ei litt langsamare, men føreseieleg databane.

Mål kostnaden du nettopp har godtatt

Programvarebaserte kontrollsummar flyttar arbeid inn i gjesten, så mål gjennomstrauminga etterpå i staden for å gå ut frå at det ikkje kostar noko. På ein liten VM er straffa reell, men ho er synleg og stabil, i motsetnad til eit stille tap. Samanlikn feilteljarane til grensesnittet og kjerneloggen til gjesten før og etter. Ein hypervisor som filtrerer brua er ein eigen feil med andre bevis, og ingen offload-flagg kurerer han.

Endre éin ting per test og skriv ned menystien, boksen du kryssa av og talet du målte. Den som møter den neste gjenoppbygde gjesten, vil ha alle tre.

Andre BSD-baserte brannmurar tilbyr tilsvarande kontroll under sine eigne grensesnittinnstillingar, så resonnementet reiser sjølv når menystien ikkje gjer det.

Relaterte artiklar