İçeriğe geç
RinLayer
Sorun Giderme

MTU ve MSS: Sessizce Kopan Bağlantıların Sebebi

Ping çalışıyor, küçük istekler dönüyor, ama büyük dosyalar yarıda kalıyor ve bazı siteler hiç açılmıyor. Bu tablonun arkasında çoğu zaman tek bir sorun vardır.

2 dk
2 dk okumaSorun Giderme

Ağ sorunları arasında en çok zaman kaybettireni, kısmen çalışan sorunlardır. Bağlantı kuruluyor, ping yanıt veriyor, küçük HTTP istekleri sorunsuz dönüyor — ama büyük bir dosya indirmeye çalıştığınızda transfer donuyor ya da belirli siteler hiç açılmıyor. Bu tarif, klasik bir MTU sorununun tarifidir.

Sorun nereden çıkıyor?

Ethernet'te standart MTU 1500 bayttır. Ancak araya bir tünel girdiğinde — IPsec VPN, GRE, PPPoE, VXLAN — her paket ek başlık taşır ve taşınabilecek gerçek yük küçülür. Gönderen taraf hâlâ 1500 baytlık paket üretiyorsa, bu paketler tünelden geçemez.

Normalde bunu Path MTU Discovery (PMTUD) çözer: yol üzerindeki bir cihaz "paket çok büyük, parçalanamıyor" anlamına gelen bir ICMP mesajı gönderir, gönderen taraf paket boyutunu küçültür. Sorun şu ki bu ICMP mesajları çok yaygın biçimde güvenlik duvarlarında engellenir. Mesaj ulaşmayınca gönderen küçültmez, paket düşmeye devam eder ve bağlantı sessizce asılı kalır.

Gerçek MTU'yu ölçmek

Parçalanmaya izin vermeyen (DF bit set) ping ile ikili arama yaparak yol üzerindeki gerçek MTU'yu bulabilirsiniz. Aşağıdaki komutlarda verilen boyut IP ve ICMP başlıklarını içermez; toplam MTU için 28 bayt eklemeniz gerekir.

bash
# Linux / macOS  (1472 + 28 = 1500)
ping -M do -s 1472 -c 2 hedef.example.com

# Windows
ping -f -l 1472 hedef.example.com

# Basarisizsa boyutu dusurerek deneyin: 1452, 1422, 1400, 1300 ...

Hangi boyutta geçmeye başladığını bulduğunuzda, o değere 28 ekleyerek yol MTU'sunu elde edersiniz. Sık karşılaşılan değerler: PPPoE için 1492, IPsec tünelleri için genellikle 1400 civarı.

Kalıcı çözüm: MSS clamping

MTU'yu her uç noktada tek tek ayarlamak sürdürülebilir değildir. Bunun yerine, sınır cihazında TCP el sıkışması sırasında ilan edilen MSS değerini yol MTU'suna göre baskılamak (MSS clamping) çok daha sağlam bir çözümdür. Böylece istemciler kendiliğinden doğru boyutta paket üretir.

text
# Cisco IOS - tunel arayuzunde
interface Tunnel0
 ip tcp adjust-mss 1360

# Linux (iptables)
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
  -j TCPMSS --clamp-mss-to-pmtu

# MikroTik RouterOS
/ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn \
  action=change-mss new-mss=clamp-to-pmtu

MSS değerini seçerken kural şudur: yol MTU'sundan 40 bayt çıkarın (20 bayt IP + 20 bayt TCP başlığı). 1400 baytlık bir tünel MTU'su için 1360 uygun bir başlangıç değeridir.

ICMP'yi tamamen kapatmayın

MSS clamping TCP trafiğini kurtarır, ancak UDP tabanlı protokoller — QUIC, bazı VPN ve ses trafiği — hâlâ PMTUD'a bağımlıdır. Güvenlik duvarınızda ICMP'yi topyekûn kapatmak yerine, en azından "fragmentation needed" (ICMP type 3, code 4) mesajlarına izin verin. Bu, güvenliği zayıflatmadan PMTUD'un çalışmasını sağlar.

MTUMSSVPNPMTUD
Tüm yazılar

Projenizi Konuşalım

Ağ altyapınızı güçlendirmek için uzman ekibimizle iletişime geçin; ilk değerlendirme ücretsizdir.