Cách thiết lập bộ giải quyết DNS cục bộ với Unbound trên Rocky Linux 9

theanh

Administrator
Nhân viên
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, tôi sẽ thiết lập Máy chủ DNS cục bộ với Unbound trên máy chủ Rocky Linux 9. Bạn sẽ cấu hình Unbound thành DNS lưu trữ đệm có thẩm quyền, xác thực và đệ quy. Ngoài ra, bạn cũng sẽ thiết lập Unbound làm trình phân giải DNS cho mạng cục bộ của mình với DNS-over-TLS (DoT) được bật trên đó.

Đến cuối hướng dẫn này, bạn cũng sẽ thiết lập nhật ký Unbound thông qua Rsyslog và Logrotate, đồng thời thiết lập máy khách Linux để sử dụng Unbound làm trình phân giải DNS và xác minh toàn bộ cài đặt của bạn từ đó.

Điều kiện tiên quyết​

Trước khi bắt đầu với hướng dẫn này, hãy đảm bảo rằng bạn có các yêu cầu sau:
  • Máy chủ đã cài đặt Rocky Linux 9 - Ví dụ này sử dụng Rocky Linux với tên máy chủ 'unbound-rocky' và địa chỉ IP '192.168.5.25'.
  • Người dùng không phải root có quyền quản trị viên root/sudo.
  • SELinux đang chạy ở chế độ cho phép mode.
Và thế là xong. Nếu tất cả các yêu cầu đã được đáp ứng, hãy tiếp tục và bắt đầu cài đặt Unbound trên máy chủ của bạn.

Cài đặt Unbound​

Unbound là phần mềm Máy chủ DNS hỗ trợ hầu hết các hệ điều hành, bao gồm Linux, BDS và macOS. Trên Rocky Linux, gói Unbound có sẵn theo mặc định trên kho lưu trữ Rocky Linux AppStream chính thức.

Trong bước đầu tiên này, bạn sẽ cài đặt gói Unbound vào hệ thống Rocky Linux của mình.

Bây giờ hãy chạy lệnh dnf bên dưới để xác minh gói 'unbound' có sẵn trên kho lưu trữ AppStream. Tại thời điểm viết bài này, kho lưu trữ Rocky Linux AppStream cung cấp Unbound 1.16.
Mã:
sudo dnf info unbound
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22384%22%3E%3C/svg%3E


Cài đặt Unbound thông qua lệnh dnf bên dưới. Khi được nhắc, hãy nhập y để xác nhận và nhấn ENTER để tiếp tục.
Mã:
sudo dnf install unbound
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22211%22%3E%3C/svg%3E


Sau khi cài đặt unbound, hãy khởi động và kích hoạt dịch vụ 'unbound' thông qua tiện ích lệnh systemctl bên dưới. Thao tác này sẽ khởi động Unbound trên máy chủ Rocky Linux của bạn và cho phép nó chạy tự động khi hệ thống khởi động.
Mã:
sudo systemctl start unbound
sudo systemctl enable unbound
Xác minh dịch vụ Unbound bằng lệnh systemctl bên dưới. Đầu ra 'active (running)' xác nhận rằng dịch vụ Unbound đang chạy. Và đầu ra 'loaded ....; enabled;...' xác nhận rằng dịch vụ Unbound đã được bật.
Mã:
sudo systemctl status unbound
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22236%22%3E%3C/svg%3E


Unbound của bạn hiện đã được cài đặt và chạy với tệp cấu hình mặc định '/etc/unbound/unbound.conf'. Tiếp theo, bạn sẽ sửa đổi tệp cấu hình Unbound '/etc/unbound/unbound.conf' và thiết lập Unbound thành DNS lưu trữ đệm đệ quy, xác thực và có thẩm quyền, đồng thời cũng bật Unbound thành trình phân giải DNS với DoT được bật.

Cấu hình Unbound​

Theo mặc định, tệp cấu hình Unbound 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 '/etc/unbound/unbound.conf', sau đó thiết lập và tối ưu hóa cài đặt Unbound.

