Cách định cấu hình bộ đệm truy vấn DNS cục bộ trong Linux với Dnsmasq

Tác giả sysadmin, T.M.Hai 30, 2022, 08:53:42 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách định cấu hình bộ đệm truy vấn DNS cục bộ trong Linux với Dnsmasq


Trong nhiều bản phân phối dựa trên Linux, dường như không có bất kỳ bộ nhớ đệm truy vấn DNS cục bộ nào được thực hiện theo mặc định ở phía máy khách như trong Windows. Điều này có nghĩa là nếu một quy trình trên hệ thống liên tục cần kết nối với một số tên miền, nó sẽ thực hiện tra cứu DNS đối với trình phân giải được xác định để truy xuất IP mỗi lần.

Trong trường hợp ví dụ cụ thể này, có một quy trình thực hiện trung bình 30.000.000 yêu cầu DNS mỗi ngày đối với máy chủ tên, chúng tôi sẽ giảm đáng kể điều này bằng cách định cấu hình bộ đệm DNS cục bộ trên máy chủ thực hiện các truy vấn DNS quá mức.

Hiện tại, máy chủ Linux này đang thực hiện quá nhiều truy vấn DNS đến nỗi nhật ký truy vấn DNS trên máy chủ định danh đang đạt giới hạn tốc độ rsyslog 20.000 thư mặc định trong vòng 10 phút ( xem tại đây về việc thay đổi giới hạn rsyslog ) trong chưa đầy một phút, dẫn đến các bản ghi bị loại bỏ và không được ghi lại. Thay vì tăng giới hạn tốc độ ghi nhật ký và sử dụng nhiều tài nguyên hệ thống hơn, tôi đã kiểm tra lại các truy vấn đang thực sự được ghi lại và hầu hết tất cả chúng đều dành cho cùng một miền lặp đi lặp lại. Điều này có nghĩa là việc triển khai bộ đệm truy vấn DNS cục bộ sẽ có hiệu lực tại đây.

1. Bật Dnsmasq

Dnsmasq có thể được sử dụng cho nhiều thứ, trong trường hợp này, chúng tôi chỉ sử dụng các chức năng lưu vào bộ đệm truy vấn cục bộ của nó. Lưu ý rằng máy chủ định danh ngược dòng sẽ cần bật truy vấn đệ quy cho dnsmasq để lưu trữ chính xác các bản ghi.

Thay vì trực tiếp kích hoạt dịch vụ và sửa đổi tệp cấu hình, ở đây chúng ta sẽ chỉ kích hoạt plugin cho Trình quản lý mạng. Lưu ý rằng các thử nghiệm này nằm trong CentOS 7 nơi gói dnsmasq đã được cài đặt, nếu bạn không có gói này, hãy cài đặt gói đó ngay bây giờ qua yum.

Để bật dnsmask trong Trình quản lý mạng, chúng tôi cần chỉnh sửa tệp /etc/NetworkManager/NetworkManager.conf và thêm cấu hình sau vào phần [chính].

Mã nguồn [Chọn]
[main]
dns=dnsmasq

Để áp dụng thay đổi này, tiếp theo chúng ta cần khởi động lại Trình quản lý mạng, có thể thực hiện việc này bằng lệnh bên dưới, lưu ý rằng đây là trường hợp nhạy cảm.

Mã nguồn [Chọn]
systemctl restart NetworkManager
Vậy là xong, bây giờ chúng ta có thể xác nhận rằng điều này đã hoạt động như mong đợi bằng cách kiểm tra tệp /etc/resolv.conf. Tệp này sẽ chỉ định "máy chủ định danh 127.0.0.1" nghĩa là hệ thống Linux sẽ gửi các yêu cầu DNS đến chính nó.

Chắc chắn nếu chúng tôi kiểm tra, localhost bây giờ sẽ lắng nghe các truy vấn DNS trên cổng 53.

Mã nguồn [Chọn]
[ root@centos7 ~]# netstat -antup | grep dnsmasq
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 31618/dnsmasq     
udp 0 0 127.0.0.1:53 0.0.0.0:* 31618/dnsmasq

