Bir DNS kaydının sahip olabileceği maksimum IP sayısı nedir?


30

Garip bir fikrim var - birden fazla kişinin / kuruluşun aynı uygulamayı barındırmasına izin verin ve tüm düğümlerine tek bir etki alanı adıyla erişilebilir olmasına izin verin. Bu, diyelim ki, kullanılabilirliğin feda edilmediği gerçekten dağıtılmış bir sosyal ağa sahip olmak için (yani, kullanıcılar farklı sağlayıcıların URL'lerini hatırlamak zorunda kalmazlar ve sonra bir sağlayıcı düştüğünde, diğerine geçin)

Bunu başarmak için birden fazla IP içeren bir DNS kaydının kullanılabileceğini düşündüm.

Peki, tek bir DNS A kaydı kaç tane IP tutabilir? Bu cevap 30 civarında olduğunu söylüyor, ancak buradaki kullanım farklı. Yukarıdaki senaryoda, belirli bir ISS'nin 30'unu başka bir ISP'yi başka bir önbelleğe aldığı sürece yalnızca 30 önbelleğe alması umurumda olmaz.


2
Anycast'ı alıyor musun ?
Yalan Ryan

4
Bir süre önce, “X maksimum sayısı kaçtır?” Diye sormak zorunda kalırsanız öğrendim. Muhtemelen yanlış kullanıyorsunuz ...
LordOfThePigs

Zorunlu olmamakla birlikte;) Ama genel olarak evet
Bozho

Yanıtlar:


78

Feragat: Alınma ama bu gerçekten kötü bir fikir. Bunu kimsenin gerçek hayatta yapmasını önermiyorum.

Ancak sıkılmış bir BT görevlisine bir laboratuvar verirseniz, komik şeyler olacak!

Bu deney için, Server 2012 R2 üzerinde çalışan bir Microsoft DNS sunucusu kullandım. Bir DNS bölgesini Active Directory'de barındırmanın zorlukları nedeniyle, AD ile tümleşik olmayan testing.com adlı yeni bir birincil bölge oluşturdum .

Bu betiği kullanarak:

$Count = 1
for ($x = 1; $x -lt 256; $x++)
{
    for ($y = 1; $y -lt 256; $y++)
    {
        for ($z = 1; $z -lt 256; $z++)
        {
            Write-Host "1.$x.$y.$z`t( $Count )"
            $Count++
            dnscmd . /RecordAdd testing.com testing A 1.$x.$y.$z
        }
    }
}

testing.testing.com.Tam anlamıyla 1.1.1.1'den 1.1.255.255'e kadar her IPv4 adresini içeren , isim için 65025 ana bilgisayar kaydı oluşturdum.

Daha sonra, 65536 (2 ^ 16 bit) toplam A kaydı hatasız olarak kırabildiğimden emin olmak istedim ve yapabileceğimi düşündüm, muhtemelen 16581375'e (1.1.1.1 - 1.255'e kadar gidebileceğimi farz ediyorum). .255.255,) ama burada oturup bu senaryoyu bütün gece boyunca izlemek istemedim.

Çok fazla kayıt var

Bu nedenle, sunucunuzdaki farklı IP'lerle aynı ad için bir bölgeye ekleyebileceğiniz A kaydı sayısının pratik bir sınırının olmadığını söylemek güvenlidir.

Ama aslında müşterinin bakış açısına göre çalışacak mı?

İşte Wireshark tarafından bakıldığı gibi müşterimden ne alıyorum:

iki sorgu (Resmi tam boyut için yeni bir tarayıcı sekmesinde açın.)

nslookup

TCP sorgusu

Gördüğünüz gibi, istemcimden nslookup veya ping kullandığımda, otomatik olarak iki sorgu yayınlar - bir UDP ve bir TCP. Bildiğiniz gibi, bir UDP datagramına sığdırabileceğim en fazla 512 bayttır, bu yüzden bir limit aşıldığında (20-30 IP adresi gibi) birinin TCP kullanması gerekir. Ancak TCP ile bile, test.testing.com için yalnızca çok küçük bir A kayıt alt kümesi elde ediyorum. TCP sorgusu başına 1000 kayıt döndürüldü. A kayıtları listesi, ardışık her bir sorguda, tam olarak DNS'nin nasıl çalışacağını bekleyeceğiniz gibi, 1 sırayla döner. Bunların arasında robin turu yapmak milyonlarca sorguyu gerektirecekti.

