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à nó 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ẽ cài đặt Unbound trên máy chủ Ubuntu 22.04 và thiết lập nó thành Máy chủ DNS cục bộ với một số tính năng được bật, chẳng hạn như DNSSEC, bộ đệm DNS, tên miền cục bộ và tên miền phụ, cũng như DNS-over-TLS (DoT). Bạn cũng sẽ thiết lập ghi nhật ký Unbound thông qua Rsyslog và logrotate và thiết lập máy khách Ubuntu để xác minh cài đặt Unbound của bạn.
Bây giờ hãy kiểm tra chi tiết gói unbound thông qua lệnh sau.
Tại thời điểm viết bài này, kho lưu trữ Ubuntu mặc định cung cấp Unbound 1.13.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22503%22%3E%3C/svg%3E
Tiếp theo, cài đặt Unbound bằng lệnh apt sau. 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=%22739%22%20height=%22257%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 Unbound dịch vụ.
Đầu ra 'enabled' xác nhận rằng Unbound đã được bật và sẽ tự động khởi động khi hệ thống khởi động. Và đầu ra 'active (running)' xác nhận rằng Unbound đang chạy.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22278%22%3E%3C/svg%3E
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, bật bộ đệm DNS, thiết lập tên miền cục bộ và tên miền phụ, thiết lập Unbound làm trình phân giải DNS với DoT (DNS-over-TLS) được bật.
Thêm các dòng sau vào tệp. Phần 'máy chủ' cho phép bạn thiết lập các cấu hình Unbound cơ bản. Trong ví dụ này, bạn sẽ chạy Unbound trên địa chỉ IP cục bộ '192.168.5.100' 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'.
Các tham số chi tiết:
Chi tiết tham số:
Tham số chi tiết:
Tham số chi tiết:
Ví dụ này sẽ tạo vùng cho tên miền 'home.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 đầu ra như 'unbound-checkconf: no errors in /etc/unbound/unbound.conf'.
Tiếp theo, chạy lệnh bên dưới để tăng 'net.core.rmem_max' mặc định của hệ thống thông qua tệp '/etc/sysctl.conf'. Sau đó, áp dụng các thay đổi thông qua lệnh 'sysctl'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22707%22%20height=%22146%22%3E%3C/svg%3E
Sau đó, 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.
Với lệnh này, dịch vụ Unbound sẽ chạy với cấu hình mới trên địa chỉ IP 192.168.5.100 trên cổng 53.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22609%22%20height=%22181%22%3E%3C/svg%3E
Kiểm tra danh sách các cổng mở trên hệ thống của bạn thông qua lệnh ss bên dưới.
Bạn sẽ nhận được kết quả như thế này - Cổng udp DNS mặc định 53 được dịch vụ Unbound sử dụng.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22212%22%3E%3C/svg%3E
Bây giờ bạn đã hoàn tất cấu hình Unbound, bạn sẽ thiết lập tường lửa UFW và mở cổng DNS mặc định 53.
Chạy lệnh bên dướ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=%22728%22%20height=%22297%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 thông báo trạng thái UFW là 'hoạt động' với dịch vụ OpenSSH và cổng DNS 53/udp được bật.
Thông báo:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22525%22%20height=%22208%22%3E%3C/svg%3E
Chạy lệnh bên dưới để thêm cấu hình Rsyslog mới '/etc/rsyslog.d/unbound.conf' cho dịch vụ Unbound. Với lệnh này, các bản ghi Unbound sẽ được lưu trữ tại '/var/log/unbound.log'.
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à nó 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ẽ cài đặt Unbound trên máy chủ Ubuntu 22.04 và thiết lập nó thành Máy chủ DNS cục bộ với một số tính năng được bật, chẳng hạn như DNSSEC, bộ đệm DNS, tên miền cục bộ và tên miền phụ, cũng như DNS-over-TLS (DoT). Bạn cũng sẽ thiết lập ghi nhật ký Unbound thông qua Rsyslog và logrotate và thiết lập máy khách Ubuntu để xác minh cài đặt Unbound của bạn.
Đ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áy chủ Ubuntu 22.04 - Ví dụ này sử dụng máy chủ Ubuntu có tên máy chủ 'unbound-server' và địa chỉ IP '192.168.5.100'.
- Người dùng không phải root có quyền quản trị viên sudo/root.
Cài đặt Unbound DNS Server
Theo mặc định, kho lưu trữ Ubuntu cung cấp một gói Unbound mà bạn có thể dễ dàng cài đặt thông qua APT. Trước khi bắt đầu cài đặt Unbound, hãy đưa ra lệnh apt sau để cập nhật và làm mới chỉ mục gói Ubuntu của bạn.
Mã:
sudo apt update
Mã:
sudo apt info unbound
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22503%22%3E%3C/svg%3E
Tiếp theo, cài đặt Unbound bằng lệnh apt sau. 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=%22739%22%20height=%22257%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 Unbound dịch vụ.
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=%22278%22%3E%3C/svg%3E
Cấu hình Unbound làm Máy chủ DNS cục bộ
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/unbound.conf' thông qua trình soạn thảo bạn thích.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, bật bộ đệm DNS, thiết lập tên miền cục bộ và tên miền phụ, thiết lập Unbound làm trình phân giải DNS với DoT (DNS-over-TLS) được bật.
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 bạn thích. 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.100
port: 53
prefetch: yes
root-hints: /usr/share/dns/root.hints
harden-dnssec-stripped: yes
- use-syslog: bật 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ổng này sẽ xử lý các kết nối của máy khách. Cổng DNS mặc định là 53.
- prefetch: đặt thành 'yes' để bật tính năng prefetch các mục bộ đệ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'. Và cũng 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 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: 11000
- cache-max-ttl: TTL hoặc Thời gian tồn tại 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 tồn tại tối thiểu cho bộ đệm. Mặc định là 0, nhưng bạn có thể thay đổi theo ý thích của mình, chẳng hạn như '11000' giây. Không thiết lập này trong hơn 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' để cho phép 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 liên kết 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 '0x100-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 cần định nghĩa private-address và ACL (Danh sách kiểm soát truy cập) của mạng. Hãy đảm bảo thay đổi mạng con cục bộ trong các dòng bên dưới với môi trường mạng hiện tại của bạn.
Mã:
private-address: 192.168.0.0/16
private-address: 192.168.5.0/24
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: định nghĩa 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ó những địa chỉ riêng này.
- access-control: định nghĩa quyền kiểm soát truy cập mà trong đó các máy khách được phép thực hiện các truy vấn (đệ quy) tới 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 miền cục bộ
Sau khi cấu hình địa chỉ riêng tư và danh sách kiểm soát truy cập, bạn sẽ xác định vùng cục bộ của tên miền. Điều này rất hữu ích, đặc biệt 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 xác định 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 vùng cho tên miền 'home.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: "home.lan." static
local-data: "firewall.home.lan. IN A 10.0.0.1"
local-data: "vault.home.lan. IN A 10.0.0.2"
local-data: "media.home.lan. IN A 10.0.0.3"
local-data: "docs.home.lan. IN A 10.0.0.4"
local-data: "wiki.home.lan. IN A 10.0.0.5"
local-data-ptr: "10.0.0.1 firewall.home.lan"
local-data-ptr: "10.0.0.2 vault.home.lan"
local-data-ptr: "10.0.0.3 media.home.lan"
local-data-ptr: "10.0.0.4 docs.home.lan"
local-data-ptr: "10.0.0.5 wiki.home.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. Trên hệ thống Ubuntu, bạn cũng phải thiết lập giá trị cao hơn cho tham số hạt nhân 'net.core.rmem_max'.
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: định nghĩa forward zone 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 forwarder cụ thể để chuyển tiếp tất cả các truy vấn DNS. Ví dụ này sử dụng DNS Quad9 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 đầu ra như 'unbound-checkconf: no errors in /etc/unbound/unbound.conf'.
Mã:
sudo unbound-checkconf
Mã:
echo "net.core.rmem_max= 8388608" >> /etc/sysctl.conf
sudo sysctl -p
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22707%22%20height=%22146%22%3E%3C/svg%3E
Sau đó, 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.
Mã:
sudo systemctl restart unbound
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22609%22%20height=%22181%22%3E%3C/svg%3E
Kiểm tra danh sách các cổng mở trên hệ thống của bạn thông qua lệnh ss bên dưới.
Mã:
ss -tulpn
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22212%22%3E%3C/svg%3E
Bây giờ bạn đã hoàn tất cấu hình Unbound, bạn sẽ thiết lập tường lửa UFW và mở cổng DNS mặc định 53.
Thiết lập tường lửa UFW
Trên Ubuntu, tường lửa mặc định được cài đặt là UFW. Tường lửa đã được cài đặt nhưng vẫn chưa hoạt động. Trong bước này, bạn sẽ thiết lập tường lửa UFW và mở cổng UDP cho Unbound.Chạy lệnh bên dướ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=%22728%22%20height=%22297%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 thông báo 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=%22525%22%20height=%22208%22%3E%3C/svg%3E
Thiết lập 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.Chạy lệnh bên dưới để thêm cấu hình Rsyslog mới '/etc/rsyslog.d/unbound.conf' cho dịch vụ Unbound. Với lệnh này, các bản ghi Unbound sẽ được lưu trữ tại '/var/log/unbound.log'.
Mã:
cat