Tôi có hai máy chủ DNS chạy BIND9, một chủ và một nô lệ. Khi tệp vùng được cập nhật trên bản gốc, tôi muốn máy chủ nô lệ ngay lập tức bắt đầu phục vụ (các) bản ghi đã thay đổi, nhưng BIND đang cung cấp cho tôi một số guff.
Chuyển vùng DNS đã hoạt động chính xác giữa chủ và nô lệ. Tôi có thể đăng nhập vào máy chủ nô lệ và chạy dig @dnsmaster myzone. AXFR
và nó in ra toàn bộ nội dung của khu vực. Để thực hiện công việc đó, DNS master được cấu hình với notify yes
và also-notify { dnsslave }
. Tương tự như vậy, nô lệ được cấu hình với allow-transfer { dnsmaster }
.
Khi dnsmaster được cập nhật, tôi chạy rndc reload
và nó cho tôi biết rằng các thông báo đang được gửi. Điều này được xác nhận trên nô lệ bằng cách kiểm tra các vùng dữ liệu trong /var/named/slavedata/
. Chúng chứa dữ liệu gần đây nhất, khớp với những gì chủ nhân biết.
Bây giờ đến phần kỳ lạ.
Máy chủ nô lệ sẽ tiếp tục cung cấp các bản ghi DNS cũ, cũ, hoàn toàn bỏ qua thực tế là dữ liệu mới có sẵn trên đĩa sau khi được chủ thông báo. Tôi đang sử dụng dig
để kiểm tra kết quả với lệnh này : dig @slaveserver record.zone.tld
.
Tôi nghĩ rằng BIND có thể giữ bộ đệm trong bộ nhớ trong các vùng có thẩm quyền của nó, vì vậy tôi đã đặt max-cache-size
và max-cache-ttl
về 0, nhưng điều đó không có hiệu lực.
Tôi đã thử các cách khác để xóa bộ nhớ cache bị cáo buộc này, bằng cách chạy các lệnh như rndc flush
và rndc reload
trên máy chủ nô lệ, nhưng nó vẫn trả về các bản ghi cũ.
Cuối cùng, tôi nhận thấy rằng MINTTL
trên vùng được đặt thành 86400 (24 giờ), vì vậy tôi tạm thời thay đổi MINTTL
thành 15 giây và khởi động lại máy chủ nô lệ. Không có hiệu lực - nô lệ sẽ chỉ cung cấp kết quả DNS được cập nhật sau khi dịch vụ được khởi động lại.
Những gì đang xảy ra ở đây? Hành vi dự kiến của BIND9 khi nhận được thông báo rằng một khu vực được cập nhật là gì? Có phải nó luôn tôn trọng TTL
và MINTTL
? Tôi cho rằng nó sẽ luôn sử dụng dữ liệu gần đây nhất có sẵn.
Cuối cùng, tôi đang xem xét việc thiết lập một crontab để khởi động lại nô lệ BIND trên cơ sở hàng giờ, chỉ để tránh phục vụ dữ liệu cũ. Có gì tốt hơn không?
rndc reload
.