Cách cài đặt PowerDNS Server và PowerDNS Admin trên Ubuntu 20.04

theanh

Administrator
Nhân viên
PowerDNS là một máy chủ tên miền có thẩm quyền miễn phí và mã nguồn mở. Nó được viết bằng C++ và chạy trên các hệ điều hành Unix, Linux và macOS. Nó sử dụng MySQL, MariaDB, PostgreSQL và Oracle để lưu trữ các tệp và bản ghi vùng.

PowerDNS Admin là một công cụ dựa trên web được sử dụng để quản lý PowerDNS. Bạn có thể tạo và quản lý các vùng DNS bằng trình duyệt web. Nó đi kèm với một bộ tính năng phong phú. Dưới đây là một số trong số chúng:
  • Hỗ trợ IPv4 và IPv6
  • Trang trạng thái hiển thị thông tin hữu ích
  • Tự động tạo/cập nhật bản ghi PTR ngược
  • Hỗ trợ tạo tên miền hàng loạt
  • Hỗ trợ mẫu tên miền
  • Hỗ trợ DNSsec
  • Hỗ trợ xác thực người dùng Active Directory, LDAP, SAML, DB cục bộ
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt PowerDNS và quản trị PowerDNS trên máy chủ Ubuntu 20.04.

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

  • Một máy chủ chạy Ubuntu 20.04.
  • Một tên miền hợp lệ được trỏ bằng IP máy chủ của bạn.
  • Một mật khẩu gốc được định cấu hình cho máy chủ.

Cài đặt và định cấu hình máy chủ MariaDB​

Trước khi bắt đầu, bạn sẽ cần cài đặt máy chủ cơ sở dữ liệu MariaDB trong hệ thống của mình. Theo mặc định, phiên bản mới nhất của MariaDB không có sẵn trong kho lưu trữ mặc định của Ubuntu 20.04. Vì vậy, bạn sẽ cần thêm kho lưu trữ MariaDB vào hệ thống của mình.

Trước tiên, hãy cài đặt các gói cần thiết bằng lệnh sau:
Mã:
apt-get install software-properties-common gnupg2 -y
Sau khi tất cả các gói được cài đặt, hãy thêm khóa ký MariaDB bằng lệnh sau:
Mã:
apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
Tiếp theo, hãy thêm kho lưu trữ MariaDB bằng lệnh sau:
Mã:
add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirrors.ukfast.co.uk/sites/mariadb/repo/10.5/ubuntu focal main'
Tiếp theo, cài đặt máy chủ MariaDB bằng cách chạy lệnh sau:
Mã:
apt-get install mariadb-server -y
Sau khi cài đặt, bạn sẽ cần tạo cơ sở dữ liệu và người dùng cho PowerDNS.

Trước tiên, hãy đăng nhập vào MariaDB bằng lệnh sau:
Mã:
mysql
Sau khi đăng nhập, hãy tạo cơ sở dữ liệu và người dùng bằng lệnh sau:
Mã:
MariaDB [(none)]> create database pdns;
MariaDB [(none)]> cấp tất cả trên pdns.* cho pdnsadmin@localhost được xác định bằng 'password';
Tiếp theo, xóa các đặc quyền và thoát khỏi shell MariaDB bằng lệnh sau:
Mã:
MariaDB [(none)]> xóa các đặc quyền;
MariaDB [(none)]> thoát;

Cài đặt PowerDNS​

Trước tiên, bạn sẽ cần phải vô hiệu hóa dịch vụ systemd-resolved khỏi hệ thống của mình. Bạn có thể vô hiệu hóa nó bằng lệnh sau:
Mã:
systemctl disable --now systemd-resolved
Tiếp theo, xóa tệp resolv.conf mặc định và tạo một tệp mới:
Mã:
rm -rf /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf
Tiếp theo, cài đặt máy chủ PowerDNS bằng lệnh sau:
Mã:
apt-get install pdns-server pdns-backend-mysql -y
Sau khi PowerDNS được cài đặt, bạn có thể tiến hành bước tiếp theo.

Cấu hình PowerDNS​

