Tuyên bố từ chối trách nhiệm: Không xúc phạm, nhưng đây là một ý tưởng thực sự tồi tệ. Tôi không khuyên mọi người làm điều này trong cuộc sống thực.
Nhưng nếu bạn cho một anh chàng IT nhàm chán một phòng thí nghiệm, những điều buồn cười sẽ xảy ra!
Đối với thử nghiệm này, tôi đã sử dụng máy chủ Microsoft DNS chạy trên Máy chủ 2012 R2. Do sự phức tạp của việc lưu trữ một vùng DNS trong Active Directory, tôi đã tạo một vùng chính mới có tên tests.com không được tích hợp AD.
Sử dụng tập lệnh này:
$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
}
}
}
Tôi đã tiến hành tạo, không có lỗi, 65025 bản ghi lưu trữ cho tên testing.testing.com.
, với mỗi địa chỉ IPv4 theo nghĩa đen từ 1.1.1.1 đến 1.1.255.255.
Sau đó, tôi muốn đảm bảo rằng tôi có thể vượt qua tổng số 65536 (2 ^ 16 bit) tổng số bản ghi A mà không có lỗi, và tôi có thể, vì vậy tôi cho rằng có lẽ tôi đã có thể đi hết 16581375 (1.1.1.1 đến 1.255 .255.255,) nhưng tôi không muốn ngồi đây và xem kịch bản này chạy suốt đêm.
Vì vậy, tôi nghĩ an toàn khi nói rằng không có giới hạn thực tế đối với số lượng bản ghi A bạn có thể thêm vào một vùng cho cùng tên với các IP khác nhau trên máy chủ của bạn.
Nhưng nó sẽ thực sự hoạt động từ quan điểm của khách hàng?
Đây là những gì tôi nhận được từ khách hàng của mình khi được xem bởi Wireshark:
(Mở hình ảnh trong tab trình duyệt mới để có kích thước đầy đủ.)
Như bạn có thể thấy, khi tôi sử dụng nslookup hoặc ping từ máy khách của mình, nó sẽ tự động đưa ra hai truy vấn - một UDP và một TCP. Như bạn đã biết, phần lớn tôi có thể nhồi nhét vào một datagram UDP là 512 byte, do đó, khi vượt quá giới hạn đó (như 20-30 địa chỉ IP,) người ta phải sử dụng TCP thay thế. Nhưng ngay cả với TCP, tôi chỉ nhận được một tập hợp con A bản ghi rất nhỏ cho tests.testing.com. 1000 hồ sơ đã được trả về mỗi truy vấn TCP. Danh sách các bản ghi A xoay đúng 1 với mỗi truy vấn liên tiếp, chính xác như cách bạn mong đợi DNS vòng tròn hoạt động. Nó sẽ mất hàng triệu truy vấn để làm tròn thông qua tất cả những điều này.
Tôi không thấy cách này sẽ giúp bạn làm cho mạng truyền thông xã hội có khả năng mở rộng, có khả năng phục hồi ồ ạt của bạn, tuy nhiên vẫn có câu trả lời của bạn.
Chỉnh sửa: Trong bình luận tiếp theo của bạn, bạn hỏi tại sao tôi nghĩ rằng đây thường là một ý tưởng tồi.
Giả sử tôi là người dùng internet trung bình và tôi muốn kết nối với dịch vụ của bạn. Tôi gõ www.bozho.biz vào trình duyệt web của mình. Máy khách DNS trên máy tính của tôi nhận lại 1000 bản ghi. Chà, thật không may, 30 bản ghi đầu tiên trong danh sách không phản hồi vì danh sách các bản ghi A không được cập nhật hoặc có thể có sự cố mất điện quy mô lớn ảnh hưởng đến một đoạn internet. Giả sử trình duyệt web của tôi hết thời gian 5 giây cho mỗi IP trước khi nó tiếp tục và thử cái tiếp theo. Vì vậy, bây giờ tôi đang ngồi đây nhìn chằm chằm vào một chiếc đồng hồ cát quay trong 2 phút rưỡi chờ trang web của bạn tải. Không ai có thời gian cho việc đó. Và tôi chỉ giả sử rằng trình duyệt web của tôi hoặc bất kỳ ứng dụng nào tôi sử dụng để truy cập dịch vụ của bạn thậm chí sẽ cố gắng nhiều hơn 4 hoặc 5 địa chỉ IP đầu tiên. Có lẽ nó sẽ không.
Nếu bạn đã sử dụng chức năng nhặt rác tự động và cho phép các bản cập nhật không xác thực hoặc ẩn danh vào vùng DNS với hy vọng giữ cho danh sách các bản ghi A luôn mới ... hãy tưởng tượng xem nó sẽ không an toàn đến mức nào! Ngay cả khi bạn thiết kế một số hệ thống mà khách hàng cần chứng chỉ TLS của khách hàng mà họ đã nhận được từ bạn trước đó để cập nhật vùng, một khách hàng bị xâm phạm ở bất cứ đâu trên hành tinh sẽ khởi động botnet và phá hủy dịch vụ của bạn. DNS truyền thống bấp bênh vì nó không có nguồn cung cấp đám đông.
Sử dụng băng thông khiêm tốn và lãng phí. Nếu mọi truy vấn DNS yêu cầu băng thông 32 kilobyte trở lên, điều đó sẽ không có quy mô tốt.
DNS round-robin không thay thế cho cân bằng tải thích hợp. Nó cung cấp không có cách nào để phục hồi từ một nút đi xuống hoặc không có sẵn ở giữa mọi thứ. Bạn có định hướng dẫn người dùng thực hiện ipconfig / flushdns nếu nút mà họ được kết nối không hoạt động không? Những loại vấn đề này đã được giải quyết bằng những thứ như GSLB và Anycast.
V.v.