Điều kiện tiên quyết
- Truy cập vào thiết bị đầu cuối.
- Truy cập vào người dùng root.
- Một trình soạn thảo văn bản, chẳng hạn như nano .
- Trình duyệt web để truy cập PowerDNS Admin.
Tại sao nên sử dụng PowerDNS?
PowerDNS cung cấp hai giải pháp máy chủ tên:
- Máy chủ có thẩm quyền , sử dụng cơ sở dữ liệu để giải quyết các truy vấn về tên miền.
- Recursor , có chức năng tham khảo các máy chủ có thẩm quyền khác để giải quyết các truy vấn .
Các máy chủ tên khác tự động kết hợp hai chức năng. PowerDNS cung cấp chúng riêng biệt và cho phép kết hợp hai giải pháp một cách liền mạch để thiết lập theo mô-đun.
Ngoài ra, PowerDNS là mã nguồn mở, hoạt động tốt với cả khối lượng truy vấn nhỏ và lớn, đồng thời cung cấp nhiều giải pháp cho nền tảng.
Cài đặt PowerDNS trên Ubuntu 18.04, 20.04 và 22.04
Thực hiện theo các bước dưới đây để cài đặt và cấu hình PowerDNS với máy chủ MariaDB làm cơ sở dữ liệu phụ trợ . Ngoài ra, các bước hướng dẫn người dùng thiết lập giao diện web và API của PowerDNS Admin.
Bước 1: Cài đặt và cấu hình máy chủ MariaDB
Để cài đặt và cấu hình MariaDB , hãy thực hiện như sau:
1. Cập nhật và nâng cấp các gói hệ thống:
sudo apt update && sudo apt upgrade2. Cài đặt máy chủ và máy khách MariaDB bằng:
sudo apt install mariadb-server mariadb-clientLưu ý: Các máy chủ cơ sở dữ liệu khác có thể bao gồm PostgreSQL, MySQL và các cơ sở dữ liệu quan hệ khác.
Chờ quá trình cài đặt hoàn tất trước khi tiếp tục.
3. Kết nối với MariaDB bằng:
sudo mysqlThiết bị đầu cuối kết nối với phiên cơ sở dữ liệu.
4. Tạo cơ sở dữ liệu cho máy chủ tên PowerDNS:
create database pda;Lưu ý: Nếu sử dụng tên cơ sở dữ liệu khác, hãy thay đổi tất cả các lệnh tiếp theo cho phù hợp.
5. Cấp tất cả các quyền cho pdangười dùng và cung cấp mật khẩu người dùng:
grant all privileges on pda.* TO 'pda'@'localhost' identified by 'YOUR_PASSWORD_HERE';
flush privileges;6. Kết nối với cơ sở dữ liệu:
use pda;
7. Sử dụng các truy vấn SQL sau để tạo bảng cho cơ sở dữ liệu pda :
CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT UNSIGNED DEFAULT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id BIGINT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
comment TEXT CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);8. Xác nhận các bảng đã được tạo bằng:
show tables;
Đầu ra liệt kê các bảng có sẵn.
9. Thoát khỏi kết nối cơ sở dữ liệu:
exit;
Lệnh này trả phiên làm việc về thiết bị đầu cuối.
Bước 2: Cài đặt PowerDNS
Để cài đặt PowerDNS trên Ubuntu, hãy thực hiện như sau:
1. Chuyển sang người dùng root:
sudo su -
Phiên thiết bị đầu cuối chuyển sang người dùng root.
Lưu ý: Tìm hiểu về sự khác biệt giữa sudo và su .
2. systemd-resolved Dịch vụ cung cấp giải pháp phân giải tên cho các ứng dụng cục bộ. PowerDNS sử dụng dịch vụ riêng của mình để phân giải tên.
Vô hiệu hóa systemd-resolved dịch vụ bằng cách:
systemctl disable --now systemd-resolved
Đầu ra xác nhận việc xóa dịch vụ.
3. Xóa tệp cấu hình dịch vụ hệ thống bằng:
rm -rf /etc/resolv.conf4. Tạo tệp resolv.conf mới :
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
Việc thêm máy chủ tên Google sẽ đảm bảo phân giải DNS.
5. Cài đặt máy chủ PowerDNS và các gói cơ sở dữ liệu phụ trợ bằng:
apt-get install pdns-server pdns-backend-mysql -yChờ quá trình cài đặt hoàn tất trước khi tiếp tục.
Bước 3: Cấu hình PowerDNS
Cấu hình tệp PowerDNS cục bộ để kết nối với cơ sở dữ liệu:
1. Mở file cấu hình để chỉnh sửa:
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf2. Thêm thông tin sau vào tệp:
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql
# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pda
gmysql-user=pda
gmysql-password=YOUR_PASSWORD_HERE
gmysql-dnssec=yes
# gmysql-socket=
Đổi tên cơ sở dữ liệu, người dùng và mật khẩu với các tham số chính xác nếu sử dụng các tham số khác nhau. Lưu và đóng tệp.
3. Thay đổi quyền của tệp:
chmod 777 /etc/powerdns/pdns.d/pdns.local.gmysql.conf4. Dừng dịch vụ pdns :
systemctl stop pdns5. Kiểm tra kết nối tới cơ sở dữ liệu:
pdns_server --daemon=no --guardian=no --loglevel=9
Đầu ra hiển thị kết nối thành công. Nhấn CTRL + C để thoát khỏi bài kiểm tra.
6. Bắt đầu dịch vụ:
systemctl start pdns7. Kiểm tra kết nối bằng lệnh ss :
ss -alnp4 | grep pdns
Kiểm tra cổng TCP / UDP53 đã mở và ở trạng thái LISTEN/ UCONNchưa.
Bước 4: Cài đặt PowerDNS Admin Dependencies
PowerDNS Admin giúp quản lý PowerDNS thông qua giao diện web. Để cài đặt bảng điều khiển cục bộ, hãy thực hiện như sau:
1. Cài đặt gói phát triển Python:
apt install python3-dev2. Cài đặt các phần phụ thuộc:
apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl3. Tải thiết lập Node.js:
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -4. Cài đặt Node.js bằng:
apt install -y nodejs5. Tiếp theo, cài đặt trình quản lý gói Yarn. Lấy khóa công khai Yarn và thêm nó vào apt :
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -Yarn giúp xây dựng các tệp tài sản.
6. Thêm Yarn vào danh sách nguồn:
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list7. Cập nhật danh sách nguồn apt:
apt update -y8. Cài đặt Yarn bằng:
apt install yarn -y9. Sao chép kho lưu trữ PowerDNS Admin Git tới /opt/web/powerdns-admin :
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-adminNếu sử dụng thư mục khác, hãy hoán đổi thư mục đích trong lệnh và trong tất cả các lần xuất hiện tiếp theo.
10. Điều hướng đến thư mục Git đã sao chép:
cd /opt/web/powerdns-admin11. Tạo môi trường ảo Python:
python3 -mvenv ./venv12. Kích hoạt môi trường ảo bằng:
source ./venv/bin/activate
13. Nâng cấp pip lên phiên bản mới nhất:
pip install --upgrade pipTrình quản lý gói pip giúp cài đặt các yêu cầu Python bổ sung.
14. Cài đặt các yêu cầu từ tệp requirements.txt :
pip install -r requirements.txtSau khi cài đặt tất cả các yêu cầu, PowerDNS Admin yêu cầu cấu hình bổ sung trước khi chạy.
Bước 5: Cấu hình và chạy PowerDNS Admin
Để cấu hình và khởi động PowerDNS Admin trên phiên bản cục bộ, hãy thực hiện như sau:
1. Sử dụng lệnh cp để sao chép tệp Python development.py mẫu vào production.py :
cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py2. Mở tệp production.py để chỉnh sửa:
nano /opt/web/powerdns-admin/configs/production.py3. Chỉnh sửa các dòng sau:
#import urllib.parse
SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd2'
SQLA_DB_PASSWORD = 'changeme'4. Bỏ chú thích cho lệnh nhập thư viện, cung cấp khóa bí mật được tạo ngẫu nhiên và cung cấp mật khẩu cơ sở dữ liệu chính xác.
import urllib.parse
SECRET_KEY = 'x19xc7xd8xa7$xb6P*xc6xb8xa1Ex90Px12x95'
SQLA_DB_PASSWORD = 'YOUR_PASSWORD_HERE'
Lưu ý: Tạo khóa ngẫu nhiên bằng Python:
python3 -c "import os; print(os.urandom(16))"Sao chép và dán đầu ra vào SECRET_KEYgiá trị.
Lưu và đóng tệp.
5. Xuất biến cấu hình ứng dụng sản xuất:
export FLASK_CONF=../configs/production.py6. Xuất biến ứng dụng flask:
export FLASK_APP=powerdnsadmin/__init__.py7. Nâng cấp lược đồ cơ sở dữ liệu:
flask db upgrade8. Cài đặt các phụ thuộc của dự án:
yarn install --pure-lockfile9. Xây dựng nội dung ứng dụng Flask:
flask assets buildChờ quá trình xây dựng hoàn tất.
10. Chạy ứng dụng với:
./run.pyĐể ứng dụng chạy.
11. Ứng dụng hiện đang chạy trên localhost trên cổng 9191. Truy cập địa chỉ sau:
http://localhost:9191