Bunun, büyük ölçüde ölçeklenebilir, esnek sosyal medya ağınızı oluşturmanıza nasıl yardımcı olacağını anlamıyorum, ancak yine de cevabınız var.


Düzenleme: İzleme yorumunuzda, bunun neden genellikle kötü bir fikir olduğunu düşündüğümü soruyorsunuz.

  • Diyelim ki ortalama bir internet kullanıcısıyım ve servisinize bağlanmak istiyorum. Web tarayıcımda www.bozho.biz yazarım. Bilgisayarımdaki DNS istemcisi 1000 kayıt geri alıyor. Eh, kötü şans, listedeki ilk 30 kayıt cevap vermiyor çünkü A kayıtları listesi güncel tutulmuyor ya da internetin bir kısmını etkileyen büyük çaplı bir kesinti var. Diyelim ki web tarayıcım IP’ye geçmeden bir sonraki adım denemeden önce IP’de 5 saniyelik bir zaman aşımına sahip. Şimdi burada oturup sitenizin yüklenmesini bekleyen 2 buçuk dakika boyunca dönen bir kum saatine bakıyorum. Bunun için kimsenin zamanı yok. Ve web tarayıcımın ya da hizmetinize erişmek için kullandığım herhangi bir uygulamanın ilk 4 ya da 5 IP adresinden daha fazla çaba göstereceğini bile farz ediyorum. Muhtemelen olmaz.

  • Otomatik temizleme özelliğini kullanıyorsanız ve A kayıtlarının listesini taze tutma umuduyla DNS bölgesinde doğrulanmamış veya anonim güncellemelere izin veriyorsanız, bunun ne kadar güvensiz olacağını hayal edin! Müşterileri, bölgeyi güncellemek için önceden sizden aldıkları bir müşteri TLS sertifikasına ihtiyaç duydukları bir sistemi tasarlasanız bile, gezegenin herhangi bir yerinden ödün vermeyen bir müşteri botnet başlatacak ve hizmetinizi mahvedecektir. Geleneksel DNS, kalabalığı temin etmeden, olduğu gibi, güvensiz bir şekilde güvensiz.

  • Geniş bant genişliği kullanımı ve atık. Her DNS sorgusu 32 kilobayt veya daha fazla bant genişliği gerektiriyorsa, bu iyi bir şekilde ölçeklenmeyecektir.

  • DNS yuvarlak robin düzgün yük dengeleme yerine geçmez. Bir düğümden aşağı inen veya hiçbir şeyin ortasında kullanılamayan hale gelmenin bir yolu yoktur. Kullanıcılarınıza, bağlandıkları düğüm düşerse ipconfig / flushdns yapma talimatı verecek misiniz? Bu tür meseleler zaten GSLB ve Anycast gibi şeyler tarafından çözüldü.

  • Vb.


15
Yavaş .... alkış ..... efendim.
mfinni

4
Buna ek olarak, A kayıtları BIND üzerinden sorgulanıyorsa (bu, DNS sunucularının çoğunda çalışan), A kayıtlarını karıştırır ve bundan belirli miktarda A kaydı döndürür. Bu sayı MAX_SHUFFLEBIND kaynak kodunda tanımlanmıştır (varsayılan olarak 32'dir).
ub3rst4r,

1
Meraktan, neden tavsiye etmiyorsun? Kesinlikle çok garip bir şey, ancak 'iyi' bir etki alanı altında istek sunan hizmet veren kötü niyetli düğümlerin yanı sıra hala başarısız olan düğümler hala istek alıyor, başka ne yanlış gidebilir :-)
Bozho

Ayrıca, kullanıcı deneyimi sürekli değişmez mi? Her düğüm tam bir çoğaltma mı? Başkalarının kontrolünde olmaları halinde bunun nasıl olmasını sağlarsınız? Farklılarsa, insanlar bugün bir siteye, yarın da başka bir siteye sahip olacaklar. Şahsen, bu beni deli ederdi!
Brandon

18

Soruyu belirtildiği gibi cevaplamak için ("tek bir DNS A kaydı kaç IP alabilir?") Cevabı çok basittir: tek bir Akayıt tam olarak bir adres tutar. Ancak Aaynı isim için birden fazla kayıt olabilir .


10

