2012-06-13 10 views
38

Tôi đang nhầm lẫn về bộ nhớ đệm DNS. Tôi đang viết một máy chủ proxy nhỏ về phía trước và muốn sử dụng bộ nhớ cache DNS OS trên một hệ thống Linux.Bộ nhớ đệm DNS trong linux

Nếu tôi hiểu chính xác, thì có bộ nhớ đệm DNS ở cấp trình duyệt. Sau đó, có bộ nhớ đệm DNS ở cấp độ hệ điều hành (Windows có nó. Tôi không chắc chắn nếu Linux distro có nó theo mặc định).

Vậy, trình duyệt/proxy_server sử dụng bộ nhớ đệm DNS của OS như thế nào? Tôi đang cố gắng để tìm nếu tôi có thể dựa vào Linux cho bộ nhớ đệm DNS thay vì làm nó trên của riêng tôi bên trong proxy của tôi.

Cảm ơn

+0

dựa vào bộ đệm ẩn của hệ điều hành. –

+0

Nếu bạn có proxy, bộ đệm DNS nằm trong proxy. Ví dụ như mực, có bộ nhớ cache và giải quyết DNS của riêng nó. –

Trả lời

62

Trên Linux (và có lẽ hầu hết Unix), không có hệ điều hành cấp DNS cache trừ nscd được cài đặt và chạy. Ngay cả khi đó, tính năng bộ nhớ đệm DNS của nscd bị tắt theo mặc định ít nhất là trong Debian vì it's broken. Kết quả thực tế là hệ thống Linux của bạn rất có thể không thực hiện bất kỳ bộ nhớ đệm DNS cấp hệ điều hành nào.

Bạn có thể triển khai bộ nhớ cache của riêng bạn trong ứng dụng của bạn (như chúng đã làm cho Squid, theo nhận xét của diegows), nhưng tôi khuyên bạn nên sử dụng nó. Đó là rất nhiều công việc, thật dễ dàng để làm cho nó sai (nscd có nó sai !!!), nó có khả năng sẽ không được dễ dàng điều chỉnh như một bộ nhớ cache DNS chuyên dụng, và nó trùng lặp chức năng đã tồn tại bên ngoài ứng dụng của bạn. Nếu một người dùng cuối sử dụng phần mềm của bạn cần phải có bộ nhớ đệm DNS vì tải truy vấn DNS đủ lớn để trở thành vấn đề hoặc RTT đến máy chủ DNS bên ngoài đủ dài để trở thành một vấn đề, họ có thể cài đặt DNS lưu vào bộ nhớ đệm máy chủ chẳng hạn như Unbound trên cùng một máy với ứng dụng của bạn, được định cấu hình để trả lời bộ nhớ cache và chuyển tiếp các lỗi đến các trình phân giải DNS thông thường.

+0

Xin cảm ơn. Một câu hỏi nữa. Bạn có biết nó hoạt động như thế nào trong các trình duyệt trên các cửa sổ. Tôi đã đọc rằng chrome dựa trên bộ nhớ cache của hệ điều hành dns. Vậy, điều đó có nghĩa là các ứng dụng có thể truy cập bộ nhớ cache của hệ điều hành dns không? Nói chung, dòng chảy cho độ phân giải dns (Trong bối cảnh bộ nhớ đệm là gì.) Trình duyệt kiểm tra bộ nhớ cache của chính nó nếu nó duy trì một. Sau đó, nó yêu cầu hệ điều hành hoặc nó đọc OS dns cache? Nếu không tìm thấy mục nhập nào thì nó sẽ ra ngoài để giải quyết. –

+5

Khi bộ nhớ cache cấp hệ điều hành có sẵn, nó được sử dụng tự động và minh bạch bởi tất cả các ứng dụng trừ khi ứng dụng bỏ qua các API truy vấn tên chuẩn ('getaddrinfo()' et al.) Và thực hiện các truy vấn DNS riêng của nó trực tiếp. Điều đó áp dụng cho MacOS X vô điều kiện, và nó áp dụng cho Linux nếu một số cơ hội nscd đang chạy và hoạt động (không thể nói cho MS Windows). Nếu một ứng dụng thực hiện bộ nhớ cache của chính nó, nó sẽ áp dụng ngoài bất kỳ bộ nhớ cache cấp hệ điều hành nào có thể hoặc không có mặt (một lần nữa, trừ khi ứng dụng bỏ qua hệ điều hành và truy vấn trực tiếp). – Celada

+2

@Celada bạn có thể cung cấp nguồn cho 'Trên Linux (và có lẽ là hầu hết Unix), không có bộ nhớ đệm DNS cấp hệ điều hành trừ khi nscd được cài đặt và đang chạy.'? Tôi googled xung quanh không có may mắn ... – cYrus

19

Dưới đây là hai gói phần mềm khác mà có thể được sử dụng cho DNS cache trên Linux:

  • dnsmasq
  • bind

Sau khi cấu hình phần mềm để chuyển tiếp DNS và bộ nhớ đệm, sau đó bạn thiết lập trình phân giải DNS của hệ thống thành 127.0.0.1 trong /etc/resolv.conf.

Nếu hệ thống của bạn đang sử dụng NetworkManager bạn có thể thử bằng cách sử dụng tùy chọn dns=dnsmasq trong /etc/NetworkManager/NetworkManager.conf hoặc bạn có thể thay đổi cài đặt kết nối của bạn để tự động (Địa chỉ Only) và sau đó sử dụng một kịch bản trong thư mục /etc/NetworkManager/dispatcher.d để có được DHCP máy chủ tên, thiết lập nó làm máy chủ chuyển tiếp DNS trong phần mềm bộ nhớ cache DNS của bạn và sau đó kích hoạt tải lại cấu hình.

+1

Ngày nay trên 'systemd' [là một cái nữa] (https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html), nó có thể được kích hoạt với' systemctl enable systemd-resolve'. –

2

Firefox chứa bộ nhớ cache dns. Để vô hiệu hóa bộ nhớ cache DNS:

  1. Mở trình duyệt của bạn
  2. Gõ about: config vào thanh địa chỉ
  3. Nhấp chuột phải vào danh sách các Properties và chọn New> Integer trong menu Context
  4. Nhập 'network.dnsCacheExpiration' làm tên tùy chọn và 0 làm giá trị số nguyên

Khi Firefox bị tắt, Firefox sẽ sử dụng bộ nhớ cache DNS do hệ điều hành cung cấp.