İçeriğe geç
RinLayer
Sorun Giderme

MTU ve MSS Sorunları Nasıl Teşhis Edilir?

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 tablo neredeyse her zaman aynı yere çıkıyor.

2 dk
2 dk okumaSorun Giderme

Ağ sorunları içinde en çok vakit kaybettirenler tamamen çöken değil, kısmen çalışan sistemler. Bağlantı kuruluyor, ping yanıt veriyor, küçük HTTP istekleri sorunsuz dönüyor. Ama büyük bir dosya indirmeye kalktığınızda transfer donuyor veya bazı siteler hiç açılmıyor. Bu tarifi duyduğumuzda ilk baktığımız yer MTU oluyor.

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 pratik değil. 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ı. 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

Ağınız İçin Ne Yapabiliriz?

Durumunuzu anlatın, ne gerektiğini konuşalım. İlk görüşme ve kapsam çıkarma ücretsiz.