OpenVPN per PPPoE: mažinti link-mtu, tun-mtu ar mssfix?
Ping veikia, bet dideli puslapiai stringa PPPoE arba DS-Lite jungtyje. Nuspręskite tarp link-mtu, tun-mtu ir mssfix išmatavę kelią, o ne spėliodami.
Ping atsako, DNS išsprendžia, o kiekvienas puslapis, kuriam reikia viso segmento, stringa. Jungtyje, kuri prideda savo įvyniojimą, kelias tyliai praranda kelias dešimtis baitų biudžeto, o profilis, parašytas švariam Ethernet, ir toliau prašo paketų, kurių linija negali pernešti. Ryšys nėra lėtas; jis išmeta būtent tuos paketus, kurie svarbūs.
Trys parinktys gali tai ištaisyti, ir jos veikia skirtinguose sluoksniuose. Pasirinkus netinkamą, arba nieko neįvyksta, arba tunelis tampa trapus nauju būdu, todėl pasirinkimas prasideda nuo to, ką kelias iš tikrųjų palaiko.
Trys rankenėlės, trys skirtingi sluoksniai
link-mtu yra išorinis biudžetas: užšifruota naudingoji apkrova plius OpenVPN antraštė, UDP antraštė ir išorinė IP antraštė. Jis aprašo, kas išeina iš mašinos, todėl tai yra skaičius, kurį riboja fizinis kelias.
tun-mtu yra vidinis biudžetas: sąsaja, kurią mato jūsų srautas. Jis yra lygiai tunelio pridėtine verte didesnis už tai, ką kelias gali pernešti, ir OpenVPN paprastai jį išveda, o ne verčia jus nustatyti.
mssfix yra visiškai kitas mechanizmas. Jis perrašo didžiausią segmento dydį, skelbiamą TCP rankos paspaudimo metu, kad TCP partneriai pasirinktų segmentus, kurie telpa po įvyniojimo. Jis nekeičia sąsajos MTU ir neturi jokio poveikio UDP.
Jei link-mtu nustatysite aiškiai, OpenVPN atims savo pridėtinę vertę, kad išvestų vidinį MTU. Ta pridėtinė vertė nėra pastovi; ji priklauso nuo šifro ir autentifikavimo, todėl forume nukopijuota reikšmė gali būti neteisinga kitame profilyje. Nustatę ir link-mtu, ir tun-mtu, klientui duosite du prieštaringus nurodymus.
Išmatuokite kelią prieš pasirinkdami bet kokį skaičių
Matuokite iš fizinės sąsajos, o ne tunelio viduje, ir atminkite, kad ping praneša apie naudingąją apkrovą, o ne paketo dydį. Pridėkite 28 baitus IPv4 ir ICMP antraštėms, prieš lygindami apkrovą su 1500 baitų kadru, ir turėkite šią pataisą omenyje, kai partneris praneša kitą skaičių.
Linux kliente ping -M do -s 1472 draudžia fragmentavimą ir nepavyksta, jei paketas per didelis. Mažinkite apkrovą, kol jis praeis, tada pridėkite 28, kad gautumėte kelio MTU. PPPoE kainuoja 8 baitus, todėl DSL 1492 yra normalu. DS-Lite ir kai kurie mobilieji keliai kainuoja 40 ar daugiau, o atsakymas paprastai būna mažesnis, nei leidžia manyti vardinis ryšio greitis.
Jei kiekvienas ping dydis pavyksta, bet dideli perdavimai vis tiek stringa, įtarkite juodąją skylę, o ne paprastą dydžio ribą. ICMP pranešimas apie būtiną fragmentavimą yra filtruojamas kažkur kelyje, todėl siuntėjas niekada neišmoksta mažinti, ir tai pastebi tik srautai, kuriems reikia didelio segmento.
Pirmiausia apribokite TCP, paskui sumažinkite tunelį
TCP rankos paspaudimas yra vienintelis dalykas, kurį mssfix liečia, todėl jis paprastai yra mažiausiai trikdantis valdiklis, kurį verta išbandyti pirmiausia. Nustatykite jį šiek tiek žemiau tikrojo kelio biudžeto, nusiųskite tą pačią reikšmę iš serverio, kad abu galai sutartų, ir dar kartą išbandykite didelį atsisiuntimą. Jei strigimas išnyksta, problema buvo TCP segmento dydis, ir nieko kito keisti nereikia.
Sumažinkite vidinį MTU, kai paveiktas srautas nėra TCP. UDP paslauga, tunelis tunelio viduje arba programa, siunčianti viso dydžio datagramas, ir toliau nepavyks po MSS apribojimo, nes niekas neperrašo jos paketo dydžio. Tokiu atveju sumažinkite tun-mtu arba nustatykite link-mtu ir leiskite klientui išvesti vidinę reikšmę, bet niekada abiejų.
Nesinaudokite senąja fragmentavimo parinktimi. Ji skaidė paketus tunelio viduje, pridėjo pridėtinės vertės ir dėl gerų priežasčių buvo atsisakyta; šiuolaikinis OpenVPN tikisi tikslaus kelio aprašymo.
Kodėl maži bandymai vis dar veikia
DNS užklausos, ICMP aidai ir TCP rankos paspaudimas yra daug mažesni už nepavykstantį dydį. Todėl tunelis kiekviename greitame bandyme atrodo sveikas, o TLS rankos paspaudimas ir HTTP atsakymai tyliai nepavyksta. Būtent šis derinys, veikiantis traceroute ir naršyklė, stringanti prie pirmo didelio atsakymo, yra požymis, kurio reikia ieškoti. Imkitės viso dydžio bandymo, prieš imdamiesi naujo profilio.
Patikrinkite su srautu, kuris nepavyko. Atsisiųskite didelį puslapį, nusiųskite viso dydžio UDP datagramą, jei tai yra paveikta paslauga, ir pakartokite iš antro kliento kitoje jungtyje. Užrašykite išmatuotą kelio MTU ir pasirinktą reikšmę, nes priešingu atveju kitas žmogus, kuris palies profilį, laikys šį skaičių savavališku.
Niekada nenuleiskite vidinio MTU žemiau 1280, kai IPv6 eina tuneliu, nes tai yra minimumas, kurį turi pernešti kiekviena IPv6 jungtis. Mažesnis MTU yra faktas apie kelią, o ne našumo nustatymas, derinamas pagal pojūtį.