Bạn sẽ thiết lập Unbound để chạy dưới dạng DNS lưu trữ đệm đệ quy, có thẩm quyền và có thẩm quyền. Ngoài ra, bạn cũng sẽ tối ưu hóa cài đặt Unbound về hiệu suất, quyền riêng tư và bảo mật. Và cuối cùng, bạn sẽ thiết lập Unbound thành trình phân giải DNS cho mạng cục bộ.

Trước tiên, hãy chạy lệnh wget bên dưới để tải tệp DNS gốc xuống '/etc/unbound/root.hints'. Sau đó, hãy thay đổi quyền sở hữu tệp '/etc/unbound/root.hints' thành người dùng và nhóm 'unbound'.
Mã:
wget https://www.internic.net/domain/named.root -O /etc/unbound/root.hints
sudo chown unbound:unbound /etc/unbound/root.hints
Tiếp theo, hãy sao lưu tệp cấu hình Unbound mặc định xuống '/etc/unbound/unbound.conf.orig' và sửa đổi tệp gốc '/etc/unbound/unbound.conf' bằng trình chỉnh sửa nano bên dưới lệnh.
Mã:
sudo cp -v /etc/unbound/unbound{.conf,.conf.orig}
sudo nano /etc/unbound/unbound.conf
Bây giờ chúng ta hãy bắt đầu cấu hình Unbound.

Cấu hình Unbound Basic​

Trước tiên, bạn sẽ thiết lập địa chỉ IP và cổng mà dịch vụ Unbound sẽ chạy. Sau đó, bạn cũng sẽ thiết lập một gói chứng chỉ sẽ được sử dụng để xác thực các kết nối được thực hiện ngược dòng và thêm các máy chủ DNS gốc thông qua tham số 'root-hints'.

Thêm các dòng sau vào phần 'server:'. Với các thiết lập này, bạn sẽ chạy Unbound trên địa chỉ IP cục bộ '192.168.5.25' với cổng UDP mặc định là '53'.
Mã:
server:
 ...
 ...
 # interface-automatic: no
 do-ip6: no
 interface: 192.168.5.25
 port: 53
 prefetch: yes

 tls-cert-bundle: /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
 root-hints: /etc/unbound/root.hints
Các tham số chi tiết:
  • 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 bộ đệm tin nhắn gần hết hạn.
  • 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 RHEL, tệp cert nằm tại '/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem'.
  • root-hints: tệp chứa thông tin chi tiết về máy chủ DNS gốc. Bạn đã tải tệp này xuống '/etc/unbound/root.hints'.

Bật bộ đệm DNS​

Bây giờ hãy thêm các dòng sau để bật bộ đệm DNS đệ quy thông qua Unbound. Thao tác này sẽ lưu vào bộ đệm các truy vấn DNS do máy khách thực hiện trên máy chủ Unbound trong khoảng thời gian đó.
Mã:
cache-max-ttl: 14400
 cache-min-ttl: 1200
Tham số chi tiết:
  • 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 tùy theo sở thích của mình, chẳng hạn như '1200' giây. Không đặt giá trị này quá 1 giờ, nếu không bạn sẽ gặp rắc rối do dữ liệu cũ.

Hardening Unbound​

Một số tham số về quyền riêng tư và bảo mật cho Unbound được bật theo mặc định trên bản phân phối dựa trên RHEL. Tuy nhiên, bạn cũng có thể thêm nhiều tham số như những dòng này.
Mã:
hide-identity: yes
 hide-version: yes
 use-caps-for-id: yes
Tham số chi tiết:
  • 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 Địa chỉ Riêng và Danh sách Kiểm soát Truy cập​

Tiếp theo, bạn sẽ cần định nghĩa private-address và ACL (Danh sách Kiểm soát Truy cập) cho mạng cục bộ của mình. 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: 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
Các tham số chi tiết:
  • 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ó các địa chỉ riêng này.
  • access-control: định nghĩa 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ẽ bật đệ quy, trong khi 'allow_snoop' sẽ bật cả đệ quy và không đệ quy.

Thiết lập Tên miền cục bộ và Tên miền phụ​

Sau khi định cấu hình private-address và danh sách kiểm soát truy cập, giờ đây bạn sẽ tạo tên miền cục bộ thông qua tham số 'local-zone' của Unbound. Đ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ể.

