Tại sao PowerDNS là “chân ái” thay thế cho Bind9?
Nếu anh em từng quản lý DNS bằng Bind9, chắc hẳn cảm giác “vã mồ hôi” mỗi khi sửa file zone không còn xa lạ. Một dấu chấm thừa hay sai số serial cũng đủ khiến toàn bộ hệ thống ngừng hoạt động. Mình từng quản lý một datacenter nhỏ với hơn 200 bản ghi DNS. Việc gõ lệnh thủ công cho từng thay đổi nhỏ thực sự là một cơn ác mộng về hiệu suất và độ chính xác.
Đó là lý do mình chuyển sang PowerDNS. Thay vì lưu dữ liệu trong các file text phẳng dễ lỗi, PowerDNS quản lý mọi thứ qua Database (MariaDB, PostgreSQL). Khi kết hợp với PowerDNS-Admin, anh em sẽ sở hữu một dashboard chuẩn doanh nghiệp. Hệ thống hỗ trợ phân quyền (RBAC), lưu lịch sử thay đổi và cung cấp API cực xịn để tích hợp vào quy trình CI/CD hoặc tự động cấp chứng chỉ Let’s Encrypt qua DNS-01 challenge.
Ba thành phần cốt lõi cần nắm vững
Trước khi gõ lệnh, hãy phân biệt rõ các thành phần để tránh cấu hình nhầm lẫn:
- PowerDNS Authoritative Server: Trái tim của hệ thống. Nó trả lời các truy vấn DNS từ internet về domain anh em sở hữu. Lưu ý: Nó không đi tìm kiếm IP của google.com (đó là việc của Recursor).
- PowerDNS-Admin: Giao diện Web viết bằng Flask. Nó đóng vai trò là lớp vỏ điều khiển, giao tiếp với server qua API.
- Backend (MariaDB): Kho lưu trữ dữ liệu tập trung cho tất cả bản ghi DNS.
Thực hành cài đặt chi tiết trên Ubuntu 22.04/24.04
Bước 1: Giải phóng Port 53
Một lỗi kinh điển khiến PowerDNS không thể khởi động là xung đột port. Ubuntu sử dụng systemd-resolved mặc định chiếm giữ port 53. Anh em cần vô hiệu hóa nó ngay lập tức.
# Dừng service mặc định
sudo systemctl disable --now systemd-resolved
# Cấu hình DNS tạm thời để server vẫn tải được gói tin
sudo rm /etc/resolv.conf
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
Bước 2: Cài đặt MariaDB và khởi tạo Database
Database ổn định là yếu tố tiên quyết. Chúng ta sẽ tạo một không gian riêng cho PowerDNS.
sudo apt update && sudo apt install mariadb-server -y
# Tạo database và user
sudo mysql -u root
CREATE DATABASE powerdns;
GRANT ALL ON powerdns.* TO 'pdns_user'@'localhost' IDENTIFIED BY 'MatKhauSieuKho';
FLUSH PRIVILEGES;
EXIT;
Bước 3: Cài đặt PowerDNS Authoritative Server
Cài đặt gói server cùng backend MySQL để hệ thống có thể đọc dữ liệu từ MariaDB.
sudo apt install pdns-server pdns-backend-mysql -y
Tiếp theo, hãy nạp cấu trúc bảng (schema) vào database. File này thường nằm trong thư mục tài liệu của gói cài đặt.
sudo zcat /usr/share/doc/pdns-backend-mysql/schema.mysql.sql.gz | mariadb -u pdns_user -p powerdns
Bước 4: Cấu hình kết nối Database và API
Mở file /etc/powerdns/pdns.conf. Hãy xóa trắng hoặc comment các dòng cũ, sau đó dán nội dung cấu hình dưới đây. Lưu ý thay đổi IP và API Key theo thực tế của anh em.
# Sử dụng MySQL backend
launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=pdns_user
gmysql-password=MatKhauSieuKho
gmysql-dbname=powerdns
# Kích hoạt API cho PowerDNS-Admin
api=yes
api-key=KeyTuChon123
webserver=yes
webserver-address=0.0.0.0
webserver-allow-from=127.0.0.1,192.168.1.0/24
Khởi động lại để áp dụng cấu hình mới:
sudo systemctl restart pdns
sudo systemctl enable pdns
Bước 5: Triển khai PowerDNS-Admin bằng Docker
Cài đặt PowerDNS-Admin thủ công qua Python venv rất phiền phức do lỗi thư viện. Giải pháp tối ưu nhất là dùng Docker Compose để triển khai trong 30 giây.
version: '3'
services:
pdns-admin:
image: powerdnsadmin/pda-legacy:latest
container_name: pdns-admin
ports:
- "8080:80"
environment:
- SQLALCHEMY_DATABASE_URI=mysql+pymysql://pdns_user:[email protected]/powerdns
- GUNICORN_TIMEOUT=60
Lưu ý: 172.17.0.1 thường là IP của host machine nhìn từ trong Docker container.
Kiểm tra và vận hành thực tế
Sau khi truy cập http://IP-Server:8080 và tạo tài khoản, hãy thực hiện các bước sau:
- Kết nối API: Vào Settings -> PDNS, điền URL
http://127.0.0.1:8081và API Key đã tạo. - Test phân giải: Tạo thử zone
lab.localvà một bản ghi A. Dùng lệnhdig @localhost -t A test.lab.localđể kiểm tra. Nếu trả về đúng IP, hệ thống đã chạy chuẩn.
Kinh nghiệm “xương máu” khi vận hành DNS
Đừng đợi đến khi mất dữ liệu mới hối hận. Dưới đây là 3 lưu ý quan trọng nhất:
- Backup DB tự động: DNS chết là toàn bộ dịch vụ chết. Hãy thiết lập
mysqldumpchạy hàng đêm và đẩy file backup sang một server khác. - Bảo mật API: Tuyệt đối không mở port 8081 ra internet. Chỉ cho phép localhost hoặc IP của server Admin truy cập qua Firewall (UFW/Iptables).
- Tính sẵn sàng cao (HA): Với hệ thống quan trọng, hãy chạy 2 node PowerDNS. Sử dụng cơ chế MariaDB Replication để đồng bộ dữ liệu bản ghi tức thì giữa hai server.
Việc chuyển đổi sang PowerDNS không chỉ giúp anh em bớt gõ lệnh, mà còn chuyên nghiệp hóa cách quản lý hạ tầng mạng. Chúc anh em triển khai thành công và có những đêm ngon giấc không lo lỗi DNS!

