Dəyişməz bir tələbiniz var: qarşı tərəf göndərənin buraxdığı eyni 1,500 baytlıq IP paketini başlıqları ilə birlikdə almalıdır. Tunel həmin paketi öz çərçivələməsi ilə birlikdə ikinci 1,500 baytlıq IP paketinin içinə yığa bilməz, ona görə dizaynda nəyinsə güzəştə getməsi lazımdır. Aşağıdakı ardıcıllıq dəyişiklik pəncərəsində istifadə etdiyim ardıcıllıqdır: bayt büdcəsini yazın, əsas şəbəkənin həqiqətən nə daşıya bildiyini sübut edin, sonra dəqiq bir daşıma mexanizmi seçin və qarşı tərəfdə daxili paketi təsdiqləyin.

Profil redaktə etməzdən əvvəl bayt büdcəsini yazın

Enkapsulyasiya bir neçə layda bayt əlavə edir və cəm sabit deyil, profilinizin xassəsidir; ona görə başqa quraşdırmadan köçürülmüş çıxma büdcə kimi dəyərsizdir. Ünvan ailəsi, şifr seçimi, nəql protokolu və hər hansı sıxılma və ya çərçivələmə seçimi bu rəqəmi dəyişir. Daxili tələbdən başlayın, öz konfiqurasiyanızın ölçülmüş paket başına əlavə yükünü əlavə edin və yaranan xarici ölçünü hər hansı fayl redaktə olunmazdan əvvəl dəyişiklik bileti üzərinə yazın.

Dizaynı iki rəqəm müəyyən edir: yolun fraqmentasiyasız daşıdığı ən böyük xarici paket və enkapsulyasiyanızın tələb etdiyi əlavə baytlar. Birinci ikinci üstəgəl 1,500-dən kiçik olduqda onlardan biri dəyişməlidir. Onda seçim yaradıcı deyil, dardır; ona görə variantları müzakirə etməzdən əvvəl hər iki rəqəmi yazıram. Tunel qatında heç nə o baytları sıxıb yox etmir və heç bir tək MTU ədədi sizə verilən tələbi aradan qaldırmır.

Əsas şəbəkəni do-not-fragment ping ilə yoxlayın

İnterfeys MTU-suna güvənmək əvəzinə yolu ölçün, çünki xarici yolda ən kiçik halqa vacibdir. Linux-da -M do do-not-fragment bitini qurur və -s ICMP yükünü götürür, beləliklə 1,500 baytlıq çərçivə 20 baytlıq IP başlığı və 8 baytlıq ICMP başlığı çıxıldıqdan sonra 1,472 bayt yüklə cavab verir. Yükü yoxlama uğursuz olana qədər artırın, sonra yolun onu ümumiyyətlə daşıyıb-daşımadığını görmək üçün jumbo ölçüyə keçin.

ping -M do -s 1472 -c 2 198.51.100.10
ping -M do -s 8972 -c 2 198.51.100.10
tracepath -n 198.51.100.10

1,472-ni keçib 8,972-də uğursuz olan yol 1,500 baytlıq daxili paketi əlavə yüklə birlikdə tək xarici paketdə daşıya bilməz. Bu, VPN konfiqurasiyasını açmazdan əvvəl lazım olan cavabdır. Həm də növbəti iki bölmədən hansının sizə aid olduğunu müəyyən edir, ona görə iki yoxlama nəticəsini biletin yanında saxlayın. Burada təxmin etmək bir texniki xidmət pəncərəsinə başa gəlir, çünki özünü işlək elan edən tunel yolun qəbul edəcəyi ən böyük paket barədə heç nə demir.

Yol MTU-sunu yalnız hər hop razılaşdıqda artırın

Jumbo çərçivələr ucdan-uca xassədir, sizin nəzarət etdiyiniz iki son nöqtədə açdığınız parametr deyil. Xarici yoldakı hər svitç, marşrutlaşdırıcı və provayder keçidi böyük ölçü ilə razılaşmalıdır və tək bir 1,500 baytlıq hop indicə böyütdüyünüz paketi səssizcə atacaq. Yalnız yerli interfeysi qaldırmaq tuneli sınıq kimi göstərən, əsas şəbəkə isə sakitcə atan klassik yarımçıq dəyişiklikdir.

