OpenVPN mssfix: чаму адзін кліент спыняецца пры вялікіх перадачах
mssfix перапісвае памер TCP-сегмента, які абвяшчаецца ўнутры тунэля. Ён не змяняе памер UDP, і значэнне азначае толькі тое, што кажа ваша версія.
Адзін ноўтбук спыняецца на загрузках праз тунэль, пакуль усе астатнія прылады на тым жа серверы працягваюць працаваць. Гэтая карціна паказвае на адзін шлях, а не на канфігурацыю сервера, і гэта звычайны ўваход у пытанне mssfix. Опцыя можа дапамагчы, але толькі для тых TCP-злучэнняў, якія яна сапраўды перапісвае. Веданне яе ахопу не дае вам змяняць працуючы сервер, каб выратаваць аднаго кліента.
Што перапісвае опцыя
mssfix рэдагуе максімальны памер сегмента, які абвяшчаецца ў TCP-рукапацісненнях, што праходзяць праз тунэль, каб баку адпраўніка выбіраць сегменты, якія ўкладаюцца ў інкапсуляваны бюджэт. Ён дзейнічае на рукапацісненне, а значыць, злучэнне, адкрытае да змены, захоўвае значэнне, пра якое дамовілася.
Ён не памяншае UDP-датаграмы і не ўстанаўлівае MTU тунэля. Дзве розныя праблемы даюць той жа сімптом: адпраўнік TCP, які ігнаруе абмежаванне шляху, і шлях, які моўчкі скідвае вялікія пакеты любога памеру. mssfix вырашае першую і нічога не робіць для другой.
Гэтае адрозненне тлумачыць расчаравальныя эксперыменты. Усталяванне меншага значэння на шляху з чорнай дзіркай змяняе памер сегмента, але не скід, які ідзе за ім, таму перадача зрываецца ў іншым месцы.
Ахоп — гэта TCP унутры тунэля
Перапісваецца толькі трафік TCP. Сеанс QUIC, гульня ці праграма, якая адпраўляе вялікія UDP-датаграмы, захавае свае памеры пакетаў, і калі менавіта гэтыя перадачы спыняюцца, выпраўленне належыць хутчэй да MTU тунэля ці шляху. Прачытайце, які пратакол выкарыстоўвае збойная перадача, перш чым брацца за опцыю TCP, бо ў няправільнага ўзроўню сваё выпраўленне.
Кірунак таксама мае значэнне. Налада кліента ўплывае на трафік, які гэты кліент адпраўляе ў тунэль, а сервер ахоплівае патокі, якія ён перанакіроўвае да кліентаў. Калі спыняюцца толькі ўваходныя загрузкі, значэнне на баку кліента — не ўся гісторыя.
Лік і ключавое слова не пераносныя
OpenVPN 2.6 супольнасці прымае неабавязковае ключавое слова пасля значэння. З mtu лік апісвае памер знешняга пакета, уключаючы загалоўкі IP і UDP; без яго аргумент ідзе па іншай уліковай канвенцыі. Таму радок, скапіяваны паміж версіямі, не апісвае той жа бюджэт пакета. Праверце старонку кіраўніцтва, якая пастаўляецца з той зборкай, якую вы насамрэч запускаеце, а не падручнік для іншага выпуску.
Сінтаксіс выглядае так:
mssfix 1400 mtu
Разглядайце 1400 як запаўняльнік, а не як рэкамендацыю для вашага шляху. Выводзьце значэнне з вымеранага шляху і інкапсуляцыі, якая фактычна выкарыстоўваецца, і памятайце, што кліенты на старэйшых версіях ці іншых рэалізацыях могуць адхіліць або пераасэнсаваць ключавое слова.
Спачатку пацвердзіце на адным кліенце
Вымерайце шлях са збойнай машыны, перш чым нешта змяняць. Карысная нагрузка, якую шлях можа пранесці без фрагментацыі, — гэта лік, які вы шукаеце:
ping -M do -s 1472 10.8.0.1
ping -M do -s 1400 10.8.0.1
Першая спроба змяшчае пакет у 1500 байтаў, калі дадаць 28 байтаў загалоўкаў. Калі яна зрываецца з памылкай фрагментацыі, а меншая паспяховая, то прыдатны памер знаходзіцца недзе паміж імі, а накладныя выдаткі тунэля здымаюцца зверху.
Затым паўтарыце перадачу, якая спынілася, на новым злучэнні і параўнайце. Калі адзін кліент паляпшаецца, а іншыя некранутыя, вы знайшлі ахоп праблемы. Калі спыняюцца ўсе кліенты, значэнне на баку сервера — тое, што трэба перагледзець. Ні адзін з вынікаў не апраўдвае змену на абсталяванні, якое ніколі не было на збойным шляху.