DNS aramaları bazen 5 saniye sürer


11

Bazı ana bilgisayar adı aramalarının tamamlanması birkaç saniye süren Debian Wheezy'yi çalıştıran bir VM'im var. Garip bir şekilde, ile yapılan aramalar getaddrinfo()etkilenir, ancak etkilenmez gethostbyname().

Yerel çözümlerin kırılma olasılığını dışlamak için Google çözümleyicilerine geçtim, bu yüzden şöyle /etc/resolv.confgörünüyor:

search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8

Benim nsswitch.confhattı var:

hosts: files dns

ve /etc/hostsalışılmadık bir şey içermiyor.

Ben denerseniz telnet webserver 80, bir ad çözünürlüğü almadan önce birkaç saniye boyunca asılı kalır. Bir ltraceçıkış [1], asmanın bir getaddrinfo()çağrıda olduğunu gösterir :

getaddrinfo("ifconfig.me", "telnet", { AI_CANONNAME, 0, SOCK_STREAM, 0, 0, NULL, '\000', NULL }, 0x7fffb4ffc160) = 0 <5.020621>

Ancak, tcpdumpad sunucusunun hemen yanıt verdiğini ve telnetengellenmeyen yalnızca ikinci yanıtta olduğunu gösterir . Cevaplar aynı görünüyor:

05:52:58.609731 IP 192.168.1.75.43017 > 8.8.4.4.53: 54755+ A? ifconfig.me. (29)
05:52:58.609786 IP 192.168.1.75.43017 > 8.8.4.4.53: 26090+ AAAA? ifconfig.me. (29)
05:52:58.612188 IP 8.8.4.4.53 > 192.168.1.75.43017: 54755 4/0/0 A 219.94.235.40, A 133.242.129.236, A 49.212.149.105, A 49.212.202.172 (93)

[...five second pause...]

05:53:03.613811 IP 192.168.1.75.43017 > 8.8.4.4.53: 54755+ A? ifconfig.me. (29)
05:53:03.616424 IP 8.8.4.4.53 > 192.168.1.75.43017: 54755 4/0/0 A 219.94.235.40, A 133.242.129.236, A 49.212.149.105, A 49.212.202.172 (93)
05:53:03.616547 IP 192.168.1.75.43017 > 8.8.4.4.53: 26090+ AAAA? ifconfig.me. (29)
05:53:03.618907 IP 8.8.4.4.53 > 192.168.1.75.43017: 26090 0/1/0 (76)

Ana bilgisayar güvenlik duvarı günlüklerini kontrol ettim ve bağlantı noktası 53'teki hiçbir şey engellenmiyor.

İlk DNS yanıtının yok sayılmasına neden olan şey nedir?

[1] Yapının ltrace.confiçinde görebilmek için birkaç satır ekledim addrinfo.


VM'nin NIC kurulumu nasıl? Köprülü? NAT?
slm

NATted. NAT'ın tam olarak nerede uygulandığından emin değilim (ESX veya yukarı akış tarafından); Bunun önemli olduğunu düşünüp düşünmediğini öğrenebilirim.
Flup

Bunu etkileyen NAT + VM olduğundan şüphelenirim.
slm

Olabilir - aşağıda Kempniu'nun cevabı hakkındaki yorumlarıma bakın.
Flup

Ağa bağlıydı, ancak buna neden olan NAT değil - aşağıdaki cevabımı görün.
Flup

Yanıtlar:


13

İlk DNS yanıtı yok sayılmaz. getaddrinfo()ilk AAAA sorgusuna (ID: 26090) yanıt alana kadar geri dönmedi. Buradaki asıl sorun, makinenizin neden AAA sorgusuna yanıtı hemen almaması, A sorgusu için yanıt alması (ID: 54755).

Arasındaki farklardan biri getaddrinfo()ve gethostbyname()eski destekler IPv4 ve IPv6 hem ikincisi yalnızca IPv4 desteklerken olmasıdır. Aradığınızda Yani getaddrinfo()ile ai_family0 (setin AF_UNSPEC) onun için bir yanıt alır (veya bir zaman aşımı vurur) kadar, bu döndürmez hem sağlanan alan adı için A ve AAAA sorguları. gethostbyname()yalnızca A kaydı için sorgular.

Sorununuza neyin neden olabileceğini uzaktan belirlemek zor, özellikle de bazı tcpdumpçıktıları kestiniz . Bir şey VM'niz ve Google Herkese Açık DNS çözümleyicileri arasındaki DNS trafiğini seçici olarak filtreliyor / düşürüyor olabilir. Bir KVM Debian Wheezy VM kullanarak sorununuzu yeniden oluşturmaya çalıştım, ama telnet ifconfig.mehemen hemen Trying <IP_address_here>...hattı yazdırdı (yani o zamana kadar adı çözdü anlamına geliyor).