Trước tiên, bạn sẽ cần nhập lược đồ cơ sở dữ liệu PowerDNS vào cơ sở dữ liệu PowerDNS. Bạn có thể nhập lược đồ này bằng lệnh sau:
Mã:
mysql -u pdnsadmin -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
Tiếp theo, bạn sẽ cần xác định chi tiết kết nối cơ sở dữ liệu PowerDNS. Bạn có thể thực hiện bằng cách chỉnh sửa tệp pdns.local.gmysql.conf:
Mã:
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Thay đổi các dòng sau:
Mã:
# Cấu hình MySQL## Khởi chạy gmysql backendlaunch+=gmysql# tham số gmysqlgmysql-host=127.0.0.1gmysql-port=3306gmysql-dbname=pdnsgmysql-user=pdnsadmingmysql-password=passwordgmysql-dnssec=yes# gmysql-socket=
Lưu và đóng tệp sau đó cấp quyền thích hợp cho tệp pdns.local.gmysql.conf:
Mã:
chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Tiếp theo, dừng máy chủ PowerDNS và xác minh PowerDNS bằng lệnh sau:
Mã:
systemctl stop pdns
pdns_server --daemon=no --guardian=no --loglevel=9
Nếu mọi thứ đều ổn, bạn sẽ nhận được kết quả đầu ra sau:
Mã:
02/11 10:43:47 gmysql Kết nối thành công. Đã kết nối với cơ sở dữ liệu 'pdns' trên '127.0.0.1'.02/11 10:43:47 gmysql Kết nối thành công. Đã kết nối với cơ sở dữ liệu 'pdns' trên '127.0.0.1'.02/11 10:43:47 gmysql Kết nối thành công. Đã kết nối với cơ sở dữ liệu 'pdns' trên '127.0.0.1'.02/11 10:43:47 Khởi chạy xong các chủ đề, sẵn sàng phân phối câu hỏi
Tiếp theo, khởi động máy chủ PowerDNS bằng lệnh sau:
Mã:
systemctl start pdns
Lúc này, PowerDNS đã khởi động và đang lắng nghe trên cổng 53. Bạn có thể kiểm tra bằng lệnh sau:
Mã:
ss -alnp4 | grep pdns
Bạn sẽ nhận được kết quả sau:
Mã:
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:* users:(("pdns_server",pid=33140,fd=5))tcp LISTEN 0 128 0.0.0.0:53 0.0.0.0:* users:(("pdns_server",pid=33140,fd=7))

Cài đặt PowerDNS Admin​

Trong phần này, chúng tôi sẽ chỉ cho bạn cách cài đặt PowerDNS admin với Nginx.

Cài đặt các Dependencies bắt buộc​

Trước tiên, hãy cài đặt tất cả các dependency cần thiết cho PowerDNS admin bằng lệnh sau:
Mã:
apt-get install nginx python3-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv build-essential libmariadb-dev git python3-flask -y
Sau khi tất cả các phụ thuộc được cài đặt, hãy thêm kho lưu trữ Node.js bằng lệnh sau:
Mã:
curl -sL https://deb.nodesource.com/setup_14.x | bash -
Tiếp theo, hãy cài đặt Node.js bằng lệnh sau:
Mã:
apt-get install nodejs -y
Tiếp theo, hãy thêm kho lưu trữ yarn bằng lệnh sau:
Mã:
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
Tiếp theo, cập nhật kho lưu trữ và cài đặt Yarn bằng lệnh sau:
Mã:
apt-get update -y
apt-get install yarn -y
Lúc này, tất cả các phụ thuộc cần thiết đã được cài đặt, giờ bạn có thể tiến hành bước tiếp theo.

Tải xuống PowerDNS Admin​

Tiếp theo, tải xuống phiên bản mới nhất của PowerDNS admin từ kho lưu trữ Git vào thư mục gốc Nginx:
Mã:
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns
Tiếp theo, thay đổi thư mục thành thư mục đã tải xuống và tạo môi trường ảo Python bằng lệnh sau:
Mã:
cd /var/www/html/pdns/
virtualenv -p python3 flask
Tiếp theo, kích hoạt môi trường ảo và cài đặt tất cả các phụ thuộc Python bằng lệnh sau:
Mã:
source ./flask/bin/activate
pip install -r requirements.txt
Tiếp theo, hủy kích hoạt khỏi môi trường ảo bằng lệnh sau:
Mã:
deactivate

Define Database Connection​

Tiếp theo, bạn sẽ cần xác định chi tiết kết nối cơ sở dữ liệu PowerDNS vào tệp default_config.py:
Mã:
nano /var/www/html/pdns/powerdnsadmin/default_config.py
Thay đổi các dòng sau:
Mã:
SALT = 'yoursecretekey'SECRET_KEY = 'yoursecretekey'BIND_ADDRESS = '0.0.0.0'PORT = 9191HSTS_ENABLED = FalseOFFLINE_MODE = FalseSQLA_DB_USER = 'pdnsadmin'SQLA_DB_PASSWORD = 'password'SQLA_DB_HOST = '127.0.0.1'SQLA_DB_NAME = 'pdns'SQLALCHEMY_TRACK_MODIFICATIONS = True
Lưu và đóng tệp sau đó thay đổi thư mục thành pdns và kích hoạt môi trường ảo:
Mã:
cd /var/www/html/pdns/
source ./flask/bin/activate
Tiếp theo, cập nhật cơ sở dữ liệu bằng lệnh sau:
Mã:
export FLASK_APP=powerdnsadmin/__init__.py
flask db upgrade
yarn install --pure-lockfile
flask asset build
Tiếp theo, hủy kích hoạt môi trường ảo bằng lệnh sau:
Mã:
deactivate

