0

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

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

  1. 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

  1. 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

  1. 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-server và pdns-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

  1. 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

  1. 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 nin.id.vn và địa chỉ IP: 123.123.123.123

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

pdnsutil create-zone nin.id.vn pdnsutil list-all-zones

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

pdnsutil add-record nin.id.vn @ A 123.123.123.123 pdnsutil add-record nin.id.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 nin.id.vn

#Kết quả $ORIGIN . nin.id.vn 86400 IN SOA ns2-prodns.vinahost.vn ns1-prodns.vinahost.vn 2024022902 28800 7200 604800 86400 nin.id.vn 86400 IN A 123.123.123.123 www.nin.id.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

https://doc.powerdns.com/authoritative/installation.html

https://repo.powerdns.com/

https://doc.powerdns.com/authoritative/backends/generic-mysql.html#setting-gmysql-host


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.