Her IPv4 adresi yanıtta 16 bayt alacaktır. Her IPv6 adresi cevapta 28 bayt alacaktır.

Cevabın 512 bayta uyacağından emin olmanız şiddetle tavsiye edilir. Bu, yaklaşık 25 IPv4 adresine ve 14 IPv6 adresine izin verir (pakette de başka bilgilere ihtiyacınız olduğunu düşünerek). Tam sınır, etki alanı adınızın uzunluğuna bağlıdır.

Hem 25 IPv4 adresiniz hem de 14 IPv6 adresiniz varsa, ayrı sorgularda IPv4 ve IPv6 adresleri isteyen istemcilere güveniyorsunuz. Müşteri her iki adres türünü de tek bir sorguda isterse (bu nadir görülür), daha sonra aşağı inmeniz gerekir.

Yanıt boyutu 512 baytı aşarsa, istemci ve sunucu EDNS'yi destekliyorsa UDP üzerinden çalışabilir. EDNS olmadan, müşteri kesilmiş bir yanıt alır ve TCP üzerinden yeniden denemek zorunda kalır. Bu, iletişimi 1 ila 4 gidiş-dönüş arasında arttırır. Ancak daha da kötüsü, bazen TCP üzerinden DNS'in çalışmasını engelleyen yanlış yapılandırmalar olabilir.

DNS katmanında sorunlara neden olmadan 14'den fazla adrese cevap yazabilseniz bile, çok kullanışlı olması muhtemel değildir. Bir adrese başvurmadan ve bir sonrakine geçmeden önce müşteri tarafından kullanılan zaman aşımı genellikle önemlidir.

Bu zaman aşımını bir defa bile beklemek zorunda kalmamak, kullanıcı deneyiminin zayıf olmasına neden olabilir. Müşterinin yanıt almadan önce 14 adrese gitmek zorunda kalması durumunda, kullanıcının 13 zaman aşımı beklemesi gerekir.


2
Her DNS bugünlerde EDNS'yi desteklemelidir. DNS yanıtlarındaki 512 baytlık sınır DNSSEC nedeniyle artık pratik değildir.
Barmar

@Barmar Ancak, açtıysanız, sunucunuzun yükseltme saldırılarında kullanılması riski oldukça yüksektir. En son kontrol ettiğimde onu kapatmanın, amplifikasyon saldırılarını hafifletmek için yapılabilecek tek şey olduğunu gördüm. EDNS bir çerez alanıyla genişletilinceye ve bunun için yaygın bir şekilde konuşlandırılana kadar, 512 bayttan daha büyük yanıtlar için desteğin kapatılması yine de pratiktir.
kasperd

1
EDNS'yi en iyi uygulama olarak devre dışı bırakmak için arama sonuçlarına pek yaklaşmıyorum. Alıntı lütfen? Özyinelemeli sunucuları kaldıran amplifikasyon saldırıları, ağınız kaynak adres doğrulaması yapmıyorsa EDNS'nin etkin olup olmamasına bakılmaksızın gerçekleşecektir. Yalnızca yetkili bir sunucudan bahsetmiş olsak bile, bu yalnızca, bu kadar veriyi tek bir yanıtta döndürecek şekilde yapılandırdığınızda , bu noktada devre dışı bırakmanın size yardımcı olmayacağı bir durumla ilgilidir.
Andrew B

@AndrewB Bu tavsiyeyi nerede okuduğumu hatırlamıyorum. Amplifikasyon saldırılarının nasıl önlenebileceği ve hepsinin emileceği konusunda birçok farklı öneri okudum. Yazık ki, EDNS, DNS kullanarak yapılan yükseltme saldırılarına etkili bir çözüm olabilecek bir tanımlama bilgisi sunmadı. Cevabımda önerdiğim şey, sorguya o kadar çok kayıt koymaktan kaçınmak, yanıtların verimli olması için EDNS'yi etkinleştirmek üzere başkalarına güveniyor olmanızdır.
kasperd

@AndrewB Bir bölgeye 512 bayttan fazla A kaydı koyarsam ve EDNS'nin etkin olduğu yetkili bir DNS sunucusunda barındırıldığından emin olursam, bu yanıtların büyüklüğüne izin vermeyen özyinelemeli çözümleyicilerin kullanıcıları için bir sorun olabilir. Bu yüzden A kayıtlarının sayısını düşük tutmanızı öneriyorum. Ayrıca, bu kadar çok A kaydının algılanan faydasının neden bu kadar alakalı olmadığını açıkladım.
kasperd

