PowerDNS

[PowerDNS] – Phần 1 – Hướng dẫn cài đặt PowerDNS trên Debian 12

Hiện nay có rất nhiều nền tảng/công cụ có thể được sử dụng để làm DNS Server chẳng hạn như: BIND, Knot DNS, CoreDNS,… thậm chí có một số Control Panel vẫn có thể làm DNS Server có thể kể đến như Cpanel, Directadmin… Theo đánh giá từ các công ty có triển khai dịch vụ tên miền tại Việt Nam thì đa số tin tưởng và chọn PowerDNS để triển khai DNS Server.

Giới thiệu tổng quan

PowerDNS là một phần mềm DNS server mã nguồn mở có thể nói là kế thừa và tích hợp nhiều ưu điểm của các loại DNS Server khác. Nó được thiết kế để cung cấp hiệu suất cao, mở rộng và linh hoạt. Nó có thể hoạt động như một server DNS chính (authoritative server) hoặc một server DNS phân giải (recursive resolver).

Với kiến trúc phân tán, có thể xử lý hàng triệu yêu cầu DNS mỗi giây. Nó hỗ trợ nhiều giao thức, bao gồm DNSSEC, DNS-over-HTTP, DNS-over-TLS và DNS-over-HTTPS để đảm bảo tính bảo mật và riêng tư.

Ngoài ra còn có khả năng tích hợp với các hệ thống cơ sở dữ liệu như MySQL, PostgreSQL,BIND zone file,… cho phép quản lý dữ liệu DNS dễ dàng và linh hoạt. Nó cũng hỗ trợ các công nghệ như Anycast và GeoDNS để cải thiện hiệu suất và độ tin cậy.

Với cộng đồng lớn và nhiều tài liệu hướng dẫn, đây sẽ là một giải pháp DNS mạnh mẽ và linh hoạt cho các tổ chức và nhà cung cấp dịch vụ tên miền.

Bài viết này mình sẽ hướng dẫn các bạn cài đặt PowerDNS server trên Debian 12.

1. Chuẩn bị môi trường

  • Một Server Debian 12
    • CPU: 2 core
    • Ram: 2 GB
    • Disk: 20 GB
  • Một domain trỏ tới địa chỉ IP của Server
  • Quyền truy cập root

2. Cập nhật hệ thống

Trước khi cài đặt, hãy update và upgrade hệ thống

				
					apt update -y
apt upgrade -y
apt install apt-transport-https lsb-release ca-certificates curl dirmngr gnupg
				
			

3. Cài đặt MySQL

Để cài đặt MySQL 8.0 trên Debian, các bạn có thể xem hướng dẫn tại bài viết sau: 

Hướng dẫn cài đặt MySQL trên Debian 12

4. Cài đặt PowerDNS

Vô hiệu hoá systemd-resolved. Đây là một service phân giải dns cho các ứng dụng cục bộ mặc định. Chúng ta sẽ thay thế nó bằng PowerDNS nên vì thế hãy tắt nó đi.

				
					systemctl disable --now systemd-resolved
				
			

Chỉnh sửa lại file /etc/resolve.conf để đảm bảo server có thể phân giải dns để tải các gói cần thiết

				
					echo "nameserver 8.8.8.8" > /etc/resolv.conf   #DNS Recursor của Google
echo "nameserver 1.1.1.1" > /etc/resolv.conf   #DNS Recursor của Cloudflare
				
			

Tiếp theo, chúng ta sẽ cài đặt PowerDNS trên Debian 12.

PowerDNS chia ra thành các gói Backend khác nhau, tuỳ thuộc vào nhu cầu sử dụng mà chúng ta sẽ tải những gói backend cần thiết. Để kiểm tra các phiên bản mới nhất hãy truy cập repositories tại đây. Phiên bản 4.8 là bản phát hành ổn định hiện tại tính đến thời điểm viết bài này.

Ở đây chúng ta sẽ cần tải pdns-serverpdns-backend-mysql

				
					echo 'deb [signed-by=/etc/apt/keyrings/auth-48-pub.asc arch=amd64] http://repo.powerdns.com/debian bookworm-auth-48 main' > /etc/apt/sources.list.d/pdns.list
				
			
				
					cat > /etc/apt/preferences.d/auth-48 << EOL
Package: auth*
Pin: origin repo.powerdns.com
Pin-Priority: 600
EOL
				
			
				
					install -d /etc/apt/keyrings; curl https://repo.powerdns.com/FD380FBB-pub.asc |tee /etc/apt/keyrings/auth-48-pub.asc
				
			
				
					apt update
apt install pdns-server pdns-backend-mysql
systemctl enable pdns
systemctl start pdns
systemctl status pdns
				
			

6. Tạo Database và User

Bây giờ chúng ta hãy tạo một Database với tên là powerdns và User powerdns_admin để PowerDNS có thể truy cập MySQL.

				
					mysql -u root -p   #Nhập mật khẩu root để truy cập