Trong ví dụ này, bạn sẽ thiết lập tên miền cục bộ 'tĩnh' 'garden.lan' và 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"
Các tham số chi tiết:
  • local-zone: định nghĩa miền cục bộ tại đây.
  • local-data: định nghĩa bản ghi 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.

Unbound Optimization and Tweaks​

Tiếp theo, thêm các dòng sau để tối ưu hóa cài đặt Unbound của bạn. Bạn có thể điều chỉnh và tinh chỉnh các tham số bên dưới tùy thuộc vào môi trường hiện tại của bạn.
Mã:
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
Tham số chi tiết:
  • 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 8MB.

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 làm trình phân giải DNS ngược dòng.
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
Tham số chi tiết:
  • 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 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 DNS Quad9 với DNS-over-TLS (DoT) được bật.
Bây giờ hãy lưu và thoát tệp '/etc/unbound/unbound.conf' khi mọi thứ hoàn tất.

Tiếp theo, hãy chạy lệnh bên dưới để xác minh cấu hình Unbound và đảm bảo rằng bạn đã cấu hình đúng và phù hợp. Khi thành công, bạn sẽ nhận được đầu ra 'unbound-checkconf: no errors in /etc/unbound/unbound.conf'.
Mã:
unbound-checkconf

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22271%22%3E%3C/svg%3E


Bây giờ hãy khởi động lại dịch vụ Unbound thông qua tiện ích lệnh systemctl bên dưới và áp dụng các thay đổi.
Mã:
sudo systemctl restart unbound
Với thao tác này, bạn đã hoàn tất cấu hình Unbound và hiện đang chạy trên địa chỉ IP '192.168.5.25' với cổng UDP mặc định '53'.

Trong các bước tiếp theo, bạn sẽ thiết lập firewalld để mở cổng DNS và thiết lập ghi nhật ký Unbound thông qua Rsyslog và Logrotate.

Thiết lập Firewalld​

Vì vậy, Unbound đã hoạt động trên cổng UDP mặc định 53. Bây giờ bạn phải mở cổng DNS 53/UDP trên firewalld và cho phép các máy khách truy cập Máy chủ DNS Unbound của bạn.

Chạy lệnh firewall-cmd bên dưới để thêm dịch vụ mới 'dns'. Sau đó, tải lại firewalld để áp dụng các thay đổi. Khi thành công, bạn sẽ nhận được thông báo như 'thành công' trên thiết bị đầu cuối của mình.
Mã:
sudo firewall-cmd --add-service=dns --permanent
sudo firewall-cmd --reload
Tiếp theo, chạy lệnh bên dưới để xác minh danh sách các dịch vụ đã bật trên firewalld. Và bạn sẽ thấy dịch vụ 'dns' được thêm vào tường lửa.
Mã:
sudo firewall-cmd --list-all
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22715%22%20height=%22252%22%3E%3C/svg%3E

Đang thiết lập Unbound Log qua Rsyslog và Logrotate​

Sau khi cấu hình firewalld, bây giờ bạn sẽ thiết lập một 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 một tệp cấu hình 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
Thêm các dòng sau vào tệp. Với lệnh này, Rsyslog sẽ tạo một tệp nhật ký mới '/var/log/unbound.log' cho '$programname' == 'unbound'.
Mã:
# Log messages generated by unbound application 
if $programname == 'unbound' then /var/log/unbound.log
# stop processing it further
& stop
Lưu và thoát khỏi tệp '/etc/rsyslog.d/unbound.conf' khi hoàn tất.

Tiếp theo, tạo tệp cấu hình Logrottate mới '/etc/logrotate.d/unbound' bằng trình chỉnh sửa nano bên dưới lệnh.
Mã:
sudo nano /etc/logrotate.d/unbound
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.
Mã:
/var/log/unbound.log {
 daily
 rotate 7
 missingok
 create 0640 root adm
 postrotate
 /usr/lib/rsyslog/rsyslog-rotate
 endscript
}
Lưu tệp và thoát khỏi trình chỉnh sửa khi hoàn tất.