Ayrıntılı cevabınız için teşekkürler. Tcpdump'tan hiçbir şey kesmedim, sadece duraklamanın nerede olduğunu netleştirmek için bir çizgi ekledim. Bana kesinlikle devam etmem gereken bir şey verdin; İki kütüphane çağrısı arasındaki önemli farkın farkında değildim.
Flup

Artık DNS ile ilgili paketler makinenize çarpmazsa, bir şey muhtemelen trafiğini filtreliyordur (amaca uygun değildir). Her neyse, bir çözüm bulursanız, lütfen onu burada paylaşır mısınız?
Kempniu

1
Gerçekten yapacağım. Bir test çözümleyici ayarladıktan sonra, her seferinde bir yanıt paketinin - sorumdan gelen yanıtın - düştüğünü kesin olarak görebiliyorum. VMware altyapısında veya yakınında bir şeylerin olduğundan şüpheleniyorum, bu yüzden şeylerin o tarafına bakan muadili ile iletişime geçtim. Dibe indiğimde geri dönüp ayrıntı ekleyeceğim. Tekrar teşekkürler!
Flup

Kendi cevabıma çözüm eklendi. Yardımınız için bir kez daha teşekkürler.
Flup

9

Bu, VMware altyapısının önünde bulunan Juniper güvenlik duvarındaki aşırı kısıtlayıcı bir kural setinden kaynaklandı.

Konuşmanın her iki tarafını da görebilmem için bir test çözümleyici oluşturdum ve Kempniu'nun mükemmel cevabında tespit edilen eksik paket gerçekten de yol boyunca bir yere bırakılıyordu. Bu cevapta belirtildiği gibi, getaddrinfo()hiçbir adres ailesi belirtilmemişse, geri dönmeden önce (veya benim durumumda, zaman aşımına uğramadan) desteklenen tüm ailelerle ilgili cevapları beklemez .

Ağı çalıştıran meslektaşım

Juniper güvenlik duvarındaki varsayılan davranış, söz konusu oturumla eşleşen bir DNS yanıtı alındığında DNS ile ilgili bir oturumu kapatmaktır.

Güvenlik duvarı IPv4 yanıtını görüyordu, VM'nin sorgusunu yanıtladığını ve bu port için gelen yolu kapattığını görüyordu. Bu nedenle aşağıdaki IPv6 yanıt paketi bırakıldı. Her iki paketin neden ikinci kez yaptığını bilmiyorum, ancak güvenlik duvarındaki bu özelliği devre dışı bırakmak sorunu çözdü.

Bu Juniper KB'den ilgili bir alıntıdır:

DNS Yanıt paketlerinin bırakıldığı bir senaryo:

  1. İlk DNS sorgu paketi güvenlik duvarına çarptığında ve yapılandırılmış bir izin ilkesi olduğunda DNS trafiği için bir oturum oluşturulur. Varsayılan zaman aşımı 60 saniyedir.
  2. Oturum kapatılmadan hemen önce yeni bir DNS sorgusu iletilir ve varolan bir oturumla eşleştiği için (kaynak ve hedef bağlantı noktası / IP çifti her zaman aynı olduğundan), güvenlik duvarı tarafından iletilir. Oturum zaman aşımının yeni gelen pakete göre yenilenmediğini unutmayın.
  3. İlk DNS sorgusu yanıtı (yanıt), zaman aşımının ne kadar kaldığına bakılmaksızın aygıta çarptığında oluşturulan DNS oturumu eskidir.
  4. Güvenlik duvarından bir DNS yanıtı iletildiğinde, oturum eskidir.
  5. Sonraki tüm DNS yanıtları, hiçbir oturum olmadığından güvenlik duvarı tarafından bırakılır.

Bu yanıtı yükseltmeyi düşünüyorsanız, lütfen Kempniu'nun cevabını da kaldırın. Onsuz hala VM'de bazı yapılandırma problemleri bulmaya çalışırken dolanırdım.


1
Aynı semptomları Debian 8.2'de de yaşadık. Bizimki farklı bir nedenden kaynaklanıyordu ve "çözüm" farklıydı (istemci tarafı). Özel sorunumuz ve daha genel sorunumuz hakkında blog yazdım: philippecloutier.com/… Flup ve Kempniu'ya teşekkür etmek istiyorum, çünkü sorunuz ve cevaplarınız beni doğru yola koyuyor.
Philippe Cloutier
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.