OpenVPN na PPPoE: znižati link-mtu, tun-mtu ali mssfix?
Ping deluje, a velike strani se zataknejo na povezavi PPPoE ali DS-Lite. Odločite se med link-mtu, tun-mtu in mssfix z merjenjem poti, ne z ugibanjem.
Pingi odgovorijo, DNS razreši, vsaka stran, ki potrebuje poln segment, pa se ustavi. Na povezavi, ki doda svoje ovijanje, pot tiho izgubi nekaj deset bajtov proračuna, in profil, napisan za čist Ethernet, še naprej zahteva pakete, ki jih vrstica ne more prenesti. Povezava ni počasna; zavrže prav tiste pakete, ki so pomembni.
Tri možnosti lahko to odpravijo in delujejo na različnih plasteh. Izbor napačne bodisi ne naredi ničesar bodisi naredi tunel krhak na nov način, zato se izbira začne s tem, kar pot v resnici podpira.
Tri gumbi, tri različne plasti
link-mtu je zunanji proračun: šifrirana koristna obremenitev plus glava OpenVPN, glava UDP in zunanja glava IP. Opisuje, kaj zapusti stroj, zato je to število, ki ga omejuje fizična pot.
tun-mtu je notranji proračun: vmesnik, ki ga vidi vaš promet. Natanko za stroške tunela je večji od tega, kar pot lahko prenese, in OpenVPN ga običajno izpelje, namesto da bi vas silil, da ga nastavite.
mssfix je povsem drug mehanizem. Prepisuje največjo velikost segmenta, objavljeno med rokovanji TCP, da si partnerji TCP izberejo segmente, ki se po ovijanju prilegajo. Ne spreminja MTU vmesnika in ne vpliva na UDP.
Če link-mtu nastavite izrecno, OpenVPN odšteje svoje stroške, da izpelje notranji MTU. Ti stroški niso fiksna konstanta; odvisni so od šifre in preverjanja pristnosti, zato je vrednost, kopirana s foruma, lahko napačna v drugem profilu. Če nastavite link-mtu in tun-mtu, klientu daste dve nasprotujoči si navodili.
Izmerite pot, preden izberete katero koli število
Merite s fizičnega vmesnika, ne iz notranjosti tunela, in ne pozabite, da ping poroča o koristni obremenitvi, ne o velikosti paketa. Preden obremenitev primerjate z okvirjem 1500 bajtov, dodajte 28 bajtov za glavi IPv4 in ICMP, in imejte ta popravek v mislih, ko partner poroča drugo število.
V odjemalcu Linux ping -M do -s 1472 prepoveduje drobljenje in ne uspe, če je paket prevelik. Zmanjšujte obremenitev, dokler ne gre skozi, nato dodajte 28, da dobite MTU poti. PPPoE stane 8 bajtov, zato je 1492 v DSL običajno. DS-Lite in nekatere mobilne poti staneta 40 ali več, odgovor pa je običajno nižji, kot nakazuje nazivna hitrost povezave.
Če vsaka velikost pinga uspe, veliki prenosi pa se še vedno ustavljajo, sumite na črno luknjo in ne na preprosto omejitev velikosti. Sporočilo ICMP o potrebnem drobljenju se nekje na poti filtrira, zato se pošiljatelj nikoli ne nauči zmanjševati, in to opazijo le tokovi, ki potrebujejo velik segment.
Najprej omejite TCP, nato skrčite tunel
Rokovanja TCP so edina stvar, ki se je mssfix dotakne, zato je običajno najmanj vsiljiv nadzor, ki ga velja poskusiti prvi. Nastavite ga malo pod dejanski proračun poti, pošljite isto vrednost s strežnika, da se oba konca strinjata, in znova preizkusite velik prenos. Če se zastoj odpravi, je bila težava velikost segmenta TCP, in ničesar drugega ni treba spremeniti.
Znižajte notranji MTU, kadar prizadeti promet ni TCP. Storitev UDP, tunel v tunelu ali aplikacija, ki pošilja datagrame polne velikosti, bo po omejitvi MSS še naprej neuspešna, ker nič ne prepiše velikosti njenih paketov. V tem primeru zmanjšajte tun-mtu ali nastavite link-mtu in pustite odjemalcu, da izpelje notranjo vrednost, nikoli pa obojega.
Ne posegajte po stari možnosti drobljenja. Razdelila je pakete znotraj tunela, dodala stroške in je bila opuščena iz dobrih razlogov; sodobni OpenVPN pričakuje natančen opis poti.
Zakaj majhne meritve še vedno delujejo
Poizvedbe DNS, odmevi ICMP in rokovanja TCP so vsi daleč pod velikostjo, ki ne uspe. Tunel zato v vsakem hitrem preizkusu izgleda zdrav, medtem ko rokovanja TLS in odgovori HTTP tiho ne uspejo. Prav ta kombinacija, delujoč traceroute in brskalnik, ki se ustavi ob prvem velikem odgovoru, je znak, ki ga je treba iskati. Preden segate po novem profilu, segajte po meritvi polne velikosti.
Preverite s prometom, ki ni uspel. Naložite veliko stran, pošljite datagram UDP polne velikosti, če je to prizadeta storitev, in ponovite z drugega odjemalca na drugi povezavi. Zapišite izmerjeni MTU poti in izbrano vrednost, sicer bo naslednja oseba, ki se dotakne profila, to število obravnavala kot samovoljno.
Nikoli ne znižajte notranjega MTU pod 1280, ko IPv6 teče čez tunel, ker je to najmanjša vrednost, ki jo mora prenesti vsaka povezava IPv6. Manjši MTU je dejstvo o poti, ne nastavitev delovanja, ki bi jo uglaševali po občutku.