VPN şlüzündə MSS sıxılması: nəyi düzəldir və nəyi düzəltmir
Sıxma TCP əl sıxışmalarında MSS-i yenidən yazır ki, seqmentlər tunelə sığsın. UDP-ni və ya pozulmuş path-MTU yoxlamasını heç vaxt düzəltmir. Sıra ilə üç yoxlama.
Kiçik sorğular işləyir, böyük yükləmələr donur və kimsə MSS sıxılmasını təklif edir. Bu təklif düzgün ardıcıllıqla sınamağa dəyəcək qədər tez-tez haqlı, kor-koranə tətbiq etsəniz bir günorta itirməyə dəyəcək qədər tez-tez yanlışdır. Aşağıdakı üç yoxlama əsl TCP ölçü problemini UDP probleminə, pozulmuş path-MTU kəşfinə və yenidən yazmalı olduğu əl sıxışmanı heç vaxt görməyən sıxılmaya ayırır.
Uğursuzluğun formasından başlayın
Ölçü nasazlığının bir imzası var: bağlantı qurulur, autentifikasiya və kiçik cavablar uğur qazanır, sonra tam ölçülü seqmentə ehtiyac yarananda ötürmə qeyri-müəyyən müddət dayanır. Mətni yükləyib şəkli heç vaxt tamamlamayan səhifələr daha kiçik miqyasda eyni nasazlıqdır. Ümumiyyətlə heç nə bağlanmırsa, problem yolda daha erkən yerdədir və sıxma kömək etməyəcək. Sıxma heç vaxt gəlməyən əl sıxışmanı bərpa edə bilməz.
Bu imza ona görə mövcuddur ki, seqment ölçüsü məhz əl sıxışmada razılaşdırılır. Hər tərəf maksimum seqment ölçüsünü TCP opsiyası kimi elan edir və göndərənlər qarşı tərəfin elanına hörmət edir. Yol bu qədər böyük seqmenti daşıya bilmirsə, nasazlıq sonra, göndərən nəhayət onu sınayanda ortaya çıxır.
Bu simptomu oxuyarkən nəqliyyatı gözdən qaçırmayın. Sıxma TCP opsiyasının yenidən yazılmasıdır, ona görə eyni tunel altında donan səs və ya video zəng MSS problemi deyil və onunla yaxşılaşmayacaq. TCP opsiyasına toxunmazdan əvvəl nəqliyyatı yazın.
Yolu qiymətləndirin, sonra tunellə müqayisə edin
İki rəqəm vacibdir və çox vaxt qarışdırılır. path-MTU yolun fraqmentasiyasız daşıyacağı ən böyük paketdir, IPv4 üçün elan edilən MSS isə həmin dəyərdən IP və TCP başlıqlarının 40 baytı çıxılmış halıdır, IPv6 üçün isə 60 çıxılır. Tunel inkapsulyasiyası daxili paket hələ başlamamış büdcənin bir hissəsini yeyir.
ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20
Do-not-fragment biti ilə ping sizə o yük ölçüsündə paketin sağ qalıb-qalmadığını deyir; ölçünü uğursuz olana qədər dəyişin və yol limitini empirik olaraq tapmış olarsınız. tracepath çıxışı marşrut boyunca aşkar edilən MTU-nu bildirir; bu işləyəndə daha sürətli, aralıq hop zondları süzəndə isə daha az etibarlıdır.
İndi tunelin yükünü çıxın. Xarici IP başlığı, UDP başlığı və tunelə xas başlıq hamısı eyni 1500 baytdan çıxır, ona görə tipik Ethernet altlığında istifadə oluna bilən daxili MTU fiziki linkin təklif etdiyindən aşağıdır. Hesablanmış daxili MTU qarşı tərəflərin elan etdiyindən aşağıdırsa, təxmin deyil, əsl sıxma namizədi tapmısınız. Hesablanmış dəyər artıq qarşı tərəflərin elan etdiyindən yuxarıdırsa, burada dayanın və başqa yerdə axtarın.
Sıxmanı əl sıxışmanın keçdiyi yerə qoyun
Sıxma SYN və SYN-ACK paketlərindəki MSS opsiyasını onlar şlüzdən keçərkən yenidən yazmaqla işləyir. Qayda heç bir istiqamətin keçmədiyi interfeysdə oturursa, danışıqlar dəyişmədən tamamlanır və simptom qalır; buna görə nəticəni dəyərdən çox yerləşdirmə həll edir.
| Symptom | What it points to | Next check |
|---|---|---|
| Handshake completes, large transfer stalls | Segment size larger than the path can carry | Path MTU against the tunnel's effective MTU |
| Nothing connects, small or large | Routing, firewall or keying failure | Not MSS; look at the tunnel state |
| Only UDP applications stall | Datagram size or a dropped ICMP error | Platform-specific UDP handling, not clamping |
| Fixed after reconnect, returns later | Clamp applied to one direction or one interface | Rule placement and the handshake path |
İstiqamət digər yarımdır. Bir istiqaməti sıxmaq axınların yarısını düzəldir və qalanını fasiləli görünən şəkildə uğursuz qoyur, ona görə ötürülən trafikin hər iki istiqamətinə tətbiq edin. Tunel interfeysi üçün klassik Linux forması SYN paketlərinə uyğun gələn mangle qaydasıdır:
iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
--clamp-mss-to-pmtu əslində nə etdiyinə diqqət yetirin: dəyəri marşrutun MTU-sundan götürür, bu isə həmişə tunelin həqiqi yük büdcəsi deyil. Daxili marşrutla xarici yolun fərqləndiyi marşruta əsaslanan tuneldə əvvəlki yoxlamada hesablanmış açıq dəyər avtomatik dəyərdən daha proqnozlaşdırıla biləndir.
Yeni bağlantı ilə yoxlayın və əlaqəni canlı saxlayın
Qurulmuş bağlantı razılaşdırdığı MSS-i saxlayır, buna görə eyni sessiyada sınamaq heç nə sübut etmir. Dəyişiklikdən sonra təzə bağlantı açın və razılaşdırılmış dəyəri bitən ötürmədən çıxarmaq əvəzinə birbaşa oxuyun.
ss -tin dst 198.51.100.20
iptables -t mangle -S | grep TCPMSS
Birinci əmr soketin MSS-ini tıxanma vəziyyəti ilə birlikdə bildirir; bu, sıxmanın qüvvəyə mindiyinin ən sürətli təsdiqidir. İkinci əmr isə hesab etdiyiniz qaydanın həqiqətən mövcud olduğunu, yerləşdirildiyi cədvəldə təsdiqləyir.
Sonra düzəltmədiyiniz mexanizmi qoruyun. path-MTU kəşfi ICMP fragmentation-needed mesajlarının göndərənə çatmasından asılıdır, buna görə onları atan firewall düzgün sıxma olsa belə böyük ötürmələri pozmağa davam edəcək. Bu mesajlara tunel yolu üçün icazə verin və ya sıxmanın seçdiyiniz siyasəti kompensasiya etdiyini qəbul edin.
Nəhayət, sıxmanı tənzimləmə düyməsi kimi görmək istəyinə qarşı durun. O, seqment ölçüsünü məhdudlaşdırır və buna heç vaxt ehtiyac duymayan yollarda ötürmə qabiliyyətini azaldır. Üç yoxlamadan sonra tətbiq olunanda hədəfli təmirdir; birinci tətbiq olunanda ilkin nasazlığı gizlədən və hər sonrakı sınağa ikinci dəyişən əlavə edən dəyişiklikdir. Bu mübadiləni qəsdən etməyə dəyər, susmaya görə deyil.
Ölçdüyünüz path-MTU-nu, çıxdığınız tunel yükünü, əlavə etdiyiniz qaydanı və sonra gördüyünüz MSS-i yazın. Dörd rəqəm növbəti hadisəni araşdırma yerinə qısa axtarışa çevirir.