Zaman damgaları etkinleştirildiğinde bazı SYN paketlerine yanıt yok


9

Ubuntu 12.04.3 (çekirdek 3.8.0-31-jenerik) çalıştıran bir makinede ("sunucu") dinleyen bir TCP sunucum var. 2 farklı istemci makineden bağlantı alır. Makine A Ubuntu 12.04.4 (3.11.0-17-jenerik) çalıştırıyor ve Makine B Ubuntu 11.10 (3.0.0-32-sunucu) çalıştırıyor.

Sunucuda TCP zaman damgaları etkinleştirilirse (sysctl net.ipv4.tcp_timestamps = 1), bazen A makinesinden alınan SYN paketleri "yoksayılır". Sunucuda tcpdump kullanarak (karışık olmayan modda) SYN'lerin TAMAM geldiğini ve doğru sağlama toplamı ile görebiliyorum - sadece yanıt yok - SYN / ACK ve RST yok. Makine A pes etmeden önce SYN'yi birkaç kez iletir. A makinesinde çalışan istemci yazılımı (bu durumda wget) hemen yeni bir bağlantıyla yeniden dener ve başarılı olur ve anında bir SYN / ACK alır.

Makine B'nin aynı sunucu ile hiçbir sorunu yok ve trafiği normal görünüyor - makine A ile aynı TCP seçeneklerini kullanıyor (yakalama dosyalarından gördüğüm kadarıyla). Sunucudaki TCP zaman damgalarını devre dışı bırakmak, her şeyin gerektiği gibi çalışmasını sağlar.

Yoksayılan SYN paketlerindeki zaman damgaları benim için geçerli görünüyor ancak bu yüzden neden sorunlara neden olduklarını veya altta yatan neden olup olmadıklarını bilmiyorum.

Buraya anonim bir pcap koydum https://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap . Sunucuda (10.76.0.74) A makinesinin (10.4.0.76) başarıyla bir HTTP GET (paketler 1 ila 10) gerçekleştirdiğini ve ardından 1 saniye sonra aynı URL'yi tekrar almaya çalıştığını (11 ila 17 paketleri) gösterdi. SYN'leri yoksayıldı. Paket 18 ila 27 başka bir başarıdır.

Bunun " Neden bir sunucu bir SYN paketine yanıt olarak bir SYN / ACK paketi göndermeyesiniz " bölümünde açıklananlara benzer bir sorun olduğundan ve zaman damgalarını devre dışı bırakmanın geçici bir çözüm olduğunu anlıyorum. Bu sadece bir hata mı?

Çalışan yerel güvenlik duvarı yok. Sunucu oldukça az sayıda TCP bağlantısı (bir seferde yaklaşık 32K) kullanır ancak bol miktarda boş bellek / CPU'ya sahiptir. Pcap'ta gösterilen test sırasında A makinesi ile sunucu arasında başka TCP bağlantısı yoktu. Sunucu uygulamasının kabul kuyruğunun aniden dolduğuna dair bir işaret yoktur (bunun yanında her iki istemciyi de etkilemesi gerekir). Paketler sunucuda alınan bir pcap Tamam görünüyor gibi araya giren bir ağ cihazı şeyleri kırıyor gibi görünmüyor.

Aslında bunu ubuntu forumlarında yayınladım, ancak gezide bu daha uygun bir yer olabilir. Bir ipucu ödünç almayı umuyorum.

Yanıtlar:


5

Benim durumumda, aşağıdaki komut Linux sunucusundan gelen SYN / ACK yanıtlarının eksik olması ile ilgili sorunu çözdü:

sysctl -w net.ipv4.tcp_tw_recycle=0

TCP zaman damgaları sonuçta (PAWS, pencere ölçeklendirme, vb.) Yararlı olduğu için TCP zaman damgalarını devre dışı bırakmak daha doğru olduğunu düşünüyorum.

tcp_tw_recycleBirçok NAT yönlendiricisi zaman damgalarını koruduğu ve böylece aynı IP'den zaman damgaları tutarlı olmadığı için PAWS devreye girdiğinden , belgelerin açıkça etkinleştirilmesinin önerilmediğini belirtir .

   tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)
          Enable fast recycling of TIME_WAIT sockets.  Enabling this
          option is not recommended for devices communicating with the
          general Internet or using NAT (Network Address Translation).
          Since some NAT gateways pass through IP timestamp values, one
          IP can appear to have non-increasing timestamps.  See RFC 1323
          (PAWS), RFC 6191.

Söz konusu makinelerin hepsi yükseltildi ve sorunun artık gerçekleşmediğine inanıyorum, bu yüzden şimdi deneyemiyorum. Bu durumda, istemci ve sunucu arasında NAT bulunmamıştır. Hala şüpheli benim gibi bir hata gibi görünüyor.
user133831
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.