Ping'ler başarılı olur, büyük aktarımlar takılır ve tünel kendini sağlıklı bildirir. Biri arayüzün MTU'sunu düşürür, bir başkası MSS'yi sınırlar ve bazen sorun kimsenin kaydetmediği nedenlerle ortadan kalkar. Bu iki sayı farklı nesneleri tanımlar, bu yüzden yanlış olanı değiştirmek şans gibi görünen bir düzeltme üretir. İşlem şudur: katmanı belirleyin, uygun ayarlamayı uygulayın ve ardından yeni bir bağlantıda test edin.

İki sayı, iki nesne

MTU bir bağlantıya veya arayüze aittir: bölünmeden teslim edilebilecek en büyük pakettir. MSS TCP'ye aittir: bir segmentin taşıyabileceği en büyük TCP yükü miktarıdır ve hem TCP hem de IP başlığını dışarıda bırakır. IPv4 kullanan sıradan bir Ethernet bağlantısında 1500 baytlık MTU, bilinen 1460 baytlık MSS'yi verir. Bu sayılar farklı katmanları tanımlar ve farklı mekanizmalarla değiş tokuş edilir. İkisi de baytla ölçüldüğü ve ikisi de 1500'e yakın olduğu için karıştırmak kolaydır.

Biri arayüz ayarı olarak gelir. Diğeri SYN segmentinin içinde bir seçenek olarak gelir ve arayüzünüzü hiç görmeyen uçlar arasında pazarlık edilir.

Dış ek yük nereye iner

VPN, iç paketi bir başkasının içine koyar ve dış paket fiziksel yola sığmalıdır. Kapsülleme başlıkları, dış IP başlığı, taşıma başlığı ve herhangi bir kimlik doğrulama etiketi, iç paketin kullanamayacağı baytları tüketir. Tünel arayüzünü 1500'de bırakın, dış paket yolun taşıyabileceğini düzenli olarak aşar. 'Parçalama' biti ayarlıyken yönlendirici onu düşürür ve bir ICMP hatası geri göndermelidir; bu hata filtrelenirse gönderen bunu hiç öğrenemez.

Bu yüzden arıza seçici görünür. Küçük istekler tamamlanır ve bir segmenti dolduran her şey takılır, çünkü yalnızca büyük paketler atılır. Bir ping'i geçiren tünel, veri taşıyan tünel değildir.

MSS'yi sınırlamak ve nerede geçerli olduğu

MSS sınırlaması, seçilen bir noktadan geçerken SYN segmentindeki değeri yeniden yazar ve böylece iki uç da nedenini bilmeden daha küçük bir yük seçer. Linux'ta açık bir kuralla uygulanan mangle tablosu hedefidir ve istediğiniz yöndeki SYN paketlerine çarpması gerekir. Bunu tünel arayüzü ve adres aralığıyla sınırlayın, çünkü geniş bir kural tünele hiç girmeyen trafiğin davranışını değiştirir.

Etki yalnızca TCP içindir. Bir UDP uygulaması, bir QUIC oturumu ve kendi datagramlarını kuran her protokol bundan etkilenmez.

Sabit bir yol ile teşhis edin

Her seferinde tek bir değişken tutun. Boyutunu kendiniz seçtiğiniz bir paketle test edin ve çekirdek sonucu saklamak yerine bildirsin diye 'parçalama' bayrağını ayarlayın.

Arızanın nerede başladığını kaydedin: tünelin içinde, tünel arayüzünde veya kapsüllemeden sonra fiziksel yolda. Sonra bir sayıyı değiştirin ve başka bir testi değil aynı testi yineleyin. Mevcut bağlantılar pazarlık edilen MSS'yi korur, bu yüzden ilke değişikliği yalnızca yeni bir bağlantıda görünür; bu nedenle önbelleğe alınmış bir sayfa hiçbir yönde bir şey kanıtlamaz. Büyük bir yükleme çalışmaya başlarsa o yol hakkında bir şey öğrendiniz, üzerindeki her protokol hakkında değil.

Her değişikliğin düzeltmediği şeyler

Arayüzün MTU'sunu düşürmek, zaten kurulmuş bir oturumun MSS'sini değiştirmez. MSS sınırlaması bir UDP akışına yardımcı olmaz ve ICMP hatalarının yalnızca tek yönde filtrelendiği bir yolu onarmaz. Her değişiklik bir sorun sınıfını düzeltir ve gerisini tam olduğu gibi bırakır.

Hangi ayarlamayı nerede uyguladığınızı ve hangi testin farkı gösterdiğini yazın, yoksa sonraki mühendis ikisini de uygular ve hangisinin önemli olduğunu söyleme yeteneğini kaybeder. Kısıt gerçek ve kalıcıysa, onu gizleyen bir sınırlama yerine onu yansıtan bir tünel MTU'sunu tercih edin. Sınırlamak zorundaysanız kuralı dar kapsamlı ve yorumlu bırakın, çünkü açıklanmamış bir mangle kuralı varsayılan olarak kalıcı hale gelir.

İlgili makaleler