Tiếp theo, nếu chúng ta xem trong tệp /var/run/NetworkManager/dnsmasq.conf, chúng ta sẽ thấy địa chỉ IP của máy chủ định danh ban đầu được chỉ định trong /etc/resolv.conf.

Mã nguồn [Chọn]
[root@centos7 ~]# cat /var/run/NetworkManager/dnsmasq.conf
server=192.168.1.1

Vì vậy, tất cả các yêu cầu DNS trước tiên đều đi qua phiên bản dnsmasq chạy trên máy chủ cục bộ, nếu phản hồi không có trong bộ đệm thì yêu cầu sẽ được chuyển tiếp đến máy chủ định danh đã xác định và sau đó được đặt vào bộ đệm.

Theo mặc định, 150 truy vấn DNS gần đây nhất được lưu trong bộ nhớ đệm. Kích thước của bộ đệm có thể được sửa đổi bằng cách tạo /etc/NetworkManager/dnsmasq.d/cache như hình bên dưới.

Mã nguồn [Chọn]
[root@centos7 ~]# cat /etc/NetworkManager/dnsmasq.d/cache
cache-size=5000

Cấu hình này cho phép lưu trữ tối đa 5000 mục trong bộ đệm cùng lúc, để áp dụng thay đổi, dịch vụ NetworkManager sẽ cần phải được khởi động lại. Các mục phải được lưu vào bộ đệm dựa trên TTL được xác định trên bản ghi.

Có rất nhiều giá trị khác có thể được xác định trong các tệp trong thư mục /etc/NetworkManager/dnsmasq.d/, để xem các giá trị này, hãy chạy lệnh bên dưới để mở trang thủ công.

Mã nguồn [Chọn]
man 8 dnsmasq
2. Xem thống kê bộ đệm

Bây giờ chúng tôi có dnsmasq chạy qua Trình quản lý mạng, chúng tôi muốn biết về số lần truy cập bộ đệm để xác định xem bộ đệm của chúng tôi có thực sự hữu ích hay không.

Mã nguồn [Chọn]
killall -s USR1 dnsmasq
Thao tác này sẽ kết xuất số liệu thống kê hiện tại vào tệp /var/log/messages hoặc /var/log/syslog, tùy thuộc vào hệ điều hành/cấu hình của bạn. Sau đó, chúng tôi có thể tìm kiếm tệp nhật ký cho 'dnsmasq' như được hiển thị bên dưới.

Mã nguồn [Chọn]
[root@centos7 ~]# grep dnsmasq /var/log/messages
Jan 8 05:29:40 centos7 dnsmasq[32618]: time 1452230980
Jan 8 05:29:40 centos7 dnsmasq[32618]: cache size 5000, 0/62 cache insertions re-used unexpired cache entries.
Jan 8 05:29:40 centos7 dnsmasq[32618]: queries forwarded 64, queries answered locally 148924680
Jan 8 05:29:40 centos7 dnsmasq[32618]: server 192.168.72.1#53: queries sent 64, retried or failed 0

Trong ví dụ này, 148.924.680 truy vấn DNS đã được bộ nhớ đệm dnsmasq cục bộ trả lời và chỉ 64 truy vấn được gửi ra bên ngoài tới máy chủ định danh đã xác định. Tôi đã thực hiện tìm kiếm trên một tên miền ngẫu nhiên mà máy chủ lẽ ra không có lý do gì để truy cập và xác nhận rằng các truy vấn được chuyển tiếp ra bên ngoài đã tăng từ 1 lên 65 như mong đợi, cho thấy rằng số liệu thống kê đang hoạt động chính xác.

Chỉ cần kích hoạt plugin dnsmasq thông qua NetworkManager trong Linux, chúng tôi đã kích hoạt thành công bộ nhớ đệm truy vấn DNS cục bộ, điều này sẽ tăng hiệu suất cho các bản ghi sẽ được tra cứu liên tục, vì giờ đây chúng sẽ có sẵn trên hệ thống cục bộ thay vì trên máy chủ định danh bên ngoài.