Зашто VPN застаје на великим преносима, а не на малим
Мали захтеви добијају одговор док велики преноси замрзну. Упоредите ограничење интерфејса, ограничење путање и најављени TCP терет пре него што копирате фиксни MTU.
Страница се учита, ping успе, а копирање датотеке се сваки пут загледа на истом месту. Тај образац указује на величину пакета, а не на пропусност или податке за пријаву. Инкапсулација додаје бајтове сваком пакету, па корисни терет који је стао на изворној путањи може премашити ограничење након проласка кроз тунел. У тим разговорима три различита броја називају се MTU, а њихово мешање води до поставке која поправља једну апликацију и квари другу.
Три броја која људи називају MTU
MTU интерфејса је конфигурисано ограничење за пакет на том линку. MTU путање је најмање ограничење дуж руте и открива се, а не конфигурише. TCP MSS је величина корисног терета коју саговорник најављује да може примити, и изводи се из друга два, а није засебно физичко ограничење.
Тунел има унутрашњи и спољашњи поглед. Спољашњи пакет носи инкапсулирани плус заглавља која протокол захтева, па је употребљива унутрашња величина мања од онога што спољашња путања допушта. Путања до VPN сервера такође се разликује од серверске путање до одредишта.
Откривање MTU путање омогућава пошиљаоцу да сазна радну величину, али зависи од доласка повратне информације. Када посредни уређај филтрира релевантне ICMP поруке, пошиљалац наставља да шаље пакете који никада не заврше, и то је класична црна рупа. Симптом је препознатљив када га знаш: руковање успе, први терет пуне величине нестане, а веза се на крају ресетује или загледа. Ништа у дневнику апликације не изгледа као мрежни проблем.
Испитајте путању теретом који контролишете
Проба је доказ о једној рути и једној величини, а не препоручена поставка. Користите хост који одговара и мењајте само величину терета.
ping -M do -s 1372 -c 2 203.0.113.20 ping -4 -f -l 1372 vpn.example
Прва наредба шаље Linux пробу са искљученом фрагментацијом и теретом од 1372 бајта, а друга ради исто на Windows-у где се терет задаје са -l. Одговор значи да је та величина преживела путању. Порука да је потребна фрагментација је информативна, док је истек времена двосмислен јер хост или посредни уређај може једноставно да одбаци ICMP.
Спуштајте величину у неколико корака уместо бинарне претраге до бајта. Покушавате да утврдите постоји ли горња граница величине, а не да објавите број за сваку мрежу. Број који нађете важи за ову путању, овај протокол и ову породицу адреса.
IPv4 и IPv6 се фрагментишу различито, па резултат пробе из једне породице ништа не говори о другој. Тестирајте породицу коју апликација стварно користи.
MSS стезање помаже само TCP-у
Код TCP-а се ефективни терет договара током руковања, а рутер на путањи може преписати ту вредност наниже да оба краја шаљу мање сегменте. То ради MSS стезање и делује без икаквог дирања у клијент.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu ip link show tun0
Прво правило стеже најављени MSS на MTU путање за прослеђена TCP руковања, а друго приказује сопствени MTU тунелског интерфејса да га упоредите са оним што путања допушта. Стезање је најмање инвазивна поправка за TCP апликацију која се загледа након руковања.
За UDP не чини ништа. Гласовни или играчки клијент који шаље велике датаграме потпуно ће игнорисати MSS поставку, јер нема руковања које би се преписло. Ако апликација која пада ради преко UDP-а, погледајте уместо тога опције величине пакета у самом клијенту. Два протокола падају различито и поправљају се различитим алатима, зато протокол припада у прву реченицу тикета.
OpenVPN нуди опције као што су tun-mtu, mssfix и поставке везане за фрагментацију, а њихово понашање зависи од верзије и од тога је ли податочни канал AEAD. Прочитајте приручник за верзију која се користи и мењајте једну опцију по једну.
Промените једну подржану поставку и поновите оба пролаза
Задржите изворни профил, промените једну подржану вредност и поновите и мали захтев који је радио и велики пренос који је пао. Ако се промени само велики, ловили сте величину. Ако се промене оба, нешто друго се померило с њим.
Нижа вредност може смањити симптом уз додатни трошак, па најмањи могући број није циљ. Циљ је величина коју путања поуздано носи уз најмање расипања. Запишите вредност, путању и верзију клијента у тикет, јер је исти број примењен другде нагађање.
Ако исти профил ради са друге поуздане мреже, задржите ту разлику у дијагнози уместо да прогласите клијент поправљеним. Променљива која се променила је путања, а путању је проба измерила.