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!

SaKuRai

Xin chào, Mình là Sakurai. Blog này là nơi để note lại và chia sẻ những kiến thức, kinh nghiệm mà mình và anh em trong Team. Cảm ơn các bạn đã quan tâm theo dõi!

You may also like...

Leave a Reply