Linux'ta rota başına MTU: üç boyut denetimi, tek rota
Arabirim MTU'su, rota MTU'su ve MSS sınırı farklı katmanlarda çalışır. Bütçeyi aramayı kazanan rotaya bağlayın ve değişikliği geri alınabilir tutun.
Bir Linux istemcisindeki üç ayar da «paketleri küçült» gibi okunur ve farklı katmanlarda çalışır. Arabirim MTU'su cihazın gönderdiği her paketi sınırlar. Rota MTU'su o rotayı kullanan paketleri sınırlar ve tek bir VPN hedefi için genellikle gerçekten istediğiniz budur. TCP MSS sınırı iki ucun ne üzerinde anlaştığını değiştirir ve UDP için hiçbir şey yapmaz.
Aynı düğme gibi görünen üç denetim
Seçmeden önce yan yana koyun, çünkü yanlış satırı seçmek işe yaramayan tavsiyelerin çoğunu açıklar:
| Control | Scope | What it cannot fix |
|---|---|---|
| Interface MTU | Every packet the device sends | Nothing, but it over-constrains unrelated traffic |
| Route MTU | Packets using that route | A send that the lookup never routes there |
| MSS clamp | TCP handshake on that path | UDP payload sizes and ICMP |
Tüm makine için Ethernet MTU'sunu düşürmek bu düzeltmenin kaba hâlidir. İşe yarar ve ana bilgisayardaki diğer her uygulamayı da cezalandırır, yolları sorunsuz olanlar dahil. Rota başına bir değer aynı niyeti yan maliyet olmadan ifade eder.
Karşılaştırma yalnızca ana bilgisayarın kendi ürettiği trafik için geçerlidir. Başka bir istemci için paket iletmek onun kendi yolunu ve tünelin dış bütçesini içerir, bu ana bilgisayardaki rota metriği o sınırı aşmaz.
Bütçeyi aramayı kazanan rotaya bağlayın
Örnek bir IPv4 rota kaydı şöyle görünür:
ip -4 route get 10.60.0.20
ip -4 route add 10.60.0.0/16 dev tun-office src 10.90.0.2 mtu 1380
Kaydı yapıştırılacak bir değer değil, niyetin tarifi olarak okuyun. Önek, aygıt ve tercih edilen kaynak gerçek yapılandırmayla eşleşmelidir ve sayı blog yazısından değil, kapsüllenmiş yol hakkındaki kanıttan gelmelidir. Rota MTU'su iç IP paketini sınırlar; bu, 1380 baytlık bir TCP yükü ya da 1380 baytlık şifrelenmiş dış paketle aynı şey değildir.
Bir şey eklemeden önce aramanın gerçekte nerede çözüldüğüne bakın. İlke kuralları olan bir ana bilgisayar belirli bir hedefi main dışında bir tablodan yönlendirebilir ve yalnızca main tablosunda var olan metrik o istek için görünmezdir. Karşılaştırın ip -4 route show table all ile ip route get yanıtını, kurallar kullandığında işaret veya ad alanı bağlamı dahil. İkisi uyuşmuyorsa metriğe ihtiyaç duyan, yanıt veren tablodur, daha düzenli görünen değil.
mtu, mtu lock değildir
Varsayılan olarak çekirdek yol MTU'sunu hâlâ ICMP geri bildiriminden güncelleyebilir, yol MTU keşfi bunun içindir. Ekleme lock bunu durdurur. Bu başka bir karardır, aynı sayıyı korumanın daha güçlü bir yolu değildir ve IPv4 için «bölme» bitinin belgelenmiş işlenişini değiştirir.
Yolu ölçtüyseniz ve ne gelirse gelsin değerin sabit kalmasını istiyorsanız kilitleme makuldür. Ağ meşru boyut geri bildirimi gönderdiğinde kötü bir varsayılandır, çünkü çekirdek artık uyum sağlayamaz ve arıza başka bir belirtiye kayar.
ICMP yolda bir yerde filtreleniyorsa hiçbir rota ayarı bunu düzeltmez. Düzeltme filtreye aittir ve daha küçük MTU, gerçek arızayı bir sonraki yol değişikliğine kadar saklayan bir geçici çözümdür.
Tünel yazılımı kendi boyut düğmelerini ekler
OpenVPN- mssfix belgelenmiş UDP tünel durumu için TCP segment boyutunu ayarlar. TCP konuşması üzerinde çalışır, yani işletim sisteminin rota MTU'sunun başka bir yazımı değildir ve görüşmeyi yok sayan bir UDP hizmetine yardımcı olamaz.
Rota MTU'sunu, arabirim MTU değişikliğini ve MSS sınırını aynı değişiklik penceresinde üst üste koymayın. Sorun kaybolursa hangisinin önemli olduğunu bilemezsiniz ve tuttuklarınız yıllarca trafiği kimsenin hatırlamadığı bir nedenle kısıtlar.
Geri alınabilir yapın, sonra kanıtlayın
Rotanın gerçek sahibi değişikliğin yeniden bağlanmadan sonra kalıp kalmayacağına karar verir. Rotayı dinamik olarak kuran bir VPN istemcisi genellikle onu metriğiniz olmadan yeniden oluşturur ve elle yapılan ip route add bir gün sonra başarısız olan bir düzeltme gibi görünür. Değeri yöneticinin yapılandırmasına koyun ve geçici bir deney gerekiyorsa önce özgün rotayı kaydedin.
Takılan işlemi yapan yeni bir bağlantıyla test edin, sonra amaçlanan özel rotanın hâlâ kazandığını ve ilgisiz hedeflerin değişmediğini doğrulayın. Tüneli yeniden bağlayın ve rotayı yeniden okuyun, çünkü yeniden bağlanmada kaybolan bir değer düzeltme değildir.
Kanıtlar değişikliği desteklemiyorsa geçersiz kılmayı yöneticisi üzerinden kaldırın ve rotayı silmek yerine özgün rota özniteliklerini geri yükleyin. Sonra neyi hangi yolda ölçtüğünüzü not edin, böylece sonraki kişi gerçek bir iyileştirmeyi çalışır bırakılmış bir deneyden ayırt edebilir.