Tại sao Chromium không lưu trữ DNS trong hơn một phút?


27

Tôi sử dụng Chromium và gặp sự cố với DNS không được lưu trong thời gian mà tôi mong đợi. Lấy tên miền example.com. Theo cài đặt DNS, tên miền này sẽ được lưu trong 26151 giây nữa:

$ dig example.com

;; ANSWER SECTION:
example.com.        26151   IN  A   93.184.216.34

Tuy nhiên, khi tôi mở example.com trong Chromium và tôi mở chrome: // net-internals / # dns thì IP sẽ bị quên trong vòng một phút!

nhập mô tả hình ảnh ở đây

Tại sao Chromium không tuân thủ TTL của cài đặt DNS của tên miền? Làm thế nào tôi có thể buộc nó lưu trữ dữ liệu DNS cho đến khi chúng hết hạn?


4
"... tên miền này sẽ được lưu trong bộ nhớ cache trong 26151 giây nữa ..." - Không, tên miền có thể được lưu trong bộ nhớ cache trong 26151 giây. Bộ nhớ đệm DNS là không bắt buộc.
marcelm

Câu trả lời:


33

Chromium / Chrome không lưu trữ các yêu cầu DNS thực sự hơn một phút.

Thật thú vị, từ lỗi-crom - Số 164026 - DNS TTL không được vinh danh từ ngày 21 tháng 4 năm 2011

Bộ đệm DNS duy nhất trong hệ thống là chrome và nó không tôn trọng TTL. Chúng ta cần sửa chrome và / hoặc thêm bộ đệm trung gian xử lý chính xác TTL.

Trả lời trong vé ngày 4 tháng 12 năm 2012:

HostCache hiện giả định TTL = 60s cho tất cả các kết quả dương tính. Với trình phân giải DNS không đồng bộ, chúng tôi dự định sử dụng TTL = max (60s, server_Vported_ttl), tức là, ít nhất là 60 giây. Lý do là để cải thiện hiệu suất bộ đệm. (Khi CDN NS cung cấp TTL = 10-20 giây và phải mất 30 giây để tìm nạp tất cả các nguồn con, chúng tôi thường phải truy vấn lại cho cùng tên máy chủ trong một lần tải trang.)

Vé đóng cửa vào ngày 10 tháng 10 năm 2013 như:

Chrome trên CrOS sử dụng trình phân giải DNS không đồng bộ, vinh danh TTL = max (60s,> server_Vported_ttl)

Tôi sẽ đóng cái này dưới dạng WontFix (lỗi thời / hoạt động như dự định).

Đây là một vấn đề được biết đến trong nhiều năm; trình phân giải DNS nội bộ của họ bỏ qua các bản ghi DNS của DNS và chỉ lưu các yêu cầu DNS trong 1 phút.

Người dùng đã yêu cầu trong nhiều năm, một tính năng để thay đổi hành vi mặc định đó và Google không bao giờ tạo ra một hành vi.

Trước đây, bạn có thể vô hiệu hóa trình phân giải DNS nội bộ chrome://flags, ngày nay chức năng đó không còn bị lộ nữa.

Vì vậy, tóm tắt nó, nó là một tính năng, ví dụ như nó làm điều đó bằng thiết kế.

(Ban đầu tôi đã viết nó không bao giờ có thể thay đổi, điều này rõ ràng là không đúng. Một người thực sự quyết tâm có thể biên dịch lại Chromium hoặc hack các tệp nhị phân của Chrome.).

Vì vậy, như một adenda: có rất nhiều tài liệu bằng chứng kỹ sư của Google không có ý định tôn trọng TTL mặc định trong nhận câu trả lời DNS trong Chrome / ium.

Từ bộ nhớ đệm tiêu cực của truy vấn DNS (DNS NCACHE)

Như với các phản hồi tích cực trong bộ nhớ cache, bộ giải quyết sẽ giới hạn trong bao lâu nó sẽ lưu trữ một phản hồi tiêu cực ...

Mặc dù nó được ngụ ý rằng trình phân giải có thể / nên áp đặt giới hạn tối đa cho câu trả lời DNS lưu trữ, nhưng giới hạn 1 phút trên Google Chrome có thể quá thấp.

PS Tôi thực sự đã phát hiện ra câu trả lời cho một cái gì đó đã làm tôi khó chịu trong nhiều năm trong khi lấy số liệu thống kê Chrome để trả lời câu hỏi này: Chrome: Yêu cầu DNS với tên DNS ngẫu nhiên: phần mềm độc hại?