Màn hình đăng nhập cho PowerDNS Admin hiển thị. Hiện tại, không có người dùng nào và người dùng đầu tiên bạn đăng ký sẽ là tài khoản quản trị viên.
12. Trong terminal, thoát khỏi môi trường ảo và đăng xuất khỏi người dùng root bằng lệnh:
exitThiết bị đầu cuối trở về trạng thái bình thường.
Bước 6: Tạo dịch vụ quản trị PowerDNS
Cấu hình PowerDNS Admin để chạy khi khởi động:
1. Tạo tệp dịch vụ systemd cho PowerDNS Admin:
sudo nano /etc/systemd/system/powerdns-admin.service2. Thêm các nội dung sau:
[Unit]
Description=PowerDNS-Admin
Requires=powerdns-admin.socket
After=network.target
[Service]
User=root
Group=root
PIDFile=/run/powerdns-admin/pid
WorkingDirectory=/opt/web/powerdns-admin
ExecStartPre=/bin/bash -c '$$(mkdir -p /run/powerdns-admin/)'
ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --pid /run/powerdns-admin/pid --bind unix:/run/powerdns-admin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3. Tạo một tập tin đơn vị:
sudo systemctl edit --force powerdns-admin.service4. Thêm nội dung sau:
[Service]
Environment="FLASK_CONF=../configs/production.py"
5. Tạo một tệp socket :
sudo nano /etc/systemd/system/powerdns-admin.socket6. Nhập thông tin sau:
[Unit]
Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/powerdns-admin/socket
[Install]
WantedBy=sockets.target
7. Tạo một tập tin môi trường:
sudo nano /etc/tmpfiles.d/powerdns-admin.conf8. Thêm thông tin sau:
d /run/powerdns-admin 0755 pdns pdns -9. Tải lại daemon:
sudo systemctl daemon-reload10. Khởi động và kích hoạt dịch vụ và ổ cắm:
sudo systemctl start powerdns-admin.service powerdns-admin.socketsudo systemctl enable powerdns-admin.service powerdns-admin.socket
11. Kiểm tra trạng thái bằng:
sudo systemctl status powerdns-admin.service powerdns-admin.socketCác dịch vụ hiển thị đang chạy mà không có bất kỳ lỗi nào.
Bước 7: Cài đặt và cấu hình Nginx
Để cấu hình PowerDNS Admin chạy trên Nginx, hãy thực hiện như sau:
1. Cài đặt Nginx bằng:
sudo apt install nginx -y2. Chỉnh sửa tệp cấu hình Nginx:
sudo nano /etc/nginx/conf.d/pdns-admin.conf3. Thêm thông tin sau:
server {
listen *:80;
server_name localhost;
index index.html index.htm index.php;
root /opt/web/powerdns-admin;
access_log /var/log/nginx/powerdns-admin.local.access.log combined;
error_log /var/log/nginx/powerdns-admin.local.error.log;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_redirect off;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_buffer_size 8k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_bucket_size 64;
location ~ ^/static/ {
include /etc/nginx/mime.types;
root /opt/web/powerdns-admin/powerdnsadmin;
location ~* .(jpg|jpeg|png|gif)$ {
expires 365d;
}
location ~* ^.+.(css|js)$ {
expires 7d;
}
}
location / {
proxy_pass http://unix:/run/powerdns-admin/socket;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect off;
}
}Nếu sử dụng tên máy chủ khác, hãy đổi localhostsang địa chỉ máy chủ của bạn.
4. Xác nhận tệp không có lỗi cú pháp:
nginx -t5. Thay đổi quyền sở hữu powerdns-adminthành www-data:
sudo chown -R www-data:www-data /opt/web/powerdns-admin6. Khởi động lại dịch vụ Nginx:
sudo systemctl restart nginx7. Truy cập trang quản trị PowerDNS thông qua trình duyệt :
localhostNếu liên kết đến một địa chỉ khác, hãy sử dụng địa chỉ được cung cấp trong tệp cấu hình Nginx.
Bước 8: Cấu hình PowerDNS API
Để cấu hình PowerDNS API, hãy thực hiện như sau:
1. Đăng nhập vào PowerDNS Admin qua trình duyệt. Nếu chạy lần đầu tiên, trước tiên hãy tạo người dùng mới. Người dùng đầu tiên tự động là quản trị viên.
2. Mở tab Khóa API ở menu bên trái.

3. Nhấp vào nút Thêm khóa+ .

4. Trường Vai trò mặc định là người dùng Quản trị viên . Thêm mô tả tùy chọn cho khóa.
5. Nhấp vào Tạo khóa để tạo khóa API.

6. Một cửa sổ bật lên in ra khóa. Sao chép khóa và nhấn Xác nhận để tiếp tục.

7. Điều hướng đến trang Bảng điều khiển .
8. Nhập tên miền và khóa API. Lưu thay đổi.

9. Bật API trong cấu hình PowerDNS. Mở tệp cấu hình trong terminal:
nano /etc/powerdns/pdns.conf10. Bỏ chú thích và thay đổi các dòng sau:
api=yes
api-key=yoursecretekey
webserver=yes11. Lưu các thay đổi và đóng nano. API đã được thiết lập và sẵn sàng sử dụng.
Phần kết luận
Sau khi thực hiện theo các bước trong hướng dẫn này, bạn đã thiết lập PowerDNS, giao diện web quản trị PowerDNS trên Nginx và kết nối PowerDNS API.
Tiếp theo, hãy tìm hiểu về các loại bản ghi DNS khác nhau hoặc các biện pháp bảo mật DNS tốt nhất .










Add Comment