ip link set dev eth1 mtu 9000
ip link show dev eth1
ping -M do -s 8972 -c 2 198.51.100.10

İnterfeysi dəyişin, sonra başqa heç nəyi dəyişməzdən əvvəl eyni yolu yenidən yoxlayın. Yoxlama hələ də uğursuz olarsa, ip link set dev eth1 mtu 1500 ilə geri qaytarın və sizə aid olmayan halqa barədə provayderlə mübahisə etmək əvəzinə fraqmentasiyaya keçin.

Əsas şəbəkə böyüyə bilmədikdə tunel fraqmentasiyasından istifadə edin

Daxili paketin altındakı dəstəklənən fraqmentasiya mexanizmi bir neçə xarici paketin bir daxili paketi daşımasına imkan verir və uzaq tunel son nöqtəsi orijinalı yuxarı qatlara verməzdən əvvəl onları yenidən yığır. Community OpenVPN-in UDP fraqment seçimi bu fikrin bir tətbiqidir və xarici paketin adi IP fraqmentasiyası ilə eyni şey deyil. Hər iki peer formatı dəstəkləyən versiya işlətməlidir və məlumat yolu düşündüyünüz yol olmalıdır: OpenVPN 3 müştəriləri və nüvə sürətləndirilmiş məlumat kanalları fərqli limitlərə malikdir, ona görə bir müştəridə işləyən profil digərində uğursuz ola bilər.

openvpn --config client.ovpn --tun-mtu 1500 --fragment 1400 --verb 4

Adi xarici fraqmentasiya digər seçimdir və daha zəifdir. IPv6 marşrutlaşdırıcıları ötürülən paketi ümumiyyətlə fraqmentləşdirmir, ona görə həddindən böyük xarici paket sadəcə ölür və göndərən bundan yalnız müvafiq ICMPv6 mesajı yoldan keçsə xəbər tutur. Fraqmentlər həm də filtrləmə və itki güclənməsini dəvət edir, ona görə mən buna plan kimi deyil, ehtiyat variant kimi baxıram.

Axına əsaslanan xarici daşıyıcı öz bayt axınını seqmentləşdirərək ölçü məsələsini yan keçir və yenidən qurulan daxili paket yenə də 1,500 bayt ola bilər. Bu, öz qiyməti olan nəql qərarıdır, o cümlədən TCP-nin TCP içində tanınmış davranışı, ona görə bunu MTU mübahisəsinin yan təsiri kimi deyil, qəsdən edin.

Daxili paketin dəyişmədən çatdığını təsdiqləyin

Yoxlama uğurlu əl sıxışması deyil. Hər iki ucda tunel interfeysində tutma aparın və tətbiqin həqiqətən göndərdiyi paketin ölçüsünü və məzmununu qarşı tərəfin aldığı ilə müqayisə edin.

ip link show dev tun0
ping -M do -s 1472 -c 2 10.8.0.1
tcpdump -ni tun0 -c 5 'icmp and greater 1000'

Tutma uzaq ucda tam ölçülü daxili paketi göstərirsə, daşıma seçimi işləyir və qalan iş onu qeyd etməkdir. Əgər tunel işlək olduğunu bildirdiyi halda heç nə göstərmirsə, xarici paket son nöqtələr arasında hansısa yerdə atılır və bu sizi şifr parametrlərinə deyil, yoxlamaya qaytarır.

Bileti bağlamazdan əvvəl üç şeyi qeyd edin: ölçülmüş xarici büdcə, seçdiyiniz mexanizm və daxili paketin sağ qaldığını sübut edən əmr. Bu tunelə toxunacaq növbəti şəxsə hər üçü lazım olacaq və heç biri yalnız konfiqurasiya faylından bərpa edilə bilməz.

Əlaqəli məqalələr