PPS Từ mã dưới đây, rõ ràng các câu trả lời phủ định không được lưu trong bộ nhớ cache (TTL = 0).

Từ https://chromium.googlesource.com/chromium/src/net/dns/host_resolver_impl.cc

  99 // Default TTL for successful resolutions with ProcTask.
 100 const unsigned kCacheEntryTTLSeconds = 60;
 101 
 102 // Default TTL for unsuccessful resolutions with ProcTask.
 103 const unsigned kNegativeCacheEntryTTLSeconds = 0;
 104 
 105 // Minimum TTL for successful resolutions with DnsTask.
 106 const unsigned kMinimumTTLSeconds = kCacheEntryTTLSeconds;

1518   // Called by ProcTask when it completes.
1519   void OnProcTaskComplete(base::TimeTicks start_time,
1520                           int net_error,
1521                           const AddressList& addr_list) {
1522     DCHECK(is_proc_running());
1523 
1524     if (dns_task_error_ != OK) {
1525       base::TimeDelta duration = base::TimeTicks::Now() - start_time;
1526       if (net_error == OK) {
1527         UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackSuccess", duration);
1528         if ((dns_task_error_ == ERR_NAME_NOT_RESOLVED) &&
1529             ResemblesNetBIOSName(key_.hostname)) {
1530           UmaAsyncDnsResolveStatus(RESOLVE_STATUS_SUSPECT_NETBIOS);
1531         } else {
1532           UmaAsyncDnsResolveStatus(RESOLVE_STATUS_PROC_SUCCESS);
1533         }
1534         base::UmaHistogramSparse("Net.DNS.DnsTask.Errors",
1535                                  std::abs(dns_task_error_));
1536         resolver_->OnDnsTaskResolve(dns_task_error_);
1537       } else {
1538         UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackFail", duration);
1539         UmaAsyncDnsResolveStatus(RESOLVE_STATUS_FAIL);
1540       }
1541     }
1542 
1543     if (ContainsIcannNameCollisionIp(addr_list))
1544       net_error = ERR_ICANN_NAME_COLLISION;
1545 
1546     base::TimeDelta ttl =
                                              # always  0 seconds
1547         base::TimeDelta::FromSeconds(kNegativeCacheEntryTTLSeconds);
1548     if (net_error == OK)
                                              # always 60 seconds 
1549       ttl = base::TimeDelta::FromSeconds(kCacheEntryTTLSeconds);  
1550 
1551     // Source unknown because the system resolver could have gotten it from a
1552     // hosts file, its own cache, a DNS lookup or somewhere else.
1553     // Don't store the |ttl| in cache since it's not obtained from the server.
1554     CompleteRequests(
1555         MakeCacheEntry(net_error, addr_list, HostCache::Entry::SOURCE_UNKNOWN),
1556         ttl);
1557   }

4
Điều thú vị đối với tôi, chrome là lưu trữ bộ đệm tìm kiếm DNS dựa trên TTL cho một số tên miền, ví dụ như tên miền này dougblack.iođể có thể các quy tắc đầy đủ phức tạp hơn một chút. nhưng 99 trong số một trăm tên miền hoạt động như bạn đã mô tả.
the_velour_fog

2
Chrome thực hiện các yêu cầu DNS tìm kiếm ngẫu nhiên để xác định xem trên mạng có chiếm quyền điều khiển tất cả các yêu cầu DNS hay không (như một số điểm truy cập không dây phải trả tiền). Ngoài ra, tôi tưởng tượng giá trị "thời gian chờ" mà bạn đang xem trong cấu hình là thời gian chờ 1 giây để máy chủ DNS phản hồi, không phải là 1 phút TTL.
duskwuff

5
Thật đáng buồn khi crom làm bộ đệm dns. Bất cứ khi nào tôi thực hiện các thay đổi nhanh chóng trên NS của mình và xóa bộ nhớ cache dns, tôi luôn phải ghi nhớ chrome cũng tự làm điều đó.
Ole K

1
@OleK: Vâng, tôi không biết Chrome thậm chí còn có bộ đệm DNS riêng. Cảm ơn trang này đã chỉ ra điều này ...
Mehrdad

2
@OleK - Tôi đồng ý, nhưng đồng thời tôi có thể thấy nơi ... nói ngắn gọn, 60 giây hoặc lâu hơn :), bộ nhớ cache là một ý tưởng tốt (để tiết kiệm một chút lưu lượng mạng) và vẫn cho phép mọi thứ như vòng tròn dns, v.v. để làm việc
ivanivan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.