Xây dựng hệ thống DNS PowerDNS 4.1.0 chịu tải cao trên Ubuntu 16, Ubuntu 18 chạy Standalone, HA từ A-Z.

Build PowerDNS 4.1.0 on Ubuntu 16, Ubuntu 18

 

Phần 1: Cài đặt PowerDns Standalone

Link tham khảo

#​​ https://computingforgeeks.com/install-powerdns-and-powerdns-admin-on-ubuntu-18-04-debian-9-mariadb-backend/

    • Ưu điểm của PowerDNS

Có hỗ​​ trợ​​ DB: MySQL, PostgreSQL, Oracle, Sybase, Microsoft SQL Server, LDAP, SQLite3

○ Including replication​​ 

○ Near instant startup time

Có giao diện thân thiện.

Hỗ​​ trợ​​ secure DNS

Các tính năng khác của PowerDNS

  • Authoritative DNS server (hosting)

  • Resolving DNS server (caching)

  • API to provision zones and records

  • DNSSEC support (as of 3.x)

  • Web-based management options

  • DNS data stored in plaintext (BIND compatible)

  • IPv4 and IPv6, UDP/TCP, 100% compliant

  • MySQL, PostgreSQL, Microsoft SQL Server, Oracle, Sybase database back ends

  • Load balancing/failover algorithms

  • SNMP support

  • Remotely pollable statistics for real-time graphing

  • Optional built-in web server

  • Debugging tools

  • Support for Linux, BSD, Unix

The​​ PowerDNS recursor supports:

  • All relevant standards

  • Advanced anti-spoofing measures

  • Reconfiguration without downtime

  • Plain BIND zone files for “resolved hosting”

  • Question interception, answer reconditioning, NXDOMAIN redirection (including “block lists” and​​ security measures)

  • The rec_control utility, an API for direct control of the PowerDNS recursor and to output data to MRTG and RDD for pretty network graphs

  • Local and remote access

  • DNS64

    • Cấu hình database:

#​​ https://computingforgeeks.com/install-mariadb-10-on-ubuntu-18-04-and-centos-7/

 

Các bạn có thể​​ cấu hình database theo link hướng dẫn trên.

    • Cài đặt powerdns và powerdns-admin

#​​ https://computingforgeeks.com/install-powerdns-and-powerdns-admin-on-ubuntu-18-04-debian-9-mariadb-backend/

Làm theo​​ các bước cài đặt, thay đổi password user powerdns và powerdnsadmin.

 

    • FIX LỗI

Jul 11 17:11:57 srv038 gunicorn[4221]: RuntimeError: Error while fetching​​ http://127.0.0.1:8081/api/v1/servers/localhost/zones

Nếu gặp lỗi này thì cần xử​​ lý như sau

 

#​​ https://doc.powerdns.com/authoritative/http-api/index.html

 

nano /etc/powerdns/pdns.conf

# chỉnh như sau

api=yes

api-key=changeme

api-key=123456@@

 

 

systemctl restart powerdns-admin.service

systemctl restart pdns

# sau đó điền key 123456@@ vào mục PDNS API KEY

# mục PDNS API URL điền http://127.0.0.1:8081/

 

Để kiểm tra trực quan các bạn có thể sử dụng phần mềm​​ hedissql để​​ kết nối vào DB vào kiểm tra​​ các bảng mà PDNS đã tạo ra.

Tạo 1 domain và trỏ​​ Test chỉ​​ định DNS​​ bất kì

 

 

Fix lỗi

(flask) root@srv039:/opt/web/powerdns-admin# flask db upgrade

​​ * Tip:​​ There are .env files present. Do "pip install python-dotenv" to use them.

Traceback (most recent call last):

 ​​​​ File "/opt/web/powerdns-admin/flask/bin/flask", line 10, in <module>

 ​​ ​​ ​​​​ sys.exit(main())

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/flask/cli.py", line 894, in main

 ​​ ​​ ​​​​ cli.main(args=args, prog_name=name)

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/flask/cli.py", line 557, in main

 ​​ ​​ ​​​​ return super(FlaskGroup, self).main(*args, **kwargs)

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/click/core.py", line 717, in main

 ​​ ​​ ​​​​ rv = self.invoke(ctx)

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/click/core.py", line 1137, in invoke

 ​​ ​​ ​​​​ return _process_result(sub_ctx.command.invoke(sub_ctx))

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/click/core.py", line 1137, in invoke

 ​​ ​​ ​​​​ return _process_result(sub_ctx.command.invoke(sub_ctx))

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/click/core.py", line 956, in invoke

 ​​ ​​ ​​​​ return ctx.invoke(self.callback, **ctx.params)

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/click/core.py", line 555, in invoke

 ​​ ​​ ​​​​ return callback(*args, **kwargs)

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func

 ​​ ​​ ​​​​ return f(get_current_context(), *args, **kwargs)

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/flask/cli.py", line 411, in decorator

 ​​ ​​ ​​​​ with​​ __ctx.ensure_object(ScriptInfo).load_app().app_context():

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/flask/cli.py", line 372, in load_app

 ​​ ​​ ​​​​ app = locate_app(self, import_name, name)

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/flask/cli.py", line 235, in locate_app

 ​​ ​​ ​​​​ __import__(module_name)

 ​​​​ File "/opt/web/powerdns-admin/app/__init__.py", line 24, in <module>

 ​​ ​​ ​​​​ app.config.from_object('config')

 ​​​​ File​​ "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/flask/config.py", line 170, in from_object

 ​​ ​​ ​​​​ obj = import_string(obj)

 ​​​​ File "/opt/web/powerdns-admin/flask/lib/python3.6/site-packages/werkzeug/utils.py", line 547, in import_string

 ​​ ​​ ​​​​ __import__(import_name)

 ​​​​ File "/opt/web/powerdns-admin/config.py", line 1

 ​​ ​​ ​​​​ SQLA_DB_USERimport os

 ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​​​ ^