Cuối cùng, hãy chạy tiện ích lệnh systemctl sau để khởi động lại cả dịch vụ Rsyslog và Logrotate và áp dụng các thay đổi cho hệ thống.
Mã:
sudo systemctl restart rsyslog
sudo systemctl restart logrotate
Như vậy là bạn đã hoàn tất quá trình cài đặt Unbound. Ở bước tiếp theo, bạn sẽ tìm hiểu cách thiết lập máy khách cục bộ để sử dụng Unbound làm trình phân giải DNS bằng hai phương pháp, sau đó bạn sẽ xác minh máy chủ DNS Unbound từ đó.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22659%22%20height=%22242%22%3E%3C/svg%3E

Thiết lập trình phân giải DNS cho máy khách​

Để thiết lập trình phân giải DNS trên máy khách, bạn có thể sử dụng các phương pháp khác nhau. Trong bước này, bạn sẽ tìm hiểu cách thiết lập trình phân giải DNS thông qua NetworkManager và thông qua systemd-resolved kết hợp với NetworkManager.

Thông qua NetworkManager​

Nếu bạn muốn thiết lập trình phân giải DNS thông qua NetworkManager trực tiếp, thì bạn phải chỉnh sửa cấu hình giao diện mạng của mình, được lưu trữ trong thư mục '/etc/NetworkManager/system-connections/'.

Trong ví dụ này, kết nối chính cho máy khách là 'eth0', vì vậy cấu hình trên NetworkManager phải là '/etc/NetworkManager/system-connections/eth0.nmconnection'. Bạn có thể có nhiều tên giao diện khác nhau như eth1 và nhiều tên khác nữa.

Mở tệp cấu hình giao diện NetworkManager '/etc/NetworkManager/system-connections/eth0.nmconnection' bằng lệnh trình chỉnh sửa nano bên dưới.
Mã:
sudo nano /etc/NetworkManager/system-connections/eth0.nmconnection
Thêm các dòng sau vào phần '[ipv4]'. Ngoài ra, hãy đảm bảo thay đổi địa chỉ IP trên tham số 'dns' bằng Máy chủ DNS không ràng buộc của bạn.
Mã:
[ipv4]
...
dns=192.168.5.25
ignore-auto-dns=true
Lưu và thoát khỏi tệp khi hoàn tất.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22313%22%20height=%22104%22%3E%3C/svg%3E


Tiếp theo, 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. Sau đó, hãy xác minh tệp cấu hình trình phân giải DNS '/etc/resolv.conf' thông qua lệnh cat.
Mã:
sudo systemctl restart NetworkManager
cat /etc/resolv.conf
Bạn sẽ nhận được kết quả cho biết địa chỉ IP '192.168.5.25' được định cấu hình làm trình phân giải DNS mặc định cho máy khách của bạn.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22190%22%3E%3C/svg%3E

Thông qua systemd-resolved và NetworkManager​

Một cách khác để thiết lập trình phân giải DNS là thông qua systemd-resolved và NetworkManager. Với cách này, bạn có thể dễ dàng thay đổi trình phân giải DNS trên toàn hệ thống và không phụ thuộc vào giao diện mạng trên hệ thống của mình.

Trên các bản phân phối dựa trên RHEL, systemd-resolved vẫn chưa được cài đặt. Bạn có thể dễ dàng cài đặt nó thông qua lệnh dnf bên dưới. Khi được nhắc, hãy nhập y để xác nhận và nhấn ENTER để tiếp tục.
Mã:
sudo dnf install systemd-resolved
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22158%22%3E%3C/svg%3E


Sau khi systemd-resolved được cài đặt, hãy mở tệp cấu hình '/etc/systemd/resolved.conf' bằng cách sử dụng lệnh bên dưới lệnh biên tập nano.
Mã:
sudo nano /etc/systemd/resolved.conf
Trên phần '[Resolver]', bỏ chú thích tham số 'DNS' và thêm địa chỉ IP máy chủ DNS không liên kết của bạn vào đó.
Mã:
[Resolver]
DNS=192.168.5.25
Lưu và thoát tệp khi hoàn tất.