CREATE DATABASE powerdns;
CREATE USER 'powerdns_admin'@'localhost' IDENTIFIED BY 'Strongpassword';
GRANT ALL ON powerdns.* TO 'powerdns_admin'@'localhost';
FLUSH PRIVILEGES;
exit
				
			

7. Nhập cấu trúc bảng Database của PowerDNS

Thông thường cấu trúc bảng database của PowerDNS sẽ được lưu trong đường dẫn /usr/share/pdns-backend-mysql/schema/ với tên file là schema.mysql.sql.

				
					mysql -u powerdns_admin -p powerdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
				
			

Để kiểm tra, hãy sử dụng lệnh sau

				
					mysqlshow -u powerdns_admin -p powerdns
				
			
				
					Database: powerdns
+----------------+
|     Tables     |
+----------------+
| comments       |
| cryptokeys     |
| domainmetadata |
| domains        |
| records        |
| supermasters   |
| tsigkeys       |
+----------------+
				
			

8.Tạo tệp cấu hình để PowerDNS kết nối đến database MySQL

Để kiểm tra, hãy sử dụng lệnh sau

				
					cat > /etc/powerdns/pdns.d/pdns.local.gmysql.conf << 'EOL'
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql

# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns_admin
gmysql-password=Strongpassword
gmysql-dnssec=yes
# gmysql-socket=
EOL
				
			

Sau đó, các bạn cần tuỳ chỉnh lại quyền của file để PowerDNS có thể sử dụng file này kết nối đến MySQL

				
					chown pdns: /etc/powerdns/pdns.d/pdns.local.gmysql.conf  
chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
				
			

Tiếp theo, chạy lệnh sau để kiểm tra kết nối có thành công hay không?

				
					systemctl stop pdns.service
pdns_server --daemon=no --guardian=no --loglevel=9
				
			

Bước cuối cùng, khởi động lại và kích hoạt dịch vụ PowerDNS bằng cách chạy lệnh sau:

				
					systemctl restart pdns
systemctl enable pdns
systemctl status pdns
				
			

Đảm bảo port 53 đang mở bằng lệnh sau:

				
					ss -alnp4 | grep pdns

#Kết quả
udp   UNCONN 0      0            0.0.0.0:53        0.0.0.0:*    users:(("pdns_server",pid=60399,fd=5))
tcp   LISTEN 0      128          0.0.0.0:53        0.0.0.0:*    users:(("pdns_server",pid=60399,fd=7))
				
			

9.Tạo Zone và Record trên PowerDNS

Chúng ta sẽ sử dụng domain gocit.vn và địa chỉ IP: 123.123.123.123

Để tạo zone, hãy sử dụng lệnh sau:

				
					pdnsutil create-zone gocit.vn
pdnsutil list-all-zones
				
			

Tiếp theo chúng ta sẽ tạo thêm một Record A

				
					pdnsutil add-record gocit.vn @ A 123.123.123.123
pdnsutil add-record gocit.vn www A 123.123.123.123
				
			

Khi bạn tạo một Zone, record SOA (Start Of Authority) sẽ được toạ tự động. Đây là record dùng để xác định các thông tin quản lý cho một Zone cụ thể. Nếu thiếu Record này, tên miền của bạn sẽ không thể phân giải được.

Định dạng record SOA sẽ có dạng: 

primary hostmaster serial refresh retry expire default_ttl

Trong đó:

  • primary: Đây là tên mặc định của SOA và đại diện cho tên máy chủ chính (Master) quản lý Zone.
  • hostmaster: Đại diện cho địa chỉ email của người quản lý (hostmaster) của Zone.
  • serial: Số phiên bản của zone file, dùng để xác định sự thay đổi của dữ liệu.
  • refresh: Thời gian giữa hai lần máy chủ chính(Master) yêu cầu cập nhật dữ liệu từ máy chủ phụ (Slave).
  • retry: Thời gian mà máy chủ Slave chờ đợi trước khi yêu cầu cập nhật lại từ máy chủ Master nếu quá trình cập nhật trước đó thất bại.
  • expire: Thời gian tối đa mà máy chủ Slave có thể giữ dữ liệu mà không nhận được sự cập nhật từ máy chủ Master.
  • default_ttl: Thời gian “sống” mặc định của các record DNS trong một Zone.

Bạn có thể hiển thị chi tiết bằng cách chạy lệnh;

				
					pdnsutil list-zone gocit.vn

#Kết quả
$ORIGIN .
gocit.vn       86400   IN      SOA     ns2-prodns.vinahost.vn ns1-prodns.vinahost.vn 2024022902 28800 7200 604800 86400
gocit.vn       86400   IN      A       123.123.123.123
www.gocit.vn   86400   IN      A       123.123.123.123
				
			

Kết luận

Như vậy là chúng ta đã cài đặt thành công PowerDNS + MySQL trên Debian 12. Nhưng để thêm mới, xoá, sửa một Zone và record trên dòng lệnh thật khó phải không nào!

Trong bài hướng dẫn tiếp theo, mình sẽ hướng dẫn cài đặt giao diện quản trị web PowerAdmin để có thể dễ dàng thao tác hơn.

Tài liệu tham khảo

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *