Eğilmeyen bir gereksiniminiz var: karşı taraf, göndericinin ürettiği aynı 1,500 baytlık IP paketini başlıklar dahil almalı. Bir tünel o paketi kendi çerçevelemesiyle birlikte ikinci bir 1,500 baytlık IP paketinin içine sarayamaz, bu yüzden tasarımda bir şeyin boyun eğmesi gerekir. Aşağıdaki sıra, bir değişiklik penceresinde kullandığım sıradır: bayt bütçesini yaz, alttaki ağın gerçekte ne taşıyabildiğini kanıtla, sonra tam olarak bir taşıma mekanizması seç ve iç paketi karşı tarafta doğrula.

Bir profili düzenlemeden önce bayt bütçesini yazın

Kapsülleme birkaç katmanda bayt ekler ve toplam, bakıp bulabileceğiniz bir sabit değil profilinizin bir özelliğidir. Adres ailesi, şifre seçimi, taşıma protokolü ve herhangi bir sıkıştırma veya çerçeveleme seçeneği sayıyı kaydırır, bu yüzden başka bir kurulumdan kopyalanan bir çıkarma bütçe olarak değersizdir. İç gereksinimle başlayın, kendi yapılandırmanızın ölçülen paket başına ek yükünü ekleyin ve ortaya çıkan dış boyutu kimse bir dosyayı düzenlemeden önce değişiklik kaydına yazın.

Tasarımı iki sayı belirler: yolun parçalanma olmadan taşıdığı en büyük dış paket ve kapsüllemenizin ihtiyaç duyduğu ek baytlar. Birincisi ikincinin 1,500 fazlasından küçük olduğunda ikisinden biri değişmelidir. Seçim o zaman yaratıcı değil dar olur, bu yüzden seçenekleri tartışmadan önce iki sayıyı da yazarım. Tünel katmanında o baytları sıkıştırıp yok eden hiçbir şey yoktur ve tek bir MTU tam sayısı size verilen gereksinimi ortadan kaldırmaz.

Alttaki ağı do-not-fragment ping ile yoklayın

Arayüz MTU değerine güvenmek yerine yolu ölçün, çünkü dış yoldaki en küçük halka önemli olandır. Linux üzerinde, -M do do-not-fragment bitini ayarlar ve -s ICMP yükünü alır, bu yüzden 20 baytlık IP başlığı ve 8 baytlık ICMP başlığı çıkarıldığında 1,500 baytlık bir çerçeve 1,472 bayt yükte yanıt verir. Yoklama başarısız olana kadar yükü artırın, sonra bir jumbo boyuta atlayıp yolun onu hiç taşıyıp taşımadığına bakın.

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 değerini geçip 8,972 değerinde başarısız olan bir yol, 1,500 baytlık iç paketi ek yüküyle birlikte tek bir dış pakette taşıyamaz. VPN yapılandırmasını açmadan önce ihtiyaç duyduğunuz cevap buydu. Aynı zamanda sonraki iki bölümden hangisinin size uyduğunu da belirler, bu yüzden iki yoklama sonucunu da kaydın yanında tutun. Burada tahmin etmek bir bakım penceresine mal olur, çünkü kendini up olarak bildiren bir tünel, yolun kabul edeceği en büyük paket hakkında size hiçbir şey söylemez.

Yolun MTU değerini yalnızca her atlamanın anlaştığı yerde yükseltin

Jumbo çerçeveler uçtan uca bir özelliktir, tesadüfen denetlediğiniz iki uç noktada açtığınız bir ayar değil. Dış yoldaki her anahtar, yönlendirici ve sağlayıcı devri daha büyük boyut üzerinde anlaşmalıdır ve tek bir 1,500 baytlık atlama, az önce büyüttüğünüz paketi sessizce düşürür. Yalnızca yerel arayüzü yükseltmek, tünel bozuk görünürken alttaki ağın sessizce düşürdüğü klasik yarım değişikliktir.

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

Arayüzü değiştirin, sonra başka bir şeyi değiştirmeden önce aynı yolu yeniden yoklayın. Yoklama hâlâ başarısız olursa, geri alın ip link set dev eth1 mtu 1500 ve sahibi olmadığınız bir bağlantı için sağlayıcıyla tartışmak yerine parçalanmaya geçin.

Alttaki ağ büyüyemediğinde tünel parçalanmasını kullanın

İç paketin altında desteklenen bir parçalanma mekanizması, birkaç dış paketin bir iç paketi taşımasına izin verir ve karşı tünel uç noktası, özgünü yığına vermeden önce bunları yeniden birleştirir. Community OpenVPN ürününün UDP fragment seçeneği bu fikrin bir uygulamasıdır ve dış paketin olağan IP parçalanmasıyla aynı şey değildir. Her iki eş de biçimi destekleyen bir sürüm çalıştırmalıdır ve veri yolu düşündüğünüz yol olmalıdır: OpenVPN 3 istemcileri ile çekirdek tarafından hızlandırılan veri kanallarının sınırları farklıdır, bu yüzden bir istemcide çalışan profil diğerinde başarısız olabilir.

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

Olağan dış parçalanma diğer seçenektir ve daha zayıftır. IPv6 yönlendiricileri iletilen bir paketi hiç parçalamaz, bu yüzden aşırı büyük bir dış paket basitçe ölür ve gönderici bunu ancak ilgili ICMPv6 iletisi yolda hayatta kalırsa öğrenir. Parçalar ayrıca filtrelemeye ve kayıp büyümesine davetiye çıkarır, bu yüzden bunu bir plan değil yedek olarak görüyorum.

Akış tabanlı bir dış taşıyıcı, kendi bayt akışını bölümleyerek boyut sorununu atlar ve yeniden oluşturulan iç paket hâlâ 1,500 bayt olabilir. Bu, TCP içinde TCP davranışı dahil kendi maliyeti olan bir taşıma kararıdır, bu yüzden bunu bir MTU tartışmasının yan etkisi olarak değil bilerek alın.

İç paketin değişmeden ulaştığını doğrulayın

Doğrulama başarılı bir el sıkışma değildir. Her iki uçta tünel arayüzünde yakalayın ve uygulamanın gerçekte gönderdiği paketin boyutunu ve içeriğini karşı tarafın aldığıyla karşılaştırın.

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'

Yakalama karşı uçta tam boyutlu iç paketi gösteriyorsa taşıma seçimi çalışıyor ve geriye kalan iş bunu belgelemek. Tünel kendini up olarak bildirirken hiçbir şey göstermiyorsa, dış paket uç noktalar arasında bir yerde düşürülüyor, bu da sizi şifre ayarlarına değil yoklamaya geri gönderir.

Kaydı kapatmadan önce üç şeyi yazın: ölçülen dış bütçe, seçtiğiniz mekanizma ve iç paketin hayatta kaldığını kanıtlayan komut. Bu tünele sonra dokunacak kişi üçüne de ihtiyaç duyacak ve hiçbiri yalnızca yapılandırma dosyasından yeniden oluşturulamaz.

İlgili makaleler