Saya punya ide aneh - biarkan beberapa orang / organisasi meng-host aplikasi yang sama, dan biarkan semua node mereka dapat diakses melalui satu nama domain. Itu untuk memiliki, katakanlah, jaringan sosial yang benar-benar terdistribusi, di mana kegunaan tidak dikorbankan (yaitu pengguna tidak harus mengingat url penyedia yang berbeda dan kemudian ketika satu penyedia turun, beralih ke yang lain)
Untuk mencapai itu, saya pikir catatan DNS dengan beberapa IP dapat digunakan.
Jadi, berapa banyak IP yang dapat disimpan oleh catatan DNS A tunggal? Jawaban ini mengatakan sekitar 30, tetapi penggunaannya berbeda. Untuk skenario di atas saya tidak akan peduli jika ISP yang diberikan cache hanya 30, asalkan ISP lain cache 30 lainnya, dan sebagainya.
domain-name-system
ipv4
Bozho
sumber
sumber
Jawaban:
Penafian: Jangan tersinggung, tapi ini ide yang sangat buruk. Saya tidak menyarankan siapa pun melakukan ini di kehidupan nyata.
Tetapi jika Anda memberi seorang pria IT lab bosan, hal-hal lucu akan terjadi!
Untuk percobaan ini, saya menggunakan server Microsoft DNS yang berjalan di Server 2012 R2. Karena komplikasi hosting zona DNS di Active Directory, saya membuat zona primer baru bernama testing.com yang tidak terintegrasi dengan AD.
Menggunakan skrip ini:
Saya melanjutkan untuk membuat, tanpa kesalahan, 65025 catatan host untuk nama
testing.testing.com.
, dengan setiap alamat IPv4 dari 1.1.1.1 ke 1.1.255.255.Kemudian, saya ingin memastikan bahwa saya bisa menembus 65536 (2 ^ 16 bit) jumlah total catatan A tanpa kesalahan, dan saya bisa, jadi saya berasumsi saya mungkin bisa sampai ke 16581375 (1.1.1.1 hingga 1.255 .255.255,) tetapi saya tidak ingin duduk di sini dan menonton skrip ini berjalan sepanjang malam.
Jadi saya pikir aman untuk mengatakan bahwa tidak ada batasan praktis untuk jumlah catatan A yang dapat Anda tambahkan ke zona untuk nama yang sama dengan IP yang berbeda di server Anda.
Tetapi apakah itu benar-benar bekerja dari sudut pandang klien?
Inilah yang saya dapatkan dari klien saya seperti yang dilihat oleh Wireshark:
(Buka gambar di tab browser baru untuk ukuran penuh.)
Seperti yang Anda lihat, ketika saya menggunakan nslookup atau ping dari klien saya, ia secara otomatis mengeluarkan dua kueri - satu UDP dan satu TCP. Seperti yang sudah Anda ketahui, yang paling saya bisa menjejalkan ke dalam datagram UDP adalah 512 byte, jadi begitu batas itu terlampaui (seperti 20-30 alamat IP), seseorang harus menggunakan TCP sebagai gantinya. Tetapi bahkan dengan TCP, saya hanya mendapatkan subset A yang sangat kecil untuk testing.testing.com. 1000 catatan dikembalikan per permintaan TCP. Daftar A dirotasi oleh 1 dengan benar dengan setiap kueri yang berurutan, persis seperti yang Anda harapkan DNS round-robin berfungsi. Dibutuhkan jutaan pertanyaan untuk menyelesaikan semua ini.
Saya tidak melihat bagaimana ini akan membantu Anda membuat jaringan media sosial Anda yang berskala besar dan dapat diukur, tetapi tetap ada jawaban Anda.
Sunting: Dalam komentar tindak lanjut Anda, Anda bertanya mengapa menurut saya ini umumnya ide yang buruk.
Katakanlah saya adalah pengguna internet biasa, dan saya ingin terhubung ke layanan Anda. Saya mengetik www.bozho.biz di browser web saya. Klien DNS di komputer saya mendapatkan kembali 1000 catatan. Nasib buruk, 30 catatan pertama dalam daftar tidak responsif karena daftar catatan A tidak diperbarui, atau mungkin ada pemadaman berskala besar yang memengaruhi sebagian besar internet. Katakanlah browser web saya memiliki batas waktu 5 detik per IP sebelum bergerak dan mencoba yang berikutnya. Jadi sekarang saya duduk di sini menatap jam pasir berputar selama 2 setengah menit menunggu situs Anda memuat. Tidak ada yang punya waktu untuk itu. Dan saya hanya berasumsi bahwa browser web saya atau aplikasi apa pun yang saya gunakan untuk mengakses layanan Anda bahkan akan mencoba lebih dari 4 atau 5 alamat IP pertama. Mungkin tidak akan.
Jika Anda menggunakan pembersihan otomatis dan memungkinkan pembaruan yang tidak divalidasi atau anonim ke zona DNS dengan harapan menjaga daftar A catatan segar ... bayangkan saja betapa tidak amannya itu! Bahkan jika Anda merekayasa beberapa sistem di mana klien membutuhkan sertifikat TLS klien yang mereka dapatkan dari Anda sebelumnya untuk memperbarui zona, satu klien yang dikompromikan di mana pun di planet ini akan memulai botnet dan menghancurkan layanan Anda. DNS tradisional sangat tidak aman, tanpa kerumunan-sumber.
Penggunaan dan pemborosan bandwidth yang sangat besar. Jika setiap permintaan DNS membutuhkan 32 kilobyte atau lebih bandwidth, itu tidak akan skala sama sekali.
DNS round-robin bukan pengganti keseimbangan muatan yang tepat. Ini tidak menyediakan cara untuk memulihkan dari satu simpul turun atau menjadi tidak tersedia di tengah-tengah hal. Apakah Anda akan menginstruksikan pengguna Anda untuk melakukan ipconfig / flushdns jika node mereka terhubung turun? Masalah-masalah seperti ini telah diselesaikan oleh hal-hal seperti GSLB dan Anycast.
Dll
sumber
MAX_SHUFFLE
kode sumber BIND (yang secara default adalah 32).Untuk menjawab pertanyaan seperti yang dinyatakan ("berapa banyak IP yang dapat disimpan oleh satu catatan DNS A?") Jawabannya sangat sederhana: satu
A
catatan memegang tepat satu alamat. Namun ada beberapaA
catatan untuk nama yang sama.sumber
Setiap alamat IPv4 akan memakan waktu 16 byte dalam balasannya. Setiap alamat IPv6 akan membutuhkan 28 byte dalam balasannya.
Sangat disarankan agar Anda memastikan balasan akan masuk dalam 512 byte. Itu akan memungkinkan sekitar 25 alamat IPv4 dan 14 alamat IPv6 (mengingat Anda juga memerlukan beberapa informasi lain dalam paket). Batas tepat tergantung pada panjang nama domain Anda.
Jika Anda memiliki 25 alamat IPv4 dan 14 alamat IPv6, maka Anda mengandalkan klien yang meminta alamat IPv4 dan IPv6 dalam kueri terpisah. Jika klien meminta kedua jenis alamat dalam satu permintaan (yang jarang), maka Anda harus lebih rendah.
Jika ukuran balasan melebihi 512 byte, itu mungkin masih berfungsi di atas UDP jika klien dan server mendukung EDNS. Tanpa EDNS, klien akan menerima balasan yang terpotong, dan harus coba lagi melalui TCP. Ini meningkatkan komunikasi dari 1 hingga 4 pulang pergi. Tetapi lebih buruk lagi, kadang-kadang ada kesalahan konfigurasi yang mencegah DNS over TCP dari bekerja.
Bahkan jika Anda bisa memasukkan lebih dari 14 alamat ke dalam balasan tanpa menyebabkan masalah pada lapisan DNS, itu tidak akan sangat berguna. Batas waktu yang digunakan oleh klien sebelum menyerah pada satu alamat dan melanjutkan ke yang berikutnya sering kali signifikan.
Harus menunggu waktu habis itu sekali saja dapat menyebabkan pengalaman pengguna yang buruk. Jika klien harus melalui 14 alamat sebelum mendapatkan respons, pengguna harus menunggu 13 timeout.
sumber
Apa yang Anda gambarkan bukanlah ide yang sangat baru. Seperti jawaban lain yang telah dibahas, Anda dibatasi dalam berapa banyak catatan A yang dapat Anda miliki dalam satu jawaban, tetapi itu tidak mengatakan berapa pun tentang total catatan A yang mungkin ada.
Anda bisa, misalnya, mengimplementasikan server DNS yang menjawab pertanyaan apa pun untuk catatan A dengan IP acak. Cukup tanya kali, ini akan menghasilkan catatan unik 4294967296 A: satu untuk setiap alamat IPv4.
Seperti yang saya katakan, ini bukan ide baru. Sebenarnya, sebagian cara kerja Akamai (dan mungkin banyak CDN lainnya). Catatan A yang Anda dapatkan untuk domain Akamai ditentukan oleh server DNS sihir hitam mereka. Saya yakin jawaban yang Anda dapatkan tergantung pada keseimbangan beban dinamis dan masalah geografis.
Sebagai contoh, saya memilih a338.g.akamaitech.net. Jika saya melihatnya di komputer saya sekarang, yang menggunakan server nama yang ditugaskan DHCP dari Comcast:
Bagaimana jika saya menanyakan DNS Google?
Saya yakin jika Anda mencobanya, saya yakin Anda akan mendapatkan jawaban yang berbeda. Berapa banyak server tepi yang Akamai miliki untuk melayani sumber daya tertentu? Lebih dari dua, saya bertaruh.
sumber
Yang lain telah menyebutkannya sebagai detail, tetapi dari sudut pandang praktis, batas kerasnya adalah batas ukuran paket UDP sebesar 512 byte. Meskipun dimungkinkan untuk beralih ke TCP ketika pemotongan terdeteksi, dalam praktiknya banyak / sebagian besar klien tidak akan melakukannya (dan mereka seharusnya tidak melakukannya; itu akan memberikan pengalaman pengguna yang buruk untuk sebagian besar aplikasi, dan saya hanya akan mengharapkan transfer zona atau lainnya pencarian tujuan khusus untuk mendukung TCP). Jadi Anda mencari batas sekitar 30 alamat untuk IPv4 (catatan A) dan agak kurang untuk IPv6 (AAAA) karena mereka lebih besar. Panjang nama domain memotong ini dan akan membatasi jumlahnya lebih lanjut.
sumber
Jawaban singkatnya: sekitar 25 A catatan yang sesuai dengan paket UDP. Selain itu, DNS akan beralih ke TCP dan tidak akan secepat itu. Anda juga akan mengalami masalah dengan klien yang tidak menggunakan resolver DNS yang mampu memilih IP "terdekat". Juga, dengan wifi dan seluler, "terdekat" sering tidak akan menjadi server yang tepat.
Jawaban yang lebih panjang:
Jangan lakukan itu. Cara yang lebih baik adalah menyiapkan catatan CNAME individual untuk setiap pengguna yang mengarah ke server yang sesuai. Katakanlah Anda memiliki dua server,
server-f
danserver-r
digunakan untuk IMAP. Konfigurasikan klien IMAP setiap orang dengan nama server menjadi USERNAME.imap.example.com tempat "USERNAME" diganti oleh nama pengguna email mereka. Sekarang Anda dapat memindahkan orang di antara server tanpa harus mengkonfigurasi ulang klien email mereka.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.
Namun, jika Anda melakukan ini, saya SANGAT SANGAT MENYARANKAN bahwa Anda menghasilkan catatan DNS secara otomatis dari database pengguna. Anda ingin memastikan bahwa ketika akun dibuat dan dihapus, catatan DNS dibuat dan dihapus juga. Kalau tidak, Anda akan berakhir dengan kekacauan dan banyak kebingungan.
Saya telah melihat ini dilakukan di perusahaan-perusahaan dengan ribuan pengguna dan, karena segala sesuatunya otomatis, ini sangat baik.
sumber
Seperti yang telah ditunjukkan orang lain, itu adalah ide yang mengerikan untuk penggunaan di dunia nyata.
Di dunia nyata ada klien dan penyelesai yang tidak sesuai yang memiliki masalah dengan respons yang tidak dapat ditampung dalam datagram UDP tunggal, dan ada firewall yang akan menegakkan gagasan spesifik tetapi tidak sesuai protokol tentang batas ukuran ukuran pesan DNS.
Dan bahkan jika Anda dapat mengandalkan respons besar Anda dalam setiap kasus (yang Anda tidak bisa tegas) ada alasan lain ini adalah Ide yang Sangat Buruk. Semakin besar ukuran respons DNS Anda, semakin menggoda sebagai muatan untuk serangan refleksi karena Anda memberikan faktor amplifikasi yang sangat besar. Dalam jenis serangan denial-of-service, yang umum dalam DNS, kueri UDP dikirim ke penyelesai rekursif terbuka. Alamat sumber permintaan UDP biasanya mudah dipalsukan, dan penyerang menetapkan sumber kueri ke IP target yang dituju. Dua efek yang diinginkan (untuk penyerang) tercapai: pertama - upaya pengiriman yang relatif kecil di pihak mereka (dari permintaan spoofed kecil) menghasilkan torrent yang relatif besar dari lalu lintas yang tidak diinginkan yang tiba di target (ini adalah faktor amplifikasi), dan kedua - sumber serangan yang sebenarnya disembunyikan dari target; target hanya mengetahui alamat resolver rekursif yang digunakan sebagai reflektor.
sumber
Poin menarik dari hal-hal sepele sejarah tentang hal ini. Pada tahun 90-an, AOL memperluas catatan DNS mereka sedemikian rupa sehingga permintaan MX akan kembali> 512 byte. Ini melanggar RFC, memecahkan banyak server SMTP (qmail menjadi yang populer saat itu), dan menyebabkan sysadmin banyak sakit kepala. Perbaikan diperlukan untuk menambal , atau menambahkan rute statis.
Saya tidak tahu bagaimana situasi saat ini, tetapi beberapa tahun yang lalu, ketika saya terakhir menyentuh qmail, patch masih ada.
http://www.gossamer-threads.com/lists/qmail/users/30503
sumber