5

Tarif ettiğiniz şey özellikle yeni bir fikir değil. Diğer cevaplar zaten ele alındığı gibi, bir cevapta kaç tane A kaydına sahip olabileceğinizle sınırlıdır, ancak bu toplamda kaç tane A kaydı olabileceği hakkında hiçbir şey söylemez.

Örneğin, bir A kaydı için herhangi bir sorguyu rastgele IP ile yanıtlayan bir DNS sunucusu uygulayabilirsiniz. Yeterince sorgulandığında, bu 4294967296 benzersiz A kaydıyla sonuçlanır: her IPv4 adresi için bir tane.

Dediğim gibi, bu yeni bir fikir değil. Aslında, Akamai'nin nasıl çalıştığı (ve muhtemelen birçok CDN) bir kısmı. Herhangi bir Akamai alanı için elde ettiğiniz A kaydı, kara büyü DNS sunucuları tarafından belirlenir. Bahse girerim aldığınız cevap dinamik yük dengelemesine ve coğrafi kaygılara bağlıdır.

Örneğin, bir338.g.akamaitech.net seçtim. Şu an bilgisayarımda şuna bakarsam, Comcast'ten DHCP atanmış ad sunucusu kullanan:

$ host a338.g.akamaitech.net
a338.g.akamaitech.net has address 23.3.98.65
a338.g.akamaitech.net has address 23.3.98.89

Ya Google’ın DNS’sini sorarsam?

$ host a338.g.akamaitech.net 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases: 

a338.g.akamaitech.net has address 23.3.96.152
a338.g.akamaitech.net has address 23.3.96.120

Bahse girerim denersen, farklı bir cevap alırsın. Akamai'nin belirli bir kaynağa hizmet ettiği kaç tane uç sunucu var? İkiden fazla bahse girerim.


Teşekkürler. Evet, CDN'lerin bu şekilde çalıştığını biliyorum, fakat bence alt alan adında sınırlı sayıda kayıt var. Diğer son sorum ise tam olarak CDN'ler ve DNS uygulamaları ile ilgili. :-)
Bozho

2

Diğerleri bir ayrıntı olarak bahsettiler, ancak pratik açıdan, sert sınır 512 baytlık UDP paket büyüklüğü sınırı. Kesinti tespit edildiğinde TCP'ye geçiş yapmak mümkün olsa da, pratikte birçok müşteri bunu yapmaz (ve tartışmasız yapmamalı; çoğu uygulama için kötü bir kullanıcı deneyimi yaşatır ve sadece bölge transferleri ya da diğerlerini beklerdim) TCP'yi destekleyen özel amaçlı aramalar). Yani IPv4 (A kayıtları) için yaklaşık 30 adresli bir adres sınırına ve IPv6 (AAAA) için daha küçük olduklarına göre biraz daha azına bakıyorsunuz. Alan adının uzunluğu bunu keser ve sayıyı daha da sınırlar.


1
Tek bir UDP datagramına uymayan DNS yanıtlarını düzgün bir şekilde işlemeyen birçok kötü niyetli müşteri ve çözümleyici olduğu konusunda oldukça haklısınız, ancak lütfen yalnızca bölge aktarmalarının veya olağandışı isteklerin daha büyük yanıt boyutlarına ihtiyaç duyduğu fikrinden vazgeçmeyin. Cevabınıza göre, açıkça DNSSEC doğrulamasını kullanmıyorsunuz, ancak birçok kişi (daha büyük yanıtlara ihtiyaç duyulmasının tek nedeni DNSSEC değil, fakat çok önemli bir durum.)
Michael McNally

@MichaelMcNally: DNSSEC (en azından dahil olduğum glibc posta listelerinde yer alan konulara dayanan uygulayıcılar tarafından) bitiş noktalarında (DNS aramaları yapan uygulamalar) değil, yapacak olan yerel özyinelemeli ad sunucusunda kullanılmak üzere tasarlanmamıştır. uygulamalar adına aramalar. Bu yüzden bir DNSSEC kurulumunda bile, uygulamaların TCP üzerinden DNS konuşmasını beklemeniz için hiçbir neden yoktur. UDP mükemmel çalışıyor.
R ..

1

