OpenVPN на PPPoE: смањити link-mtu, tun-mtu или mssfix?
Ping ради, али велике странице се заглављују на PPPoE или DS-Lite вези. Одлучите између link-mtu, tun-mtu и mssfix мерећи путању, а не нагађајући.
Ping одговара, DNS решава, и свака страница којој је потребан пун сегмент се заглави. На вези која додаје сопствену инкапсулацију, путања тихо губи неколико десетина бајтова буџета, и профил написан за чист Ethernet наставља да тражи пакете које линија не може да носи. Веза није спора; она одбацује тачно оне пакете који су важни.
Три опције могу то да исправе, и оне делују на различитим слојевима. Избор погрешне или не чини ништа или чини тунел крхким на нов начин, зато избор почиње оним што путања заиста подржава.
Три дугмета, три различита слоја
link-mtu је спољашњи буџет: шифровани терет плус заглавље OpenVPN, заглавље UDP и спољашње IP заглавље. Описује шта напушта машину, и зато је то број који ограничава физичка путања.
tun-mtu је унутрашњи буџет: интерфејс који види ваш саобраћај. Већи је од онога што путања може да носи тачно за трошак тунела, и OpenVPN га обично изводи сам, уместо да вас тера да га поставите.
mssfix је потпуно други механизам. Преписује максималну величину сегмента која се објављује током руковања TCP, тако да партнери TCP бирају сегменте који се уклапају после инкапсулације. Не мења MTU интерфејса и нема никаквог утицаја на UDP.
Ако link-mtu поставите експлицитно, OpenVPN одузима сопствени трошак да би извео унутрашњи MTU. Тај трошак није фиксна константа; зависи од шифре и аутентикације, зато вредност копирана са форума може бити погрешна на другом профилу. Постављање и link-mtu и tun-mtu даје клијенту две противречне инструкције.
Измерите путању пре него што изаберете било који број
Мерите са физичког интерфејса, не из унутрашњости тунела, и запамтите да ping извештава о терету, а не о величини пакета. Додајте 28 бајтова за заглавља IPv4 и ICMP пре него што упоредите терет са оквиром од 1500 бајтова, и имајте ту корекцију на уму када партнер извести други број.
На клијенту Linux, ping -M do -s 1472 забрањује фрагментацију и не успева ако је пакет превелик. Смањујте терет док не прође, затим додајте 28 да бисте добили MTU путање. PPPoE кошта 8 бајтова, зато је 1492 нормално на DSL-у. DS-Lite и неке мобилне путање коштају 40 или више, и одговор је обично нижи него што наговештава номинална брзина везе.
Ако свака величина ping-а успе, али велики преноси и даље стају, сумњајте на црну рупу уместо на једноставно ограничење величине. ICMP порука о потребној фрагментацији се филтрира негде дуж путање, тако да пошиљалац никада не научи да смањи, и то примећују само токови којима треба велики сегмент.
Прво ограничите TCP, затим смањите тунел
Руковања TCP су једина ствар које mssfix дотиче, што га обично чини најмање наметљивим контролом коју треба прво испробати. Поставите га мало испод стварног буџета путање, пошаљите исту вредност са сервера да се оба краја сложе, и поново тестирајте велико преузимање. Ако застој нестане, проблем је била величина сегмента TCP, и ништа друго не треба мењати.
Смањите унутрашњи MTU када погођени саобраћај није TCP. UDP услуга, тунел у тунелу или апликација која шаље датаграме пуне величине наставиће да не успева после ограничења MSS јер ништа не преписује величину њених пакета. У том случају смањите tun-mtu, или поставите link-mtu и пустите клијента да изведе унутрашњу вредност, али никада оба.
Не посежите стару опцију фрагментације. Она је делила пакете унутар тунела, додавала трошак и напуштена је из добрих разлога; савремени OpenVPN очекује прецизан опис путање.
Зашто мали тестови настављају да раде
DNS упити, ICMP одјеци и руковања TCP су сви далеко испод величине на којој долази до неуспеха. Тунел зато изгледа здрав у сваком брзом тесту, док руковања TLS и HTTP одговори тихо не успевају. Управо та комбинација, traceroute који ради и прегледач који се заглављује на првом великом одговору, јесте знак који треба тражити. Посегните за пробом пуне величине пре него што посегнете за новим профилом.
Проверите саобраћајем који није успео. Учитајте велику страницу, пошаљите UDP датаграм пуне величине ако је то погођена услуга, и поновите са другог клијента на другој вези. Запишите измерени MTU путање и вредност коју сте изабрали, јер ће иначе следећа особа која дотакне профил тај број сматрати произвољним.
Никада не спуштајте унутрашњи MTU испод 1280 када IPv6 иде преко тунела, јер је то минимум који свака веза IPv6 мора да носи. Мањи MTU је чињеница о путањи, а не подешавање перформанси које се дотерује по осећају.