OpenVPN na PPPoE: smanjiti link-mtu, tun-mtu ili mssfix?
Ping radi, ali velike stranice zapinju na PPPoE ili DS-Lite vezi. Odaberite između link-mtu, tun-mtu i mssfix mjerenjem puta, a ne nagađanjem.
Ping odgovara, DNS se razrješava, a svaka stranica kojoj treba segment pune veličine zapinje. Na vezi koja dodaje vlastitu inkapsulaciju, put tiho gubi nekoliko desetina bajtova budžeta, a profil napisan za čist Ethernet i dalje traži pakete koje linija ne može prenijeti. Veza nije spora; ona odbacuje upravo pakete koji su važni.
Tri opcije mogu to popraviti i one rade na različitim slojevima. Odabir pogrešne ili ne radi ništa, ili čini tunel krhkim na nov način, pa odabir počinje onim što put zapravo podržava.
Tri dugmeta, tri različita sloja
link-mtu je vanjski budžet: šifrirani korisni teret plus OpenVPN zaglavlje, UDP zaglavlje i vanjsko IP zaglavlje. Opisuje šta napušta mašinu i zato je to broj koji fizički put ograničava.
tun-mtu je unutrašnji budžet: interfejs koji vaš saobraćaj vidi. Veći je od onoga što put može prenijeti tačno za tunelski overhead, a OpenVPN ga obično izvodi umjesto da vas tjera da ga postavite.
mssfix je sasvim drugi mehanizam. Prepisuje maksimalnu veličinu segmenta objavljenu tokom TCP rukovanja, pa TCP partneri biraju segmente koji se uklapaju nakon inkapsulacije. Ne mijenja MTU interfejsa i nema uticaja na UDP.
Ako link-mtu postavite izričito, OpenVPN oduzima vlastiti overhead da izvede unutrašnji MTU. Taj overhead nije fiksna konstanta; zavisi od šifre i autentifikacije, zato vrijednost kopirana s forumske objave može biti pogrešna na drugom profilu. Postavljanje i link-mtu i tun-mtu daje klijentu dvije proturječne upute.
Izmjerite put prije nego odaberete bilo koji broj
Mjerite s fizičkog interfejsa, ne iz unutrašnjosti tunela, i zapamtite da ping prijavljuje korisni teret, a ne veličinu paketa. Dodajte 28 bajtova za IPv4 i ICMP zaglavlja prije nego uporedite teret s okvirom od 1500 bajtova, i imajte tu korekciju na umu kada partner prijavi drugi broj.
Na Linux klijentu ping -M do -s 1472 zabranjuje fragmentaciju i ne uspijeva ako je paket prevelik. Smanjujte teret dok ne prođe, zatim dodajte 28 da dobijete MTU puta. PPPoE košta 8 bajtova, pa je 1492 normalno na DSL-u. DS-Lite i neki mobilni putevi koštaju 40 ili više, a odgovor je obično niži nego što nominalna brzina veze sugerira.
Ako svaka veličina pinga uspije, ali veliki prijenosi i dalje zapinju, posumnjajte na crnu rupu, a ne na jednostavno ograničenje veličine. ICMP poruka da je potrebna fragmentacija filtrira se negdje na putu, pa pošiljalac nikada ne nauči da se smanji, a primjećuju to samo tokovi kojima treba veliki segment.
Prvo stisnite TCP, zatim smanjite tunel
TCP rukovanja su jedino čega se mssfix dotiče, što ga obično čini najmanje ometajućom kontrolom koju treba prvo isprobati. Postavite ga malo ispod stvarnog budžeta puta, pošaljite istu vrijednost sa servera da se oba kraja slože i ponovno testirajte veliko preuzimanje. Ako zastoj nestane, problem je bila veličina TCP segmenta i ništa drugo ne treba mijenjati.
Smanjite unutrašnji MTU kada pogođeni saobraćaj nije TCP. UDP usluga, tunel unutar tunela ili aplikacija koja šalje datagrame pune veličine nastavit će ne uspijevati nakon MSS stiskanja jer ništa ne prepisuje veličinu njenog paketa. Smanjite tun-mtu za taj slučaj ili postavite link-mtu i pustite klijenta da izvede unutrašnju vrijednost, ali nikada oboje.
Ne posežite za starom opcijom fragmentacije. Dijelila je pakete unutar tunela, dodavala overhead i ukinuta je s dobrim razlogom; savremeni OpenVPN očekuje da se put umjesto toga opiše tačno.
Zašto mali testovi i dalje rade
DNS upiti, ICMP eho i TCP rukovanja daleko su ispod veličine na kojoj dolazi do zastoja. Tunel zato izgleda zdrav u svakom brzom testu, dok TLS rukovanja i HTTP odgovori tiho ne uspijevaju. Ta kombinacija, traceroute koji radi i pregledač koji zapinje na prvom velikom odgovoru, je potpis koji treba tražiti. Posegnite za testom pune veličine prije nego posegnete za novim profilom.
Provjerite saobraćajem koji nije uspio. Dohvatite veliku stranicu, pošaljite UDP datagram pune veličine ako je to pogođena usluga, i ponovite s drugog klijenta na drugoj vezi. Zabilježite izmjereni MTU puta i vrijednost koju ste odabrali, jer će sljedeća osoba koja dira profil inače broj smatrati proizvoljnim.
Nikada ne spuštajte unutrašnji MTU ispod 1280 kada IPv6 ide kroz tunel, jer je to minimum koji svaka IPv6 veza mora nositi. Manji MTU je činjenica o putu, a ne postavka performansi koju treba podešavati osjećajem.