PowerDNS telepítés
A jó öreg Bind névszerver évtizedeken keresztül jól bevált. Basszunk ki magunkkal és vezessünk be helyette valami újat!
Szükséges csomagok
apt install pdns-server pdns-recursor pdns-backend-mysql dnsdist
Konfiguráció
Az authoritatív
Ez az a rész, ami az illetékességhez kell. Azaz, ha az enyém a morknat.hu domain, akkor kell nekem egy authoritatív elsődleges és másodlagos dns szerver.
/etc/powerdns/pdns.conf
api=yes
api-key=apitapi
include-dir=/etc/powerdns/pdns.d
launch=
local-address=127.0.0.1
local-port=5300
master=yes
security-poll-suffix=
setgid=pdns
setuid=pdns
slave=yes
webserver=yes
webserver-address=0.0.0.0
webserver-allow-from=0.0.0.0/0,::/0
webserver-port=8081
/etc/powerdns/pdns.d/gmysql.conf
Igen, olyat tud, hogy MySQL-ben tárolja a zónák adatait.
launch+=gmysql
gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=jóamatőrlennehaidemásoltamvolna
gmysql-dnssec=yes
A rekurzor
/etc/powerdns/recursor.conf
Nem úgy, mint a Bind-nél, ez itt egy külön mutatvány. Enélkül a Powerdns nem fog névfeloldást produkálni sem a localhost, sem a helyi hálózat számára.
forward-zones=example.com=127.0.0.1:5300
hint-file=/usr/share/dns/root.hints
include-dir=/etc/powerdns/recursor.d
local-address=127.0.0.1
local-port=5301
lua-config-file=/etc/powerdns/recursor.lua
quiet=yes
security-poll-suffix=
setgid=pdns
setuid=pdns
MySQL
CREATE DATABASE IF NOT EXISTS `powerdns` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE OR REPLACE USER 'powerdns'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON `powerdns`.* TO 'powerdns'@'%';
FLUSH PRIVILEGES;
mysql -u root -p powerdns
Dnsdist
Csak, hogy ne legyen már olyan egyszerű. Az authoritatív és a rekurzor szerverek a localhost-on tanyáznak és még csak nem is a szokásos UDP 53-as porton. A külvilág számára a dnsdist lesz látható, ami eldönti, hogy a beérkező kéréseket melyik szervernek érdemes továbbítani.
/etc/dnsdist/dnsdist.conf
setSecurityPollSuffix("")
setLocal('127.0.0.1:53')
addLocal('192.168.12.3:53')
setACL({'0.0.0.0/0', '::/0'})
newServer({address='127.0.0.1:5300', pool='auth'})
newServer({address='127.0.0.1:5301', pool='recursor'})
recursive_ips = newNMG()
recursive_ips:addMask('127.0.0.0/8')
recursive_ips:addMask('192.168.12.0/24')
addAction(NetmaskGroupRule(recursive_ips), PoolAction('recursor'))
addAction(AllRule(), PoolAction('auth'))
PowerDns-Admin
Webes felület.

docker-compose.yml
version: '3'
services:
powerdns-admin:
image: ngoduykhanh/powerdns-admin:latest
network_mode: bridge
ports:
- 192.168.12.3:9191:80
extra_hosts:
- docker:172.17.42.1
volumes:
- ./volumes/data:/data
environment:
- SECRET_KEY=összevisszakarakterek
restart: always