Tiếp theo, chạy lệnh systemctl bên dưới để bắt đầu và bật dịch vụ 'systemd-resolved'.
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=%22161%22%3E%3C/svg%3E


Bây giờ hãy xác minh dịch vụ 'systemd-resolved' để đảm bảo rằng dịch vụ đang chạy. Bạn sẽ nhận được đầu ra như 'active (running)', xác nhận rằng dịch vụ đang chạy. Và đầu ra 'Loaded ../../systemd-resolved.service; enabled;..' xác nhận rằng dịch vụ đã được bật và sẽ tự động khởi động khi hệ thống khởi động.
Mã:
sudo systemctl status systemd-resolved
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22225%22%3E%3C/svg%3E


Khi systemd-resolved đang chạy, tiếp theo bạn sẽ sửa đổi DNS phần phụ trợ cho dịch vụ NetworkManager.

Mở tệp cấu hình NetworkManager '/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
Trong phần '[main]', thêm tham số 'dns' với giá trị 'systemd-resolved'. Thao tác này sẽ ghi đè máy chủ DNS trên NetworkManager của bạn để sử dụng dịch vụ 'systemd-resolved'.
Mã:
[main]
dns=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. Bộ phân giải DNS mới cho NetworkManager được viết trong tệp '/run/NetworkManager/resolv.conf'.
Mã:
sudo systemctl restart NetworkManager
Chạy lệnh bên dưới để xóa tệp mặc định '/etc/resolve.conf'. Sau đó, tạo một tệp liên kết tượng trưng mới từ '/run/NetworkManager/resolv.conf' đến '/etc/resolv.conf'.
Mã:
rm -f /etc/resolv.conf
ln -s /run/NetworkManager/resolv.conf /etc/resolv.conf
Với lệnh này, máy khách của bạn hiện đang sử dụng systemd-resolved làm trình phân giải DNS. Đằng sau 'systemd-resolved', bạn đang sử dụng Máy chủ DNS không ràng buộc.

Dưới đây là thông tin chi tiết về tệp '/etc/resolv.conf' sau khi sử dụng systemd-resolved và NetworkManager.
Mã:
cat /etc/resolv.conf
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22709%22%20height=%22241%22%3E%3C/svg%3E

Đang xác minh Máy chủ DNS không ràng buộc​

Chạy lệnh dig bên dưới để đảm bảo rằng DNS không ràng buộc đang hoạt động như một trình phân giải DNS. Tham số '@192.168.5.25' đảm bảo rằng 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.25'.
Mã:
dig @192.168.5.25
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ờ 'ad' (dữ liệu xác thực) trong đầu ra tiêu đề, có nghĩa là DNSSEC đã được bật.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22674%22%20height=%22660%22%3E%3C/svg%3E


Tiếp theo, chạy lệnh bên dưới để đảm bảo rằng máy khách có thể truy cập tên miền trên internet.
Mã:
dig google.com
dig fb.com
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 'google.com' và 'fb.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 tên miền 'google.com' là '74ms' và đến 'fb.com' là '154ms'.

Đầu ra cho google.com:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22645%22%20height=%22504%22%3E%3C/svg%3E


Đầu ra cho fb.com:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22661%22%20height=%22717%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 google.com
dig fb.com
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22620%22%20height=%22252%22%3E%3C/svg%3E



data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22619%22%20height=%22465%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
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22491%22%20height=%22158%22%3E%3C/svg%3E


Bây giờ hãy chạy lệnh dig bên dưới để đảm bảo rằng PTR các bản ghi đượ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
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22462%22%20height=%22189%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 thông qua lệnh dnf bên dưới.
Mã:
sudo dnf install tcpdump
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=%22226%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 đang chạy trên địa chỉ IP '192.168.5.25' với giao diện 'eth0'.
Mã:
tcpdump -vv -x -X -s 1500 -i eth0 'port 853'
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.
Mã:
dig twitter.com
Đầu ra:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22659%22%20height=%22407%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=%22208%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 RHEL thông qua systemd-resolved và NetworkManager.

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ủ Rocky Linux 9. 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 các bản phân phối dựa trên RHEL 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.
 
Back
Bên trên