Bật PowerDNS Admin API​

PowerDNS admin sử dụng JSON API để đọc số liệu thống kê và sửa đổi nội dung vùng, siêu dữ liệu và tài liệu khóa DNSSEC. Bạn có thể bật nó bằng cách chỉnh sửa tệp pdns.conf:
Mã:
nano /etc/powerdns/pdns.conf
Thay đổi các dòng sau:
Mã:
api=yesapi-key=yoursecretekey
Lưu và đóng tệp, sau đó khởi động lại dịch vụ PowerDNS để áp dụng các thay đổi:
Mã:
systemctl restart pdns

Cấu hình Nginx cho PowerDNS Admin​

Tiếp theo, bạn sẽ cần cấu hình Nginx cho PowerDNS admin. Để thực hiện, hãy tạo tệp cấu hình máy chủ ảo Nginx bằng lệnh sau:
Mã:
nano /etc/nginx/conf.d/pdns-admin.conf
Thêm các dòng sau:
Mã:
server { lắng nghe *:80; tên_máy_chủ pdnsadmin.example.com; chỉ mục index.html index.htm index.php; gốc /var/www/html/pdns; nhật_ký_truy_cập /var/log/nginx/pdnsadmin_access.log kết hợp; nhật_ký_lỗi /var/log/nginx/pdnsadmin_error.log; kích_thước_phần_tối_đa_của_khách_hàng 10 phút; kích_thước_phần_đệm_phần_của_khách_hàng 128k; tắt chuyển_đổi_proxy; thời_gửi_proxy 90; thời_gửi_proxy 90; thời_gian_đọc_proxy 90; bộ_đệm_proxy 32 4k; kích_thước_bộ_đệm_proxy 8k; bộ_đế_tiêu_đề_proxy Máy chủ $host; bộ_đế_tiêu_đề_proxy X-Địa_chỉ_IP_thực $remote_addr; bộ_đế_tiêu_đề_proxy X-Chuyển_chuyển_chuyển_chuyển_dành cho $proxy_add_x_chuyển_chuyển_chuyển_dành; proxy_headers_hash_bucket_size 64; vị trí ~ ^/static/ { bao gồm /etc/nginx/mime.types; root /var/www/html/pdns/powerdnsadmin; vị trí ~* \.(jpg|jpeg|png|gif)$ { hết hạn sau 365 ngày; } vị trí ~* ^.+.(css|js)$ { hết hạn sau 7 ngày; } } vị trí / { proxy_pass http://unix:/run/pdnsadmin/socket; proxy_read_timeout 120; proxy_connect_timeout 120; proxy_redirect tắt; }}
Lưu và đóng tệp, sau đó kiểm tra Nginx xem có lỗi cú pháp nào không bằng lệnh sau:
Mã:
nginx -t
Bạn sẽ nhận được kết quả sau:
Mã:
nginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: kiểm tra tệp cấu hình /etc/nginx/nginx.conf thành công
Tiếp theo, thay đổi quyền sở hữu của pdns thành www-data:
Mã:
chown -R www-data:www-data /var/www/html/pdns
Cuối cùng, khởi động lại dịch vụ Nginx để áp dụng các thay đổi:
Mã:
systemctl restart nginx

Tạo tệp dịch vụ Systemd cho quản trị viên PowerDNS​

Tiếp theo, bạn sẽ cần tạo tệp dịch vụ systemd để quản lý dịch vụ PowerDNS.

Đầu tiên, hãy tạo tệp dịch vụ pdns bằng lệnh sau:
Mã:
nano /etc/systemd/system/pdnsadmin.service
Thêm các dòng sau:
Mã:
[Unit]Description=PowerDNS-AdminRequires=pdnsadmin.socketAfter=network.target[Service]PIDFile=/run/pdnsadmin/pidUser=pdnsGroup=pdnsWorkingDirectory=/var/www/html/pdnsExecStart=/var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket 'powerdnsadmin:create_app()'ExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPIDPrivateTmp=true[Cài đặt]WantedBy=multi-user.target
Lưu và đóng tệp, sau đó tạo tệp sockt pdnsadmin bằng lệnh sau:
Mã:
nano /etc/systemd/system/pdnsadmin.socket
Thêm các dòng sau:
Mã:
[Unit]Description=PowerDNS-Admin socket[Socket]ListenStream=/run/pdnsadmin/socket[Cài đặt]WantedBy=sockets.target
Lưu và đóng tệp, sau đó tạo các tệp và thư mục cần thiết bằng lệnh sau:
Mã:
echo "d /run/pdnsadmin 0755 pdns pdns -" >> /etc/tmpfiles.d/pdnsadmin.conf
mkdir /run/pdnsadmin/
chown -R pdns: /run/pdnsadmin/
chown -R pdns: /var/www/html/pdns/powerdnsadmin/
Tiếp theo, tải lại daemon systemd bằng lệnh sau:
Mã:
systemctl daemon-reload
Tiếp theo, bật dịch vụ pdnsadmin để bắt đầu khi khởi động lại hệ thống bằng lệnh sau:
Mã:
systemctl enable --now pdnsadmin.service pdnsadmin.socket
Tiếp theo, xác minh trạng thái của cả hai dịch vụ bằng lệnh sau:
Mã:
systemctl status pdnsadmin.service pdnsadmin.socket
Bạn sẽ nhận được kết quả đầu ra sau:
Mã:
? pdnsadmin.service - PowerDNS-Admin Đã tải: đã tải (/etc/systemd/system/pdnsadmin.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ Hai 2020-11-02 10:54:19 UTC; 5 giây trướcĐược kích hoạt bởi: ? pdnsadmin.socket PID chính: 38881 (gunicorn) Nhiệm vụ: 2 (giới hạn: 2353) Bộ nhớ: 62,5M CGroup: /system.slice/pdnsadmin.service ??38881 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsa> ??38898 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsa>02 tháng 11 10:54:19 pdnsadmin.example.com systemd[1]: Đã khởi động PowerDNS-Admin.02/11 10:54:19 pdnsadmin.example.com gunicorn[38881]: [02/11/2020 10:54:19 +0000] [38881] [THÔNG TIN] Đang khởi động gunicorn 20.0.402/11 10:54:19 pdnsadmin.example.com gunicorn[38881]: [02/11/2020 10:54:19 +0000] [38881] [THÔNG TIN] Đang nghe tại: unix:/run/pdnsadmin/socket (38881)02/11 10:54:19 pdnsadmin.example.com gunicorn[38881]: [02/11/2020 10:54:19 +0000] [38881] [INFO] Sử dụng worker: đồng bộ02/11 10:54:19 pdnsadmin.example.com gunicorn[38898]: [02/11/2020 10:54:19 +0000] [38898] [INFO] Đang khởi động worker với pid: 38898? pdnsadmin.socket - PowerDNS-Admin socket Đã tải: đã tải (/etc/systemd/system/pdnsadmin.socket; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ Hai 2020-11-02 10:54:19 UTC; 5 giây trước Kích hoạt: ? pdnsadmin.service Nghe: /run/pdnsadmin/socket (Stream) CGroup: /system.slice/pdnsadmin.socket02/11 10:54:19 pdnsadmin.example.com systemd[1]: Nghe trên socket PowerDNS-Admin.

Truy cập Giao diện người dùng web quản trị PowerDNS​

Bây giờ, hãy mở trình duyệt web của bạn và truy cập giao diện web quản trị PowerDNS bằng URL . Bạn sẽ được chuyển hướng đến trang sau:



Nhấp vào nút Tạo tài khoản. Bạn sẽ thấy màn hình sau:



Cung cấp thông tin chi tiết về người dùng quản trị của bạn và nhấp vào nút Đăng ký để tạo tài khoản. Bạn sẽ thấy trang đăng nhập quản trị PowerDNS trong màn hình sau:



Cung cấp tên người dùng, mật khẩu quản trị và nhấp vào nút Đăng nhập. Bạn sẽ thấy giao diện web quản trị PowerDNS trong trang sau:



Tại đây, hãy cung cấp URL API PowerDNS để kết nối với PowerDNS và quản lý nó. Sau đó, nhấp vào nút Cập nhật để lưu các thay đổi. Bạn sẽ thấy trang sau:



Nhấp vào nút Bảng điều khiển. Bạn sẽ thấy bảng điều khiển quản trị PowerDNS trong màn hình sau:


Kết luận​

Xin chúc mừng! Bạn đã cài đặt và cấu hình thành công PowerDNS và quản trị PowerDNS trên máy chủ Ubuntu 20.04. Bây giờ bạn có thể tạo vùng và thêm bản ghi thông qua giao diện web quản trị PowerDNS.
 
Back
Bên trên