Kısa cevap: yaklaşık 25 A kayıt bir UDP paketine sığacak. Bunun ötesinde, DNS TCP'ye geçecek ve bu kadar hızlı olmayacaktır. "En yakın" IP'yi seçebilen DNS çözümleyicilerini kullanmayan istemcilerde de sorun yaşayacaksınız. Ayrıca, wifi ve mobil ile "en yakın" genellikle doğru sunucu olmayacak.

Daha uzun cevap:

Yapma bunu. Daha iyi bir yol, uygun sunucuya işaret eden her kullanıcı için ayrı CNAME kayıtları oluşturmaktır. Diyelim ki iki sunucunuz var server-fve server-rIMAP için kullanılıyor. Her kişinin IMAP istemcisini, USERNAME.imap.example.com adlı sunucu adıyla "USERNAME", e-posta kullanıcı adıyla değiştirilecek şekilde yapılandırın. Artık, insanları e-posta istemcilerini yeniden yapılandırmalarına gerek kalmadan sunucular arasında taşıyabilirsiniz.

server-f.example.com. IN A 10.10.10.10 server-r.example.com. IN A 10.20.20.20 wilma.imap.example.com. IN CNAME server-f.example.com. fred.imap.example.com. IN CNAME server-f.example.com. betty.imap.example.com. IN CNAME server-r.example.com. barney.imap.example.com. IN CNAME server-r.example.com.

Ancak, bunu yaparsanız, DNS kayıtlarını otomatik olarak bir kullanıcı veritabanından oluşturmanızı kesinlikle tavsiye ederim. Hesaplar oluşturuldukça ve silinirken DNS kayıtlarının da oluşturulduğundan ve silindiğinden emin olmak istersiniz. Aksi takdirde bir karmaşa ve çok karışıklık ile sonuçlanacak.

Bunu gerçek anlamda binlerce kullanıcılı şirketlerde gördüm ve işler otomatikleştirildiğinden beri, dünya çok iyi.


0

Diğerlerinin de belirttiği gibi, gerçek dünya kullanımı için korkunç bir fikir.

Gerçek dünyada, tek bir UDP datagramına sığamayan yanıtlarla sorun yaşayan uyumsuz istemciler ve çözücüler var ve DNS mesaj boyutu sınırlarıyla ilgili özel ancak protokolle uyumlu olmayan fikirleri zorlayacak güvenlik duvarları var.

Ve her durumda (kesin olarak yapamayacağınız) gelen büyük tepkinize güvenebilseniz bile, bunun Çok Kötü Bir Fikir olmasının başka bir nedeni var. DNS yanıt boyutunuz ne kadar büyükse, yansıtma saldırıları için o kadar fazla çekicidir, çünkü büyük bir büyütme faktörü sağlarsınız. DNS'de yaygın olan bu tür hizmet reddi saldırısında, açık bir özyinelemeli çözümleyiciye bir UDP sorgusu gönderilir. UDP sorgularının kaynak adresi genellikle kolayca sahtedir ve saldırgan, sorgu kaynağını amaçladıkları hedefin IP'sine ayarlar. Arzu edilen iki (saldırgan için) etki elde edilir: İlk önce - kendi kısımlarına nispeten küçük bir gönderme çabası (küçük bir sahtekarlık sorgudan), hedefe ulaşan istenmeyen trafik yoğunluğunun göreceli olarak daha yüksek olması (bu, amplifikasyon faktörüdür), ve ikinci olarak - saldırının asıl kaynağı hedeften gizlenir; Hedef, sadece yansıtıcı olarak kullanılan özyinelemeli çözümleyicilerin adreslerini bilir.


0

Bu konuda tarihi önemsiz şeyler ilginç. 90'lı yıllarda AOL, DNS kayıtlarını MX sorgusunun> 512 bayt döndüreceği şekilde genişletti. Bu, RFC'yi ihlal eden bir çok SMTP sunucusunu (qmail, o zamanlar popüler olan) kırdı ve sysadmins'e birçok sıkıntı yaşattı. Düzeltme ya yama yapmayı ya da statik yollar eklemeyi gerektiriyordu .

Mevcut durumun ne olduğunu bilmiyorum ama birkaç yıl önce, qmail'e en son dokunduğumda, yamalar hala yerinde idi.

http://www.gossamer-threads.com/lists/qmail/users/30503

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.