OpenVPN mssfix: zašto jedan klijent staje kod velikih prijenosa
mssfix prepisuje veličinu TCP segmenta koja se objavljuje unutar tunela. Ne mijenja veličinu UDP-a, a vrijednost znači samo ono što kaže vaša verzija.
Jedan laptop staje kod slanja kroz tunel dok svaki drugi uređaj na istom serveru nastavlja raditi. Taj obrazac ukazuje na jednu putanju, a ne na konfiguraciju servera, i to je uobičajen ulaz u pitanje mssfixa. Opcija može pomoći, ali samo za TCP veze koje zaista prepisuje. Poznavanje njenog dometa sprječava vas da mijenjate ispravan server kako biste spasili jednog klijenta.
Šta opcija prepisuje
mssfix uređuje maksimalnu veličinu segmenta objavljenu u TCP rukovanjima koja prolaze kroz tunel, tako da pošiljalac bira segmente koji stanu u enkapsulirani budžet. Djeluje na rukovanje, što znači da veza otvorena prije promjene zadržava vrijednost o kojoj se dogovorila.
Ne smanjuje UDP datagrame i ne postavlja MTU tunela. Dva različita problema daju isti simptom: TCP pošiljalac koji ignorira ograničenje putanje i putanja koja tiho odbacuje velike pakete bilo koje veličine. mssfix rješava prvi i ne čini ništa za drugi.
Ta razlika objašnjava razočaravajuće eksperimente. Postavljanje manje vrijednosti na putanji s crnom rupom mijenja veličinu segmenta, ali ne i odbacivanje koje slijedi, pa prijenos pada na drugoj tački.
Domet je TCP unutar tunela
Prepisuje se samo TCP saobraćaj. QUIC sesija, igra ili aplikacija koja šalje velike UDP datagrame zadržat će vlastite veličine paketa, a ako su ti prijenosi oni koji staju, ispravka pripada radije MTU-u tunela ili putanje. Pročitajte koji protokol koristi neuspjeli prijenos prije nego posegnete za TCP opcijom, jer pogrešan sloj ima vlastitu ispravku.
Smjer je također važan. Postavka klijenta utječe na saobraćaj koji taj klijent šalje u tunel, dok server pokriva tokove koje prosljeđuje prema klijentima. Ako staju samo dolazna preuzimanja, vrijednost na strani klijenta nije cijela priča.
Broj i ključna riječ nisu prenosivi
OpenVPN 2.6 zajednice prihvata opcionalnu ključnu riječ nakon vrijednosti. Uz mtu broj opisuje veličinu vanjskog paketa uključujući IP i UDP zaglavlja; bez nje argument slijedi drugačiju računovodstvenu konvenciju. Zato red kopiran između verzija ne opisuje isti budžet paketa. Provjerite stranicu priručnika koja dolazi s buildom koji stvarno pokrećete, umjesto tutorijala za drugo izdanje.
Sintaksa izgleda ovako:
mssfix 1400 mtu
Tretirajte 1400 kao rezervisano mjesto, a ne kao preporuku za vašu putanju. Izvedite vrijednost iz izmjerene putanje i enkapsulacije koja se stvarno koristi i zapamtite da klijenti na starijim verzijama ili drugim implementacijama mogu odbiti ili drugačije protumačiti ključnu riječ.
Prvo potvrdite na jednom klijentu
Izmjerite putanju s neispravne mašine prije nego bilo šta promijenite. Korisni teret koji putanja može nositi bez fragmentacije jeste broj koji tražite:
ping -M do -s 1472 10.8.0.1
ping -M do -s 1400 10.8.0.1
Prva sonda staje u paket od 1500 bajtova kada se dodaju 28 bajtova zaglavlja. Ako ne uspije s greškom fragmentacije, a manja uspije, upotrebljiva veličina je negdje između njih, a trošak tunela se odbija odozgo.
Zatim ponovite prijenos koji je stao, na novoj vezi, i uporedite. Ako se jedan klijent poboljša dok ostali ostanu netaknuti, pronašli ste domet problema. Ako staju svi klijenti, vrijednost na strani servera je ona koju treba pregledati. Nijedan od dva rezultata ne opravdava promjenu na hardveru koji nikada nije bio na neispravnoj putanji.