Кичине суроолор иштейт, чоң жүктөөлөр тыгылып калат, жана бирөө MSS чектөөсүн сунуштайт. Бул сунуш туура тартипте сынап көрүүгө татыктуу болгондой көп жолу туура, жана сокур колдонсоңуз жарым күндү жоготкондой көп жолу ката. Төмөнкү үч текшерүү чыныгы TCP өлчөмү маселесин UDP маселесинен, бузулган path-MTU аныктоодон жана кайра жазылышы керек болгон кол алышууну эч качан көрбөгөн чектөөдөн ажыратат.

Ийгиликсиздиктин формасынан баштаңыз

Өлчөм ийгиликсиздигинин кол тамгасы бар: туташуу орнойт, аутентификация жана кичине жооптор ийгиликтүү болот, анан толук өлчөмдөгү сегмент керек болгондо өткөрүү белгисиз убакытка токтойт. Текстти жүктөп, бирок сүрөттү эч качан бүтүрбөгөн барактар — ошол эле ийгиликсиздиктин кичине масштабы. Эгерде такыр эч нерсе туташпаса, маселе жолдун эрте бөлүгүндө жана чектөө жардам бербейт. Чектөө эч качан келбеген кол алышууну оңдой албайт.

Бул кол тамга сегменттин өлчөмү так кол алышууда келишилгендиктен улам бар. Ар бир тарап максималдуу сегмент өлчөмүн TCP опциясы катары жарыялайт, ал эми жөнөтүүчүлөр каршы тараптын жарыясын урматташат. Эгер жол ушунчалык чоң сегментти көтөрө албаса, ийгиликсиздик кийин, жөнөтүүчү акыры бирөөнү сынап көргөндө пайда болот.

Бул симптомду окууда транспортту көз алдыңыздан албаңыз. Чектөө TCP опциясын кайра жазуу болуп саналат, ошондуктан ошол эле туннелдин астында тыгылган үн же видео чалуу MSS маселеси эмес жана андан жакшырбайт. TCP опциясына тийишерден мурун транспортту жазып алыңыз.

Жолду баалаңыз, анан туннел менен салыштырыңыз

Эки сан маанилүү жана алар көп жолу чаташтырылат. path-MTU — жолдун фрагментациясыз өткөрө турган эң чоң пакети, ал эми IPv4 үчүн жарыяланган MSS — IP жана TCP аталыштарынын 40 байтын кемиткен ошол маани, же IPv6 үчүн 60ты кемиткен маани. Туннелдин инкапсуляциясы ички пакет башталаардан мурун эле бюджеттин бир бөлүгүн жейт.

ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20

do-not-fragment бити менен ping ошол жүк өлчөмүндөгү пакеттин аман каларын айтат; өлчөмдү ал ийгиликсиз болгонго чейин өзгөртүңүз, жана жолдун чегин эмпирикалык жол менен таптыңыз. tracepath чыгарылышы маршрут бою аныкталган MTUну билдирет, бул иштегенде тезирээк, ал эми ортодогу хоп зонддорду чыпкалаганда азыраак ишенимдүү.

Эми туннелдин чыгымын кемитеңиз. Сырткы IP аталышы, UDP аталышы жана туннелге мүнөздүү аталыш — баары бир эле 1500 байттан чыгат, ошондуктан кадимки Ethernet негизинде колдонууга боло турган ички MTU физикалык байланыш сунуш кылгандан төмөн. Эсептелген ички MTU сиздин өнөктөштөрүңүз жарыялагандан төмөн болсо, сиз божомол эмес, чыныгы чектөө талапкерин таптыңыз. Эсептелген маани өнөктөштөрдүн жарыясынан жогору болсо, ушул жерде токтоп, башка жерден издеңиз.

Чектөөнү кол алышуу өткөн жерге коюңуз

Чектөө шлюзден өтүп бара жатканда SYN жана SYN-ACK пакеттериндеги MSS опциясын кайра жазуу менен иштейт. Эгер эреже эки багыттын эч бири эч качан кесип өтпөгөн интерфейсте турса, сүйлөшүү өзгөрүүсүз бүтөт жана симптом сакталат, ошондуктан натыйжаны мааниден да көбүрөөк жайгаштыруу чечет.

SymptomWhat it points toNext check
Handshake completes, large transfer stallsSegment size larger than the path can carryPath MTU against the tunnel's effective MTU
Nothing connects, small or largeRouting, firewall or keying failureNot MSS; look at the tunnel state
Only UDP applications stallDatagram size or a dropped ICMP errorPlatform-specific UDP handling, not clamping
Fixed after reconnect, returns laterClamp applied to one direction or one interfaceRule placement and the handshake path

Багыт — экинчи жарымы. Бир багытты чектөө агымдардын жарымын оңдоп, калганын үзгүлтүктүү көрүнгөн түрдө ийгиликсиз калтырат, ошондуктан аны өткөрүлүп жаткан трафиктин эки багытына тең колдонуңуз. Туннел интерфейси үчүн классикалык Linux формасы — SYN пакеттерине дал келген mangle эрежеси:

iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

--clamp-mss-to-pmtu чындыгында эмне кыларына көңүл буруңуз: ал маанини маршруттун MTUсунан алат, бул дайыма туннелдин чыныгы жүк бюджети эмес. Ички маршрут менен сырткы жол айырмаланган маршрутка негизделген туннелде мурунку текшерүүдө эсептелген ачык маани автоматтык мааниден болжолдуураак.

Жаңы туташуу менен текшериңиз жана кайтарым байланышты тирүү кармаңыз

Орнотулган туташуу келишилген MSSти сактайт, ошондуктан ошол эле сессияда тесттөө эч нерсени далилдебейт. Өзгөртүүдөн кийин жаңы туташуу ачып, келишилген маанини түз окуңуз, кокустан бүткөн өткөрүүдөн божомолдоонун ордуна.

ss -tin dst 198.51.100.20
iptables -t mangle -S | grep TCPMSS

Биринчи буйрук сокеттин MSSин анын тыгын абалы менен бирге билдирет, бул чектөө таасир эткенин эң тез ырастоо. Экинчиси кошкон деп ойлогон эреженин чын эле бар эреже экенин, ал коюлган таблицада ырастайт.

Анан оңдобогон механизмди коргоңуз. path-MTU аныктоо ICMP fragmentation-needed билдирүүлөрүнүн жөнөтүүчүгө жетүүсүнө көз каранды, ошондуктан аларды ыргыткан файрвол туура чектөө болсо да чоң өткөрүүлөрдү буза берет. Бул билдирүүлөргө туннел жолу үчүн уруксат бериңиз, же чектөө өзүңүз тандаган саясатты компенсациялап жатканын кабыл алыңыз.

Акырында чектөөнү жөндөө туткасы катары кароо азгырыгына каршы тур. Ал сегменттин өлчөмүн чектейт, бул ага эч качан муктаж болбогон жолдордо өткөрүү жөндөмүн корот. Үч текшерүүдөн кийин колдонулса, бул максаттуу оңдоо; биринчи колдонулса, бул баштапкы кемчиликти жашырып, ар бир кийинки тестке экинчи өзгөрмөнү кошкон өзгөртүү. Бул алмашууну атайын жасоого татыктуу, демейки боюнча эмес.

Өлчөгөн path-MTUну, кемиткен туннел чыгымын, кошкон эрежени жана кийин көргөн MSSти жазып алыңыз. Төрт сан кийинки окуяны тергөөнүн ордуна издөөгө айландырат.

Тектеш макалалар