MTU nedir
MTU (Maximum Transmission Unit), bir ağ bağlantısının tek bir pakette taşıyabileceği en büyük bayt sayısıdır. Standart Ethernet için bu değer 1500 bayttır. Bir paket bu sınırı aştığında ya parçalanır (fragmentasyon) ya da parçalanmasına izin verilmiyorsa (Don't Fragment biti işaretliyse) sessizce düşürülür. VPN kullanan bağlantılarda bu sınır özellikle önemlidir, çünkü tünelleme protokolü orijinal paketin üzerine ekstra başlıklar ekler ve bu da kullanılabilir alanı azaltır.
VPN tüneli MTU'yu nasıl düşürür
Bir VPN tüneli; şifreleme, kimlik doğrulama ve kapsülleme (encapsulation) için orijinal pakete ek başlıklar ekler. Bu ek yük (overhead), 1500 baytlık bir Ethernet MTU'sundan düşülmesi gereken bayt sayısını belirler ve protokole, kullanılan şifreleme cipher'ına ve IPv4 ya da IPv6 kullanımına göre değişir. Yaygın olarak kullanılan tipik başlangıç değerleri şöyledir: WireGuard için yaklaşık 60 bayt, OpenVPN (UDP) için yaklaşık 60 bayt, IKEv2/IPsec için yaklaşık 80 bayt, L2TP/IPsec için yaklaşık 60 bayt. Bu rakamlar tipik başlangıç noktalarıdır, kesin bir garanti değildir; gerçek yük seçilen cipher'a ve yapılandırmaya göre değişebilir.
MSS nedir ve MTU ile ilişkisi
MSS (Maximum Segment Size), TCP'nin tek bir segmentte taşıyabileceği veri miktarıdır ve şu formülle hesaplanır: MTU - IP başlığı - TCP başlığı. IP başlığı IPv4'te 20 bayt, IPv6'da 40 bayttır; TCP başlığı ise 20 bayttır. Örneğin etkin tünel MTU'su 1440 bayt ise, IPv4 üzerinden MSS 1400 bayt, IPv6 üzerinden ise 1380 bayt olur. TCP bağlantısı kurulurken taraflar SYN paketlerinde kendi MSS değerlerini bildirir; bu değerin tünel üzerindeki gerçek kapasiteyi yansıtmaması, bağlantı sorunlarının kök nedenidir.
Etkin MTU ve MSS hesaplama örneği
Sayılarla göstermek gerekirse: standart Ethernet MTU'su 1500 bayt ve WireGuard'ın tipik yükü ~60 bayt olduğunda, tünel üzerindeki etkin MTU yaklaşık 1440 bayt olur. Bu MTU'dan IPv4 için MSS 1440 - 40 = 1400 bayt, IPv6 için ise başlık 20 bayt daha büyük olduğundan MSS 1440 - 60 = 1380 bayt olarak hesaplanır. IKEv2/IPsec gibi daha yüksek yük ekleyen (~80 bayt) bir protokolde aynı hesaplama farklı sonuç verir: etkin MTU 1420, IPv4 MSS 1380 bayt olur. Bazı yerel ağlar veya veri merkezi bağlantıları, standart 1500 yerine jumbo frame olarak bilinen daha yüksek MTU değerlerini (9000 bayta kadar) destekler; ancak VPN tüneli bu ağın üzerinden geçiyorsa bile, tünelin diğer ucunun ve internet yolunun desteklediği en küçük MTU geçerli olur.
Path MTU Discovery neden başarısız olur
Path MTU Discovery (PMTUD), bir bağlantı yolundaki en küçük MTU değerini otomatik olarak bulmak için tasarlanmıştır: gönderici, Don't Fragment biti işaretli büyük bir paket gönderir; yol üzerinde bu paketi taşıyamayan bir cihaz varsa, göndericiye ICMP Fragmentation Needed mesajıyla bilgi verir ve gönderici paket boyutunu küçültür. Sorun şu ki birçok güvenlik duvarı ICMP trafiğini tamamen engeller. ICMP engellendiğinde gönderici hiçbir zaman küçültme sinyalini almaz ve büyük paketler hedefe ulaşmadan sessizce kaybolur — buna "black hole" (kara delik) PMTUD sorunu denir. Bu senaryonun ayırt edici özelliği, küçük paketlerin sorunsuz geçmesi ama tünel MTU'sunu aşan büyük paketlerin hiçbir hata mesajı vermeden kaybolmasıdır — bu da sorunun kaynağını tespit etmeyi zorlaştırır.
Yaygın belirtiler
- Ping gibi küçük ICMP paketleri sorunsuz gider, ancak büyük dosya indirmeleri veya yüklemeleri belirli bir noktada tamamen takılır.
- SSH bağlantısı kurulur ve komut istemi görünür, ama dizin listeleme veya log görüntüleme gibi uzun çıktı üreten komutlarda oturum aniden donar.
- HTTPS siteleri sayfa iskeleti ve metinle kısmen yüklenir, fakat görseller ya da büyük script dosyaları hiç gelmez ve tarayıcı yükleniyor durumunda takılı kalır.
- Küçük e-postalar sorunsuz iletilirken büyük ekli dosyalar zaman aşımına uğrar.
MTU sorununu test etme
Bir bağlantıdaki gerçek MTU sınırını tahmin etmeden önce test etmek, zaman kaybını önler. Linux ve macOS'ta Don't Fragment biti işaretli bir ping göndererek belirli bir paket boyutunun parçalanmadan geçip geçmediği kontrol edilebilir; paket geçmezse sistem Frag needed veya zaman aşımı hatası döndürür. Windows'ta da benzer şekilde parçalanmayı engelleyen bir bayrakla ping atılabilir. Bu testi farklı paket boyutlarıyla (örneğin 1500'den başlayıp azalan adımlarla) tekrarlayarak, geçen en büyük paket boyutu bulunur ve buradan etkin MTU değeri geriye doğru hesaplanır. VPN tüneli üzerinden yapılan bu testte ICMP trafiğinin ara noktalarda engellenmediğinden emin olunmalıdır; aksi hâlde test sonucu yanıltıcı olabilir ve gerçek sınır olduğundan yüksek görünebilir.
ping -M do -s <boyut> <hedef>
Linux'ta parçalanmaya izin vermeden belirtilen boyutta bir ICMP paketi gönderir; paket geçerse boyut arttırılarak sınır bulunur.
Örnek: ping -M do -s 1472 10.0.0.1
MSS clamping ile çözüm
PMTUD'un ICMP engelleyen ağlarda güvenilir çalışmaması nedeniyle, VPN geçitlerinde (gateway) yaygın çözüm MSS clamping'tir: TCP bağlantısı kurulurken SYN paketindeki MSS değerini, tünelin gerçek kapasitesine göre router veya firewall seviyesinde zorla küçültmek. Bu sayede istemci ve sunucu, tünelin taşıyabileceğinden büyük segment göndermeyi baştan hiç denemez ve PMTUD'un ICMP sinyaline ihtiyaç kalmaz.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss <MSS_DEĞERİ>
SYN paketlerindeki MSS değerini belirtilen tünel kapasitesine göre sabitler; genellikle VPN gateway'inde FORWARD zincirine eklenir.
Örnek: iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
Alternatif olarak --clamp-mss-to-pmtu seçeneği kullanılabilir; bu, sabit bir değer yerine mevcut path MTU'ya göre otomatik ayarlama yapar: iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu.
Sık yapılan hatalar
- Yalnızca tünel arayüzünde MTU değerini düşürüp MSS clamping kuralını eklememek; istemci tarafında TCP hâlâ eski MSS değerini önerdiği için sorun devam eder.
- Ağ güvenlik duvarında tüm ICMP trafiğini kör bir kural ile engellemek; bu, Path MTU Discovery'yi tamamen işlevsiz bırakır ve black hole sorunlarına yol açar.
- IPv4 ve IPv6 için aynı MSS değerini kullanmak; IPv6 başlığı 40 bayt olduğundan IPv4'e göre 20 bayt daha fazla yer kaplar ve aynı değer IPv6 üzerinde paketlerin yine düşmesine neden olabilir.
- VPN protokolünün eklediği gerçek yükü ölçmeden varsayılan 1500 MTU'yu korumak; farklı protokoller (WireGuard, OpenVPN, IKEv2/IPsec, L2TP/IPsec) farklı miktarda başlık eklediği için tek bir sabit değer her yapılandırmada doğru sonuç vermez.
Etkin tünel MTU'sunu ve buna karşılık gelen MSS değerlerini elle hesaplamak yerine, temel MTU ve VPN protokolünüzün tipik yükünü girerek önerilen değerleri ve hazır iptables komutunu görebilirsiniz.
VPN tünel yüküne göre önerilen MTU ve MSS clamp değerini hesaplayın, hazır iptables komutunu alın.