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
Ư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
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 cấu hình port sang 5300 để listen từ master, có thể thay đổi thẳng 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!