Unbound là phần mềm máy chủ DNS miễn phí và mã nguồn mở có thể được sử dụng để xác thực, đệ quy và lưu trữ bộ giải quyết DNS. Đây là máy chủ DNS giàu tính năng hỗ trợ DNS-over-TLS (DoT), DNS-over-HTTPS (DoH), Giảm thiểu tên truy vấn, Sử dụng tích cực Bộ đệm được xác thực DNSSEC và hỗ trợ vùng thẩm quyền. Unbound tập trung vào quyền riêng tư và bảo mật của DNS, nhưng không ảnh hưởng đến tốc độ và hiệu suất.
Unbound chủ yếu được phát triển bởi NLnet Labs và phân phối theo giấy phép BSD, và hỗ trợ các tính năng hiện đại trên các tiêu chuẩn mở của Máy chủ DNS. Unbound đã được kiểm tra nghiêm ngặt và có thể chạy trên Linux, BSD và macOS. Unbound khả dụng cho hầu hết các hệ điều hành này và có thể được cài đặt thông qua trình quản lý gói hệ thống.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách thiết lập Máy chủ DNS riêng với Unbound trên máy chủ Debian 11 và Debian 12. Bạn sẽ thiết lập Unbound như một Máy chủ DNS cục bộ với một số tính năng như Máy chủ DNS có thẩm quyền, bật bộ đệm DNS, thiết lập địa chỉ IP cục bộ và Danh sách kiểm soát truy cập (ACL), thiết lập tên miền cục bộ, sau đó thiết lập Unbound như một trình phân giải DNS với DNS-over-TLS (DoT) được bật.
Ngoài ra, bạn cũng sẽ thiết lập ghi nhật ký cho dịch vụ Unbound thông qua Rsyslog và Logrotate.
Trước khi bắt đầu, hãy cập nhật và làm mới chỉ mục gói Debian của bạn thông qua lệnh apt bên dưới.
Bây giờ hãy chạy lệnh apt bên dưới để kiểm tra gói 'unbound' có sẵn trên Debian kho lưu trữ.
Đầu ra bên dưới xác nhận rằng gói Unbound có sẵn theo mặc định trên kho lưu trữ máy chủ Debian với phiên bản hiện tại 1.13.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22718%22%20height=%22500%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh apt bên dưới để cài đặt unbound vào hệ thống Debian của bạn. Khi được nhắc, hãy nhập y để xác nhận và nhấn ENTER để tiếp tục.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22667%22%20height=%22263%22%3E%3C/svg%3E
Sau khi Unbound được cài đặt, hãy chạy lệnh systemctl bên dưới để xác minh dịch vụ Unbound và đảm bảo rằng dịch vụ đã được bật và đang chạy.
Dịch vụ Unbound được bật và sẽ tự động khởi động khi hệ thống khởi động. Và trạng thái của dịch vụ Unbound đang chạy.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22250%22%3E%3C/svg%3E
Lưu ý thêm, nếu bạn đã tắt IPv6 trên máy chủ Debian của mình, Unbound không thể khởi động. Để giải quyết vấn đề này, bạn có thể thêm tham số 'do-ip6: no' vào phần 'server' trên tệp cấu hình unbound '/etc/unbound/unbound.conf'.
Sau khi cài đặt Unbound, tiếp theo bạn sẽ bắt đầu cấu hình Unbound trên hệ thống của mình.
Bây giờ bạn sẽ tìm hiểu về cấu hình cơ bản của máy chủ DNS Unbound.
Thêm các dòng sau vào tệp. Bạn có thể thiết lập các cấu hình Unbound cơ bản trong phần 'máy chủ'. Trong ví dụ này, bạn sẽ chạy Unbound trên địa chỉ IP cục bộ '192.168.5.20' với cổng mặc định 53. Ngoài ra, bạn sẽ thiết lập ghi nhật ký vào tin nhắn Syslog và tắt IPv6. Cuối cùng, bạn sẽ thiết lập Unbound để truy vấn đệ quy bất kỳ tên máy chủ nào từ máy chủ DNS gốc thông qua tệp 'root-hints'.
Tham số chi tiết:
Tham số chi tiết:
Tham số chi tiết:
Tham số chi tiết:
Ví dụ này sẽ tạo zone cho tên miền 'garden.lan' với loại 'static', sau đó bạn sẽ tạo nhiều tên miền phụ thông qua tham số 'local-data'. Mỗi miền phụ sẽ được trỏ đến một địa chỉ IP cụ thể và bạn cũng sẽ tạo bản ghi PTR thông qua tham số 'local-data-ptr'.
Các tham số chi tiết:
Tham số chi tiết:
Các tham số chi tiết:
Chạy lệnh bên dưới để kiểm tra và xác minh cấu hình Unbound. Nếu thành công, bạn sẽ nhận được kết quả như sau 'unbound-checkconf: no errors in /etc/unbound/unbound.conf'.
Tiếp theo, chạy lệnh systemctl bên dưới để khởi động lại dịch vụ Unbound và áp dụng các thay đổi.
Bây giờ bạn đã hoàn tất cấu hình Unbound, Tiếp theo bạn sẽ thiết lập tường lửa UFW và mở cổng DNS mặc định 53.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22605%22%20height=%22178%22%3E%3C/svg%3E
Chạy lệnh apt bên dưới để cài đặt tường lửa UFW vào máy chủ Debian của bạn. Nhập y khi được nhắc và nhấn ENTER để tiếp tục.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22660%22%20height=%22299%22%3E%3C/svg%3E
Sau khi UFW được cài đặt, bạn phải mở dịch vụ OpenSSH trên UFW thông qua lệnh bên dưới. Sau đó, bạn có thể thêm cổng DNS 53/udp vào tường lửa UFW.
Tiếp theo, chạy lệnh bên dưới để khởi động và kích hoạt dịch vụ tường lửa UFW. Khi được nhắc, hãy nhập y để xác nhận và nhấn ENTER để tiếp tục.
Đầu ra 'Tường lửa đang hoạt động và được bật khi khởi động hệ thống' xác nhận rằng tường lửa UFW đang chạy và được bật, điều này có nghĩa là tường lửa UFW sẽ tự động khởi động khi khởi động hệ thống.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22742%22%20height=%22244%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh ufw bên dưới để xác minh trạng thái của tường lửa UFW. Bạn sẽ nhận được kết quả đầu ra cho biết trạng thái UFW là 'hoạt động' với dịch vụ OpenSSH và cổng DNS 53/udp được bật.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22534%22%20height=%22208%22%3E%3C/svg%3E
Tạo tệp cấu hình Rsyslog mới '/etc/rsyslog.d/unbound.conf' bằng lệnh trình chỉnh sửa nano bên dưới.
Thêm các dòng sau vào tệp. Với điều này, các bản ghi Unbound sẽ được lưu trữ tại '/var/log/unbound.log'.
Lưu tệp và thoát khỏi trình chỉnh sửa khi hoàn tất.
Bây giờ hãy chạy tiện ích lệnh systemctl bên dưới để khởi động lại dịch vụ 'rsyslog' và áp dụng các thay đổi.
Tiếp theo, bạn sẽ thiết lập luân phiên nhật ký cho tệp nhật ký Unbound '/var/log/unbound.log'. Và bạn có thể thực hiện việc này thông qua dịch vụ logrotate.
Tạo tệp cấu hình logrotate mới '/etc/logrotate.d/unbound' bằng lệnh trình chỉnh sửa nano bên dưới.
Thêm các dòng sau vào tệp. Thao tác này sẽ tạo vòng quay nhật ký cho tệp nhật ký Unbound '/var/log/unbound.log' hàng ngày.
Lưu tệp và thoát khỏi trình chỉnh sửa khi hoàn tất.
Bây giờ hãy chạy tiện ích lệnh systemctl bên dưới để khởi động lại dịch vụ logrotate và áp dụng thay đổi.
Như vậy, bạn đã cài đặt và cấu hình thành công máy chủ DNS Unbound và cấu hình ghi nhật ký thông qua Rsyslog và Logrotate. Nhật ký không liên kết sẽ được lưu vào tệp '/var/unbound/unbound.log'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22608%22%20height=%22203%22%3E%3C/svg%3E
Đối với máy khách Ubuntu: Mạng trên Ubuntu được quản lý bởi NetworkManager. Để thiết lập trình phân giải DNS, bạn có thể kết hợp NetworkManager với systemd-resolved làm backend.
Đối với máy khách Debian: trên hệ thống Debian (phiên bản tối thiểu), mạng được xử lý bởi tệp cấu hình truyền thống '/etc/network/interface'. Bạn có thể định nghĩa thư mục trình phân giải DNS thành tệp '/etc/network/interface' hoặc sử dụng dịch vụ systemd-resolved, có sẵn theo mặc định trên máy chủ Debian.
Mở tệp '/etc/NetworkManager/NetworkManager.conf' bằng lệnh trình chỉnh sửa nano bên dưới.
Bỏ chú thích tham số 'dns' và thêm phần phụ trợ dưới dạng 'systemd-resolved'.
Lưu và thoát tệp khi hoàn tất.
Bây giờ hãy chạy lệnh systemctl bên dưới để khởi động lại dịch vụ NetworkManager và áp dụng các thay đổi.
Tiếp theo, bạn sẽ định nghĩa Unbound Local DNS trong systemd-resolved.
Mở tệp cấu hình systemd-resolved '/etc/systemd/resolved.conf' bằng lệnh trình chỉnh sửa nano bên dưới.
Trong phần '[Resolve]', bỏ chú thích tham số 'DNS' và nhập địa chỉ IP của Unbound DNS của bạn máy chủ.
Lưu và thoát tệp khi hoàn tất.
Tiếp theo, chạy lệnh systemctl bên dưới để khởi động và kích hoạt dịch vụ 'systemd-resolved'.
Bây giờ hãy xác minh trạng thái dịch vụ 'systemd-resolved' thông qua lệnh bên dưới. Bạn sẽ thấy systemd-resolved được bật và sẽ tự động chạy khi khởi động hệ thống. Và trạng thái của dịch vụ 'systemd-resolved' hiện đang chạy.
Bạn cũng có thể xác minh cấu hình trình phân giải DNS của mình thông qua lệnh 'resolvectl' bên dưới. Và bạn sẽ thấy trình phân giải mặc định là máy chủ DNS Unbound của bạn với địa chỉ IP '192.168.5.20'.
Mở tệp cấu hình systemd-resolved '/etc/systemd/resolved.conf' bằng lệnh nano bên dưới biên tập viên.
Thêm tham số 'DNS' theo sau là địa chỉ IP của máy chủ Unbound vào phần '[Resolver]'.
Lưu tệp và thoát khỏi trình biên tập khi hoàn tất.
Bây giờ hãy chạy lệnh systemctl bên dưới để bắt đầu và kích hoạt systemd-resolved dịch vụ.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22133%22%3E%3C/svg%3E
Sau đó, xác minh trạng thái của dịch vụ systemd-resolved để đảm bảo rằng dịch vụ đang chạy. Đầu ra 'active (running)' xác nhận rằng systemd-resolved đang chạy và đầu ra 'loaded ../../../systemd-resolved.service; enabled;..' xác nhận rằng dịch vụ đã được bật.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22247%22%3E%3C/svg%3E
Bạn có thể xác minh cấu hình trình phân giải DNS của mình thông qua lệnh 'resolvectl' bên dưới. Và bạn sẽ thấy trình phân giải mặc định là máy chủ DNS Unbound của bạn với địa chỉ IP '192.168.5.20'.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22724%22%20height=%22325%22%3E%3C/svg%3E
Khi thành công, bạn sẽ nhận được câu trả lời từ máy chủ DNS gốc như đầu ra bên dưới. Ngoài ra, bạn sẽ thấy cờ 'quảng cáo' (dữ liệu xác thực) trong đầu ra tiêu đề, nghĩa là DNSSEC đã được bật.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22674%22%20height=%22655%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh bên dưới để đảm bảo máy khách có thể truy cập tên miền trực tuyến.
Khi thành công, bạn sẽ nhận được bản ghi DNS chi tiết đầu ra cho tên miền 'github.com' và 'duckduckgo.com'. Bạn có thể thấy trình phân giải DNS trả lời truy vấn là '127.0.0.53#53', đây là systemd-resolved sử dụng Unbound làm trình phân giải mặc định. Ngoài ra, bạn có thể thấy 'Thời gian truy vấn' cho mỗi truy vấn, 'Thời gian truy vấn' đến miền 'github.com' là '1367' và đến 'duckduckgo.com' là '1059'.
Đầu ra cho github.com:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22662%22%20height=%22415%22%3E%3C/svg%3E
Đầu ra cho duckduckgo.com:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22653%22%20height=%22415%22%3E%3C/svg%3E
Nếu bạn chạy lại lệnh dig ở trên cùng, 'Thời gian truy vấn' sẽ được giảm xuống. Và điều này xác nhận rằng các truy vấn của bạn đã được lưu vào bộ nhớ đệm và bộ nhớ đệm DNS đang hoạt động.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22594%22%20height=%22161%22%3E%3C/svg%3E
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22586%22%20height=%22168%22%3E%3C/svg%3E
Tiếp theo, hãy xác minh tên miền cục bộ hoặc tên miền phụ thông qua lệnh dig bên dưới. Nếu thành công, mỗi tên miền phụ sẽ được trỏ đến đúng địa chỉ IP như đã cấu hình trên tệp cấu hình Unbound '/etc/unbound/unbound.conf'.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22458%22%20height=%22163%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh dig bên dưới để đảm bảo rằng các bản ghi PTR được trỏ đến tên miền chính xác.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22433%22%20height=%22178%22%3E%3C/svg%3E
Cuối cùng, bạn cũng có thể xác minh DoT (DNS qua TLS) thông qua tcpdump. Cài đặt gói 'tcpdump' vào máy chủ Unbound của bạn.
Nhập y khi được nhắc và nhấn ENTER để tiếp tục.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22215%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh tcpdump bên dưới để theo dõi lưu lượng truy cập trên giao diện 'eth0' với cổng DoT 853. Trong ví dụ này, Unbound DNS chạy trên địa chỉ IP '192.168.5.20' với giao diện 'eth0'.
Di chuyển đến máy khách và chạy lệnh bên dưới để truy cập tên miền bên ngoài/internet thông qua lệnh dig bên dưới.
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22638%22%20height=%22498%22%3E%3C/svg%3E
Sau đó, quay lại máy chủ Unbound và bây giờ bạn sẽ nhận được đầu ra tương tự như đầu ra tcpdump này.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22186%22%3E%3C/svg%3E
Với hướng dẫn này, bạn đã cài đặt và cấu hình Máy chủ DNS cục bộ thông qua Unbound. Ngoài ra, bạn đã cấu hình trình phân giải DNS trên máy khách Ubuntu thông qua systemd-resolved và NetworkManager, và máy khách Debian thông qua systemd-resolved.
Ngoài ra, bạn đã cấu hình quyền riêng tư và bảo mật DNS cơ bản, tối ưu hóa Unbound và cấu hình nhật ký Unbound qua rsyslog và logrotate.
Đến cuối hướng dẫn này, bạn cũng đã tìm hiểu cách thiết lập trình phân giải DNS trên máy Ubuntu và Debian qua NetworkManager và systemd-resolved. Và cũng đã tìm hiểu cách sử dụng cơ bản lệnh dig để kiểm tra máy chủ DNS.
Unbound chủ yếu được phát triển bởi NLnet Labs và phân phối theo giấy phép BSD, và hỗ trợ các tính năng hiện đại trên các tiêu chuẩn mở của Máy chủ DNS. Unbound đã được kiểm tra nghiêm ngặt và có thể chạy trên Linux, BSD và macOS. Unbound khả dụng cho hầu hết các hệ điều hành này và có thể được cài đặt thông qua trình quản lý gói hệ thống.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách thiết lập Máy chủ DNS riêng với Unbound trên máy chủ Debian 11 và Debian 12. Bạn sẽ thiết lập Unbound như một Máy chủ DNS cục bộ với một số tính năng như Máy chủ DNS có thẩm quyền, bật bộ đệm DNS, thiết lập địa chỉ IP cục bộ và Danh sách kiểm soát truy cập (ACL), thiết lập tên miền cục bộ, sau đó thiết lập Unbound như một trình phân giải DNS với DNS-over-TLS (DoT) được bật.
Ngoài ra, bạn cũng sẽ thiết lập ghi nhật ký cho dịch vụ Unbound thông qua Rsyslog và Logrotate.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn phải có các yêu cầu sau.- Một hệ thống chạy máy chủ Debian 11 hoặc máy chủ Debian 12.
- Một tài khoản người dùng có quyền quản trị viên sudo/root.
Cài đặt Unbound
Theo mặc định, gói Unbound có sẵn trên kho lưu trữ Debian. Bạn có thể cài đặt nó thông qua APT. Trong bước đầu tiên này, bạn sẽ cài đặt gói Unbound, bao gồm 'dns-root-data' vào máy chủ Debian của bạn.Trước khi bắt đầu, hãy cập nhật và làm mới chỉ mục gói Debian của bạn thông qua lệnh apt bên dưới.
Mã:
sudo apt update
Mã:
sudo apt info unbound
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22718%22%20height=%22500%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh apt bên dưới để cài đặt unbound vào hệ thống Debian của bạn. Khi được nhắc, hãy nhập y để xác nhận và nhấn ENTER để tiếp tục.
Mã:
sudo apt install unbound
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22667%22%20height=%22263%22%3E%3C/svg%3E
Sau khi Unbound được cài đặt, hãy chạy lệnh systemctl bên dưới để xác minh dịch vụ Unbound và đảm bảo rằng dịch vụ đã được bật và đang chạy.
Mã:
sudo systemctl is-enabled unbound
sudo systemctl status unbound
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22250%22%3E%3C/svg%3E
Lưu ý thêm, nếu bạn đã tắt IPv6 trên máy chủ Debian của mình, Unbound không thể khởi động. Để giải quyết vấn đề này, bạn có thể thêm tham số 'do-ip6: no' vào phần 'server' trên tệp cấu hình unbound '/etc/unbound/unbound.conf'.
Sau khi cài đặt Unbound, tiếp theo bạn sẽ bắt đầu cấu hình Unbound trên hệ thống của mình.
Cấu hình Máy chủ DNS Unbound
Cấu hình Unbound mặc định nằm tại '/etc/unbound/unbound.conf'. Trong bước này, bạn sẽ sửa đổi tệp cấu hình Unbound chính '/etc/unbound.conf' thông qua trình soạn thảo ưa thích của bạn.Bây giờ bạn sẽ tìm hiểu về cấu hình cơ bản của máy chủ DNS Unbound.
Cấu hình cơ bản
Mở tệp cấu hình Unbound mặc định '/etc/unbound/unbound.conf' bằng trình soạn thảo ưa thích của bạn. Ví dụ này sử dụng nano để chỉnh sửa tệp cấu hình '/etc/unbound/unbound.conf'.
Mã:
sudo nano /etc/unbound/unbound.conf
Mã:
#Adding DNS-Over-TLS support
server:
use-syslog: yes
username: "unbound"
directory: "/etc/unbound"
tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt
do-ip6: no
interface: 192.168.5.20
port: 53
prefetch: yes
root-hints: /usr/share/dns/root.hints
harden-dnssec-stripped: yes
- use-syslog: cho phép ghi nhật ký vào tin nhắn Syslog.
- username: chạy với tư cách là người dùng unbound, đây là người dùng mặc định.
- directory: thư mục làm việc mặc định cho Unbound là thư mục '/etc/unbound'.
- tls-cert-bundle: Chứng chỉ được sử dụng để xác thực các kết nối được thực hiện ngược dòng. Trên bản phân phối dựa trên Debian, tệp cert nằm tại '/etc/ssl/certs/ca-certificates.crt'.
- do-ip6: sử dụng 'yes' để chạy Unbound với IPv6 hoặc đặt 'no' để tắt IPv6.
- interface: giao diện mạng hoặc địa chỉ IP mà unbound sẽ chạy. Bạn có thể sử dụng địa chỉ IP hoặc tên giao diện như 'eth0'. Ngoài ra, bạn có thể chạy trong một cổng cụ thể bằng cách thêm định dạng như thế này 'IP-ADDRESS@PORT'.
- port: chỉ định cổng mà Unbound sẽ chạy và các kết nối của máy khách sẽ được xử lý bởi cổng này. Cổng DNS mặc định là 53.
- prefetch: đặt thành 'yes' để bật tính năng prefetch các mục nhập bộ nhớ đệm tin nhắn gần hết hạn.
- root-hints: tệp chứa thông tin chi tiết về máy chủ DNS gốc. Tệp '/usr/share/dns/root.hints' được cung cấp bởi gói 'dns-root-data'. Ngoài ra, bạn có thể tải xuống tệp root-hints từ đây 'https://www.internic.net/domain/named.cache'.
- harden-dnssec-stripped: đặt thành 'yes' để tăng cường khả năng chống lại việc nhận dữ liệu dnssec-stripped.
Bật bộ đệm DNS
Tiếp theo, thêm các dòng sau để bật truy vấn bộ đệm DNS trên bản cài đặt Unbound của bạn.
Mã:
cache-max-ttl: 14400
cache-min-ttl: 1200
- cache-max-ttl: TTL hoặc Thời gian Để Sống cho RRSets và tin nhắn trong bộ đệm DNS. Định dạng tính bằng giây.
- cache-min-ttl: Thời gian Sống tối thiểu cho bộ đệm. Mặc định là 0, nhưng bạn có thể thay đổi theo sở thích của mình, chẳng hạn như '1200' giây. Không đặt tùy chọn này quá 1 giờ, nếu không bạn sẽ gặp rắc rối do dữ liệu cũ.
Unbound Privacy and Security
Bây giờ, bạn có thể thêm các dòng sau để thiết lập quyền riêng tư và bảo mật cơ bản cho Unbound.
Mã:
aggressive-nsec: yes
hide-identity: yes
hide-version: yes
use-caps-for-id: yes
- aggressive-nsec: đặt thành 'yes' để bật tính năng aggressive NSEC, sử dụng chuỗi DNSSEC NSEC để tổng hợp NXDOMAIN và các lệnh từ chối khác. Kiểm tra trang web IETF về 'NSEC' https://www.ietf.org/archive/id/draft-ietf-dnsop-nsec-ttl-00.html.
- hide-identity: đặt thành yes để vô hiệu hóa câu trả lời từ các truy vấn bind về id.server hoặc hostname.bind.
- hide-version: đặt thành yes để vô hiệu hóa các truy vấn version.server và version.bind.
- use-caps-for-id: đặt thành yes để cho phép sử dụng '0x20-encoded' trong truy vấn để ngăn chặn các nỗ lực giả mạo.
Định nghĩa Mạng riêng và Danh sách kiểm soát truy cập (ACL)
Tiếp theo, bạn phải xác định private-address và ACL (Danh sách kiểm soát truy cập) của mạng. Thay đổi mạng con cục bộ trong các dòng bên dưới bằng môi trường mạng hiện tại của bạn.
Mã:
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
#control which clients are allowed to make (recursive) queries
access-control: 127.0.0.1/32 allow_snoop
access-control: ::1 allow_snoop
access-control: 127.0.0.0/8 allow
access-control: 192.168.5.0/24 allow
- private-address: xác định các mạng con mạng riêng trên cơ sở hạ tầng của bạn. Chỉ những tên 'private-domain' và 'local-data' mới được phép có các địa chỉ riêng này.
- access-control: xác định quyền kiểm soát truy cập trong đó các máy khách được phép thực hiện các truy vấn (đệ quy) đến máy chủ Unbound. Tham số 'allow' sẽ cho phép đệ quy, trong khi 'allow_snoop' sẽ cho phép cả đệ quy và không đệ quy.
Thiết lập tên miền cục bộ
Sau khi cấu hình private-address và access control lists, giờ đây bạn sẽ định nghĩa local zone cho tên miền cục bộ của mình. Điều này rất hữu ích, đặc biệt là nếu bạn có nhiều ứng dụng tự lưu trữ trên mạng cục bộ của mình. Bạn có thể dễ dàng định nghĩa tên miền hoặc tên miền phụ của mình và trỏ đến địa chỉ IP mục tiêu cụ thể.Ví dụ này sẽ tạo zone cho tên miền 'garden.lan' với loại 'static', sau đó bạn sẽ tạo nhiều tên miền phụ thông qua tham số 'local-data'. Mỗi miền phụ sẽ được trỏ đến một địa chỉ IP cụ thể và bạn cũng sẽ tạo bản ghi PTR thông qua tham số 'local-data-ptr'.
Mã:
# local zone
local-zone: "garden.lan." static
local-data: "firewall.garden.lan. IN A 10.0.0.1"
local-data: "vault.garden.lan. IN A 10.0.0.2"
local-data: "media.garden.lan. IN A 10.0.0.3"
local-data: "docs.garden.lan. IN A 10.0.0.4"
local-data: "wiki.garden.lan. IN A 10.0.0.5"
local-data-ptr: "10.0.0.1 firewall.garden.lan"
local-data-ptr: "10.0.0.2 vault.garden.lan"
local-data-ptr: "10.0.0.3 media.garden.lan"
local-data-ptr: "10.0.0.4 docs.garden.lan"
local-data-ptr: "10.0.0.5 wiki.garden.lan"
- local-zone: định nghĩa miền cục bộ tại đây.
- local-data: định nghĩa bản ghi A cho các miền phụ và địa chỉ IP cục bộ nào sẽ được giải quyết.
- local-data-ptr: định nghĩa bản ghi ptr cho các miền phụ của bạn.
Điều chỉnh hiệu suất không ràng buộc và Tweak
Thêm các dòng sau để có hiệu suất cao hơn. Bạn có thể điều chỉnh các tham số bên dưới với môi trường hiện tại của mình.
Mã:
num-threads: 4
msg-cache-slabs: 8
rrset-cache-slabs: 8
infra-cache-slabs: 8
key-cache-slabs: 8
rrset-cache-size: 256m
msg-cache-size: 128m
so-rcvbuf: 8m
- num-threads: số luồng sẽ được tạo. Giá trị phải khớp với lõi CPU máy chủ.
- msg-cache-slabs: số lượng slab sử dụng cho bộ đệm tin nhắn. Đặt thành 8 để tối ưu hóa Unbound nhằm sử dụng nhiều bộ nhớ hơn cho bộ đệm.
- rrset-cache-slabs: số lượng slab sử dụng cho bộ đệm RRset. Đặt thành 8 để tối ưu hóa Unbound nhằm sử dụng nhiều bộ nhớ hơn cho bộ đệm RRSet.
- infra-cache-slabs: số lượng slab sử dụng cho bộ đệm Infrastructure. Đặt thành 8 để tối ưu hóa Unbound nhằm sử dụng nhiều bộ nhớ hơn cho bộ đệm Infrastructure.
- key-cache-slabs: số lượng slab sử dụng cho bộ đệm key. Đặt thành 8 để tối ưu hóa Unbound nhằm sử dụng nhiều bộ nhớ hơn cho bộ đệm key.
- rrset-cache-size: chỉ định lượng bộ nhớ cho bộ đệm RRSet. Ví dụ này sử dụng 256MB, mặc định chỉ là 4MB.
- msg-cache-size: chỉ định lượng bộ nhớ cho bộ đệm message. Ví dụ này sử dụng 128MB, mặc định chỉ là 4MB.
- so-rcvbuf: thiết lập kích thước bộ đệm cho cổng DNS 53/udp thành 8 MB.
Thiết lập Unbound làm Bộ giải quyết DNS với DNS-over-TLS (DoT)
Cuối cùng, thêm phần mới 'forward-zone' để thiết lập Unbound làm bộ giải quyết DNS cho mạng cục bộ của bạn. Ví dụ này sử dụng máy chủ DNS Quad9 với DoT (DNS-over-TLS) được bật.
Mã:
forward-zone:
name: "."
forward-ssl-upstream: yes
## Also add IBM IPv6 Quad9 over TLS
forward-addr: 9.9.9.9@853#dns.quad9.net
forward-addr: 149.112.112.112@853#dns.quad9.net
- forward-zone: xác định vùng chuyển tiếp cho Unbound.
- name: đặt thành "." để chuyển tiếp tất cả các truy vấn DNS.
- forward-addr: sử dụng một trình chuyển tiếp cụ thể để chuyển tiếp tất cả các truy vấn DNS. Ví dụ này sử dụng Quad9 DNS với DNS-over-TLS (DoT) được bật.
Chạy lệnh bên dưới để kiểm tra và xác minh cấu hình Unbound. Nếu thành công, bạn sẽ nhận được kết quả như sau 'unbound-checkconf: no errors in /etc/unbound/unbound.conf'.
Mã:
sudo unbound-checkconf
Mã:
sudo systemctl restart unbound
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22605%22%20height=%22178%22%3E%3C/svg%3E
Thiết lập tường lửa UFW
Trong bước này, bạn sẽ thiết lập tường lửa UFW trên máy chủ Debian và mở cổng DNS 53/udp. Nhưng trước đó, bạn phải cài đặt các gói UFW từ kho lưu trữ Debian qua APT.Chạy lệnh apt bên dưới để cài đặt tường lửa UFW vào máy chủ Debian của bạn. Nhập y khi được nhắc và nhấn ENTER để tiếp tục.
Mã:
sudo apt install ufw
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22660%22%20height=%22299%22%3E%3C/svg%3E
Sau khi UFW được cài đặt, bạn phải mở dịch vụ OpenSSH trên UFW thông qua lệnh bên dưới. Sau đó, bạn có thể thêm cổng DNS 53/udp vào tường lửa UFW.
Mã:
sudo ufw allow OpenSSH
sudo ufw allow 53/udp
Mã:
sudo ufw enable
Đầu ra:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22742%22%20height=%22244%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh ufw bên dưới để xác minh trạng thái của tường lửa UFW. Bạn sẽ nhận được kết quả đầu ra cho biết trạng thái UFW là 'hoạt động' với dịch vụ OpenSSH và cổng DNS 53/udp được bật.
Mã:
sudo ufw status
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22534%22%20height=%22208%22%3E%3C/svg%3E
Unbound Log qua Rsyslog và Logrotate
Sau khi cấu hình tường lửa UFW, bây giờ bạn sẽ thiết lập tệp nhật ký cho Unbound qua rsyslog và logrotate. Dịch vụ rsyslog sẽ tạo một tệp nhật ký cụ thể cho Unbound và logrotate sẽ xoay vòng tệp nhật ký Unbound trong một thời gian nhất định.Tạo tệp cấu hình Rsyslog mới '/etc/rsyslog.d/unbound.conf' bằng lệnh trình chỉnh sửa nano bên dưới.
Mã:
sudo nano /etc/rsyslog.d/unbound.conf
Mã:
# Log messages generated by unbound application
if $programname == 'unbound' then /var/log/unbound.log
# stop processing it further
& stop
Bây giờ hãy chạy tiện ích lệnh systemctl bên dưới để khởi động lại dịch vụ 'rsyslog' và áp dụng các thay đổi.
Mã:
sudo systemctl restart rsyslog
Tạo tệp cấu hình logrotate mới '/etc/logrotate.d/unbound' bằng lệnh trình chỉnh sửa nano bên dưới.
Mã:
sudo nano /etc/logrotate.d/unbound
Mã:
/var/log/unbound.log {
daily
rotate 7
missingok
create 0640 root adm
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
Bây giờ hãy chạy tiện ích lệnh systemctl bên dưới để khởi động lại dịch vụ logrotate và áp dụng thay đổi.
Mã:
sudo systemctl restart logrotate
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22608%22%20height=%22203%22%3E%3C/svg%3E
Thiết lập Bộ giải quyết DNS trên Máy khách Linux
Trong bước này, bạn sẽ tìm hiểu cách thiết lập bộ giải quyết DNS trên máy khách. Bước này sẽ chỉ cho bạn hai phương pháp cho các bản phân phối Linux khác nhau.Đối với máy khách Ubuntu: Mạng trên Ubuntu được quản lý bởi NetworkManager. Để thiết lập trình phân giải DNS, bạn có thể kết hợp NetworkManager với systemd-resolved làm backend.
Đối với máy khách Debian: trên hệ thống Debian (phiên bản tối thiểu), mạng được xử lý bởi tệp cấu hình truyền thống '/etc/network/interface'. Bạn có thể định nghĩa thư mục trình phân giải DNS thành tệp '/etc/network/interface' hoặc sử dụng dịch vụ systemd-resolved, có sẵn theo mặc định trên máy chủ Debian.
Đối với máy khách Ubuntu có NetworkManager và Systemd-resolved
Đây là dành cho người dùng Ubuntu sử dụng NetworkManager làm cấu hình mạng mặc định. Bạn sẽ thiết lập systemd-resolved làm phần phụ trợ cho máy chủ DNS trên NetworkManager.Mở tệp '/etc/NetworkManager/NetworkManager.conf' bằng lệnh trình chỉnh sửa nano bên dưới.
Mã:
sudo nano /etc/NetworkManager/NetworkManager.conf
Mã:
dns=systemd-resolved
Bây giờ hãy chạy lệnh systemctl bên dưới để khởi động lại dịch vụ NetworkManager và áp dụng các thay đổi.
Mã:
sudo systemctl restart NetworkManager
Mở tệp cấu hình systemd-resolved '/etc/systemd/resolved.conf' bằng lệnh trình chỉnh sửa nano bên dưới.
Mã:
sudo nano /etc/systemd/resolved.conf
Mã:
[Resolve]
DNS= 192.168.5.20
Tiếp theo, chạy lệnh systemctl bên dưới để khởi động và kích hoạt dịch vụ 'systemd-resolved'.
Mã:
sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved
Mã:
sudo systemctl status systemd-resolved
Mã:
resolvectl status
Đối với máy khách Debian
Đối với hệ thống Debian, bạn cũng có thể sử dụng dịch vụ systemd-resolved để thiết lập trình phân giải DNS.Mở tệp cấu hình systemd-resolved '/etc/systemd/resolved.conf' bằng lệnh nano bên dưới biên tập viên.
Mã:
sudo nano /etc/systemd/resolved.conf
Lưu tệp và thoát khỏi trình biên tập khi hoàn tất.
Bây giờ hãy chạy lệnh systemctl bên dưới để bắt đầu và kích hoạt systemd-resolved dịch vụ.
Mã:
sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22133%22%3E%3C/svg%3E
Sau đó, xác minh trạng thái của dịch vụ systemd-resolved để đảm bảo rằng dịch vụ đang chạy. Đầu ra 'active (running)' xác nhận rằng systemd-resolved đang chạy và đầu ra 'loaded ../../../systemd-resolved.service; enabled;..' xác nhận rằng dịch vụ đã được bật.
Mã:
sudo systemctl status systemd-resolved
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22247%22%3E%3C/svg%3E
Bạn có thể xác minh cấu hình trình phân giải DNS của mình thông qua lệnh 'resolvectl' bên dưới. Và bạn sẽ thấy trình phân giải mặc định là máy chủ DNS Unbound của bạn với địa chỉ IP '192.168.5.20'.
Mã:
resolvectl status
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22724%22%20height=%22325%22%3E%3C/svg%3E
Đang thử nghiệm Máy chủ DNS không ràng buộc
Chạy lệnh dig bên dưới để đảm bảo rằng Unbound DNS đang hoạt động như một trình phân giải DNS. Tham số '@192.168.5.20' đảm bảo bạn đang sử dụng máy chủ DNS không ràng buộc chạy trên địa chỉ IP '192.168.5.20'.
Mã:
dig @192.168.5.20
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22674%22%20height=%22655%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh bên dưới để đảm bảo máy khách có thể truy cập tên miền trực tuyến.
Mã:
dig github.com
dig duckduckgo.com
Đầu ra cho github.com:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22662%22%20height=%22415%22%3E%3C/svg%3E
Đầu ra cho duckduckgo.com:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22653%22%20height=%22415%22%3E%3C/svg%3E
Nếu bạn chạy lại lệnh dig ở trên cùng, 'Thời gian truy vấn' sẽ được giảm xuống. Và điều này xác nhận rằng các truy vấn của bạn đã được lưu vào bộ nhớ đệm và bộ nhớ đệm DNS đang hoạt động.
Mã:
dig github.com
dig duckduckgo.com
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22594%22%20height=%22161%22%3E%3C/svg%3E
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22586%22%20height=%22168%22%3E%3C/svg%3E
Tiếp theo, hãy xác minh tên miền cục bộ hoặc tên miền phụ thông qua lệnh dig bên dưới. Nếu thành công, mỗi tên miền phụ sẽ được trỏ đến đúng địa chỉ IP như đã cấu hình trên tệp cấu hình Unbound '/etc/unbound/unbound.conf'.
Mã:
dig firewall.garden.lan +short
dig vault.garden.lan +short
dig media.garden.lan +short
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22458%22%20height=%22163%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh dig bên dưới để đảm bảo rằng các bản ghi PTR được trỏ đến tên miền chính xác.
Mã:
dig -x 10.0.0.1 +short
dig -x 10.0.0.2 +short
dig -x 10.0.0.3 +short
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22433%22%20height=%22178%22%3E%3C/svg%3E
Cuối cùng, bạn cũng có thể xác minh DoT (DNS qua TLS) thông qua tcpdump. Cài đặt gói 'tcpdump' vào máy chủ Unbound của bạn.
Mã:
sudo apt install tcpdump
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22215%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh tcpdump bên dưới để theo dõi lưu lượng truy cập trên giao diện 'eth0' với cổng DoT 853. Trong ví dụ này, Unbound DNS chạy trên địa chỉ IP '192.168.5.20' với giao diện 'eth0'.
Mã:
tcpdump -vv -x -X -s 1500 -i eth0 'port 853'
Mã:
dig google.com
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22638%22%20height=%22498%22%3E%3C/svg%3E
Sau đó, quay lại máy chủ Unbound và bây giờ bạn sẽ nhận được đầu ra tương tự như đầu ra tcpdump này.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22186%22%3E%3C/svg%3E
Với hướng dẫn này, bạn đã cài đặt và cấu hình Máy chủ DNS cục bộ thông qua Unbound. Ngoài ra, bạn đã cấu hình trình phân giải DNS trên máy khách Ubuntu thông qua systemd-resolved và NetworkManager, và máy khách Debian thông qua systemd-resolved.
Kết luận
Trong hướng dẫn này, bạn đã cài đặt Máy chủ DNS cục bộ Unbound trên máy chủ Debian 11. Bạn đã bật bộ đệm DNS, DNSSEC (bật theo mặc định), cấu hình private-address và ACL, thêm tên miền cục bộ qua local-zone, sau đó cấu hình Unbound làm trình phân giải DNS với DoT (DNS-over-TLS).Ngoài ra, bạn đã cấu hình quyền riêng tư và bảo mật DNS cơ bản, tối ưu hóa Unbound và cấu hình nhật ký Unbound qua rsyslog và logrotate.
Đến cuối hướng dẫn này, bạn cũng đã tìm hiểu cách thiết lập trình phân giải DNS trên máy Ubuntu và Debian qua NetworkManager và systemd-resolved. Và cũng đã tìm hiểu cách sử dụng cơ bản lệnh dig để kiểm tra máy chủ DNS.