SyntaxError: invalid syntax

 

 

Sửa như sau:

cd /opt/web/powerdns-admin#​​ 

nano config.py

#commend và thêm phần import

#SQLA_DB_USERimport os

import os

 

 

Phần 2: Cấu hình DNS recursor​​ 

Mục đích: Nếu DNS Local không thể biết các Domain trên internet thì nó sẽ cần hỏi DNS nào, ta cần chỉ định ra DNS sẽ bị hỏi ở đây là​​ DNS google: 8.8.8.8. Bạn cũng có thể thay thế bằng Open DNS: 1.1.1.1 hoặc bất kì DNS nào khác public trên Internet và cho phép querry đến.

  • Mô hình này dùng server dns authoritative và recursor trên cùng 1 server

Trên dns recursor cài thêm:

apt install ​​ pdns-recursor

    • Cấu hình trên recursor:

nano /etc/powerdns/recursor.conf

 

local-address=0.0.0.0

local-port=53

forward-zones=.=10.0.1.39:5300;8.8.8.8:53

#dấu chấm thay cho tất cả​​ domain. Bạn có thể​​ thay thế​​ dấu . bởi chỉ​​ các domain muốn querries local

cấu hình trên​​ authoritative​​ dns server

nano /etc/powerdns/pdns.conf ​​ 

local-port=5300

local-address=0.0.0.0  ​​​​ 

 

restart dịch vụ:

/etc/init.d/pdns restart

/etc/init.d/pdns-recursor restart

 

    • Test dịch vụ

 

Query thử​​ đến 1 domain local và 1 domain internet

Tạo trước bản ghi test​​ 

Như vậy DNS đã làm đúng nhiệm vụ.

 

Phần 3: Build powerdns Master and​​ Slave

  • ​​ Điều kiện:​​ 

cài đặt 2 server powerdns độc lập với nhau, allow kết nối port 53,5300,8081 giữa 2 server, hoặc trust IP full port với nhau.

 

master: 10.0.1.39

slave: 10.0.1.38

 

    • Cấu hình trên server master​​ 

 

nano /etc/powerdns/pdns.conf

 

allow-axfr-ips=10.0.1.38/32

also-notify=10.0.1.38

api=yes

daemon=yes

default-soa-name=srv039.local​​ 

# không có cấu hình soa sẽ​​ không auto đẩy record từ​​ master về​​ salve được

disable-axfr=no

disable-tcp=no

guardian=yes

launch=

local-address=0.0.0.0

local-port=53

loglevel=4

master=yes

slave=no

webserver=yes

webserver-address=0.0.0.0

 

 

    • Cấu hình trên server slave

 

nano /etc/powerdns/pdns.conf

 

allow-axfr-ips=10.0.1.39,127.0.0.0/8

allow-dnsupdate-from=10.0.1.39/32

allow-notify-from=10.0.1.39/32,0.0.0.0/0

api=yes

api-key=123456@@

default-soa-name=srv038.local

# không có cấu hình soa sẽ​​ không auto đẩy record từ​​ master về​​ salve được

guardian=yes

slave-cycle-interval=60​​ 

launch=

local-address=0.0.0.0

local-port=53

loglevel=4

master=no

slave=yes

 

Phần 4 Cấu hình 2 server recursor và authoritative trên cùng server đó

 

  • Điều kiện:​​ 

cài đặt 2 server powerdns độc lập với nhau, allow kết nối port 53,8081 giữa 2 server, hoặc trust IP full port với nhau.

 

master: 10.0.1.39 enable recursor

slave: 10.0.1.38 enable recursor

    • Cấu​​ hình trên cả​​ master và slave:

change port recursor.conf sang 53 và pdns.conf sang port 5300

 

cấu hình trên server slave

nano /etc/powerdns/pdns.conf

 

also-notify=10.0.1.39:5300

Trên​​ powerdns-admin chuyển​​ cu hình port sang 5300 đ​​ listen t​​ master, có th​​ thay đi thng trên DB

#​​ https://github.com/PowerDNS/pdns/issues/5286

 

    • Mô hình

 

Lưu ý:

trỏ​​ file host​​ để test:​​ 

10.0.1.38 powerdns-admin.example.com

10.0.1.39 powerdns-admin2.example.com

Như vậy bạn đã có Full bộ công cụ cấu hình PowerDNS.

Chúc các bạn thành công!

BÀI VIẾT CÙNG CHUYÊN MỤC