Portál AbcLinuxu, 23. září 2026 10:11

PowerDNS - Autoritativní i rekurzivní dns server s klikátkem

17.1.2022 08:00 | Přečteno: 4468× | linux | poslední úprava: 17.1.2022 08:00

Je to už delší doba, co jsem sepsal článek PowerDNS – přívětivý a jednoduchý DNS server. Od té doby se toho hodně změnilo. Takže opět uvolním nějaký malý výcuc z interní dokumentace.

Úvod

PowerDNS se stále u nás používá v interní síti jako autoritativní dns server pro některé domény i jako rekurzivní dns server. Je to dáno historicky, je to dáno kvůli nezasírání si dns serverů v rámci Active Directory, ale i kvůli dalším věcem. PowerDNS se stále hodně vyvíjí a architektura se postupně přepracovala. Důvod, proč jako předsazený dns server nepoužíváme bind, je stále stejný. PowerDNS podporuje mysql, jsou k dispozici pěkná grafická klikátka a pro menší klikací nasazení je to tedy podle mě vhodnější.


Slovníček pojmů

Nejdříve si ujasníme základní pojmy.

Autoritativní DNS server

Jedná se o server, kde jsou vedeny domény. Dotazy na domény tedy nikam nepřeposílá, ale jen obhospodařovává to, co je na něm nastaveno. Typickým příkladem jsou dns servery webhostingů. Když se jich zeptáte na nějakou doménu, která není u nich vedena, tak odpoví, že jí neznají. Nepřepošlou dotaz dál a nepřeloží vám to.


Rekurzivní DNS server

Jedná se o dns server, který kešuje a přeposílá dotazy. Když se ho zeptáte na cokoli, tak odpoví a správně přeloží. Na rekurzivním dns serveru nejsou vedeny domény, funguje opravdu jen jako kešovací brána pro překlady. Typickým příkladem jsou dns servery poskytovatelů připojení k internetu.


Rekurzivní i autoritativní DNS server v jednom?

Je možné mít jednu službu, kde jsou vedeny nějaké domény, a když je nezná, přepošle dotaz dál. Od tohoto konceptu se ale ustupuje. A jeden z hráčů, který tak učinil, je i PowerDNS.

V původním článku má PowerDNS autoritativní část i rekurzivní část v rámci jednoho serveru. Od verze 4.1.0 byla rekurzivní část separována do vlastní služby. Tj. autoritativní část i rekurzivní část běží na vlastním portu.


Architektura PowerDNS

Já chci mít ve firmě PowerDNS, klikací a chci ho mít jako autoritativní i jako rekurzivní. Jak toho docílit? Řekli jsme si, že jsou tyto části rozděleny a každá běží na svém portu. Obě tedy nemohou běžet na portu 53. Jak to tedy funguje? Jednoduše, ani jedna nepoběží na portu 53 :).

Princip je jednoduchý, autoritativní část i rekurzivní část poběží na localhostu. Autoritativní část poběží třeba na portu 5300 a rekurzivní část třeba na portu 5301. Na portu 53 pak poběží load balancer, který bude podle politik rozhazovat komunikaci. Jako dns balancer se používá dnsdist. PDNS má note, jak provést migraci: Migrating from using recursion on the Authoritative Server to using a Recursor.

V původním článku bylo zmíněno jako klikací web rozhraní PowerAdmin, který se stále vyvíjí a jedná se asi o nejlepší klikací web rozhraní pro PowerDNS, které podporuje i dnssec. Pro mé použití jsem v době minulé zkusil zaexperimentovat a nasadil jsem PDNS Manager. Důvodů bylo několik malicherných, je to jednodušší, pěknější a v tu chvíli mi to více vyhovoval. Každý, nechť se rozhodne sám, co použije a jak.

Finální architektura nakonec vypadá takto:
PowerDNS Architecture


Konfigurace

Jak vidíte z architektury, tak nejdříve jde komunikace na dnsdist, který požadavky přesměruje na recursor. Ten se pak postará o rozhození správným směrem. Dnsdist komunikuje ale i s autoritativním PowerDNS kvůli transféru domén s dalšími dns servery. Tj. kvůli axfr komunikaci. V síti máme další dns servery, které fungují jako slave a dělá se na ně transfer dns zón. Těmi dns servery jsou: 192.168.1.1, 192.168.1.2, 192.168.1.3. Konfigurace pak tedy bude vypadat takto:


dnsdist

/etc/dnsdist/dnsdist.conf

addLocal('0.0.0.0:53')
addACL('0.0.0.0/0')

newServer({address='127.0.0.1:5300', pool='auth'})
newServer({address='127.0.0.1:5301', pool='recursor'})

-- AXFR ACL
addAction(AndRule{
    OrRule{
        QTypeRule(dnsdist.AXFR),
        QTypeRule(dnsdist.IXFR)
    },
    NotRule(OrRule{
        -- localhost
        makeRule('127.0.0.1'),
        makeRule('::1'),
        -- A slave
        makeRule('192.168.1.1'),
        makeRule('192.168.2.1'),
        makeRule('192.168.3.5'),
    })
}, RCodeAction(dnsdist.REFUSED))


-- Notify ACL
addAction(AndRule{
    OpcodeRule(DNSOpcode.Notify),
    NotRule(OrRule{
        -- My superslave
        makeRule('192.168.1.1'),
        makeRule('192.168.2.1'),
        makeRule('192.168.3.1'),
    })
}, RCodeAction(dnsdist.REFUSED))


-- AXFR and Notify Target
addAction(OrRule{
    QTypeRule(dnsdist.SOA),
    QTypeRule(dnsdist.AXFR),
    QTypeRule(dnsdist.IXFR),
    OpcodeRule(DNSOpcode.Notify)
}, PoolAction("auth"))


-- IP address for redirect to recursor:
recursive_ips = newNMG()
recursive_ips:addMask('0.0.0.0/0')

addAction(NetmaskGroupRule(recursive_ips), PoolAction('recursor'))
addAction(AllRule(), PoolAction('auth'))


PowerDNS - autoritativní

/etc/powerdns/pdns.conf

...
allow-axfr-ips=127.0.0.1
allow-unsigned-supermaster=no
also-notify=192.168.1.1,192.168.1.2,192.168.1.3
daemon=yes
disable-axfr=no
guardian=yes
local-port=5300
log-dns-queries=no
master=yes
trusted-notification-proxy=127.0.0.1
webserver=yes
webserver-address=0.0.0.0
webserver-allow-from=127.0.0.1,::1
webserver-password=heslo
webserver-port=8081
version-string=powerdns
...

/etc/powerdns/pdns.d/mysql.conf

launch=gmysql

gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=heslo123
gmysql-dnssec=no


PowerDNS - rekurzivní

/etc/powerdns/recursor.conf

...
daemon=yes
forward-zones-file=/etc/powerdns/recursor_forward_zones.conf
forward-zones-recurse=.=8.8.8.8
hint-file=/usr/share/dns/root.hints
local-address=0.0.0.0
local-port=5301
quiet=yes
...
/etc/powerdns/recursor_forward_zones.conf
devaine.local=127.0.0.1:5300
dcera.local=192.168.58.2
corp.devaine.cz=192.168.1.151:53;192.168.1.152:53


Jak vidíte, tak nastavení je jednoduché. Trochu složitější je zpočátku proniknout do nastavení politik co a jak kam směrovat u dnsdist, ale jinak je to vše úplně v klidu.


Sekundární DNS server

V původním článku jsem dělal sync dns zón na sekundární dns server pomocí syncu databáze. To jsem také časem změnil a sync dělám pomocí axfr transféru dns zón. Jinými slovy, uvedenou konfiguraci PowerDNS+dnsdist mám úplně stejně na dalším serveru, jen s tím rozdílem, že autoritativní část je nastavena takto:

/etc/powerdns/pdns.conf

...
allow-axfr-ips=127.0.0.1
allow-unsigned-supermaster=no
#also-notify=192.168.1.1,192.168.1.2,192.168.1.3
daemon=yes
disable-axfr=no
guardian=yes
local-port=5300
log-dns-queries=no
master=yes
slave=yes
slave-cycle-interval=60
trusted-notification-proxy=127.0.0.1
webserver=yes
webserver-address=0.0.0.0
webserver-allow-from=127.0.0.1,::1
webserver-password=heslo
webserver-port=8081
version-string=powerdns
...

/etc/powerdns/pdns.d/mysql.conf

launch=gmysql

gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=heslo123
gmysql-dnssec=no


Diagnostika

Pokud chceme nějak diagnostikovat problémy s dns, tak základ je samozřejmě program "dig" z balíčku dnsutils. Tento program je něco jako nslookup, ale lepší. Pár příkladů:

# pošli dotaz na konkrétní dns server
dig @8.8.8.8 devaine.cz

# zdiagnostikuj autoritativní část z příkladu
dig @127.0.0.1 -p 5300 corp.devaine.cz

# zeptej se na mx záznam
dig @8.8.8.8 abclinuxu.cz mx

# zeptej se na txt záznam
dig @8.8.8.8 heronovo.cz txt

# zeptej se na rdns
dig -x 23.88.41.116

Dobrým nástrojem, který nám pomůže diagnostikovat problémy s rekurzorem je "rec_control":

# zjistit stav konkrétního záznamu
rec_control dump-cache /tmp/dns-cache.txt
cat /tmp/systemd-private-8e23dc6a1549477f9873f6b5594c873a-pdns-recursor.service-oBkeOV/tmp/dns-cache.txt

# smaž z cache
rec_control wipe-cache corp.devaine.cz

# zobraz aktuální dotazy
rec_control current-queries

# zobraz top
rec_control top-queries

Dalším nástrojem je "pdns_control", který slouží k ovládání dns serveru, pár příkladů

# jak dlouho běží služba
pdns_control uptime

# přehled zón na serveru
pdns_control list-zones

# zjisti, zda služba žije
pdns_control rping

# zobraz všechny statistiky
pdns_control show '*'

# zobraz konkrétní statistiku
pdns_control show udp4-queries


Závěr

Myslím si, že nemá smysl psát ucelený návod typu step2step jako v předchozím článku. Kdo chce grafické klikátko, tak si ho doinstaluje úplně stejně jako je v předchozím článku uvedeno, jinak se nic dalšího nemění.

A jak jste na tom vy? Co používáte a jak?

Zdar Max

       

Hodnocení: 100 %

        špatnédobré        

Anketa

Jak jste na tom? Co používáte?
 (48 %)
 (16 %)
 (20 %)
 (16 %)
 (7 %)
 (18 %)
 (7 %)
 (5 %)
 (11 %)
Celkem 44 hlasů

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Diskuse byla administrátory uzamčena

17.1.2022 10:28 MP
Rozbalit Rozbalit vše Re: PowerDNS - Autoritativní i rekurzivní dns server s klikátkem
Co se tyce grafickeho klikatka, tak jsem trochu nestastny. Puvodni PowerAdmin jiz neni vyvyjeny, takze momentalne vse konfiguruji pres cli, a jako nouzovou variantu mam Pdns Admin, cili misto klasickeho php nejaky kontejner s x technologiemi, coz se mi spatne dava do konfig managementu. A timpadem mam problem s moznosti vyuzivat Let's Encrypt.

Dnsdist pouzivam taky, ale mam to predrazene az pred auth servery, kdyz jsem kreslil redundantni schema vcetne ruznych forwardu intranetovych/public zon, tak dnsdist pred rekurzory mi vyrobil krasne neresitelne smycky. Jen si clovek musi davat bacha pri upgradech dnsdist, velmi radi meni nazvy funkci, coz se config managementem spatne vykryva, taky jsem na tom mel uz pekny firemni vypadek.

17.1.2022 10:54 Max | skóre: 73 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: PowerDNS - Autoritativní i rekurzivní dns server s klikátkem
PowerAdmin se ale pořád vyvíjí, jen to UI má myslím pořád strašný. Pokud jde o pdns admin, tak docker přece používat nemusíš, ne?
Zdar Max
Měl jsem sen ... :(
17.1.2022 11:48 MP
Rozbalit Rozbalit vše Re: PowerDNS - Autoritativní i rekurzivní dns server s klikátkem
Tak PowerAdmin - to je nejaka novinka, protoze pred rokem a vice to rozhodne bylo neudrzovany repo.

Eh, nahradou jsem pouzil Powerdns-Admin, coz kdyz se clovek podiva na postup instalace mimo kontejner - https://github.com/PowerDNS-Admin/PowerDNS-Admin/wiki/Running-PowerDNS-Admin-on-Ubuntu-or-Debian, tak ...
17.1.2022 12:19 Max | skóre: 73 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: PowerDNS - Autoritativní i rekurzivní dns server s klikátkem
Na ten postup jsem právě koukal a buď jsem už sešlehaný časem a jinýma řešeníma, nebo nevím, ale mě to nepřijde složitý. MySQL + Node.js + Python + bych před to dal Nginx jako reverzní proxy. Easy peasy :).
Zdar Max
Měl jsem sen ... :(
17.1.2022 13:50 MP
Rozbalit Rozbalit vše Re: PowerDNS - Autoritativní i rekurzivní dns server s klikátkem
a k tomu yarn, flask, pip prikazy...

Jaky rozdil nastavit nginx + slozku + nahrat primo zdrojaky...
17.1.2022 13:53 Max | skóre: 73 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: PowerDNS - Autoritativní i rekurzivní dns server s klikátkem
Pokrok nezastavíš, no :).
Zdar Max
Měl jsem sen ... :(
17.1.2022 10:53 Mayhem
Rozbalit Rozbalit vše Re: PowerDNS - Autoritativní i rekurzivní dns server s klikátkem
Pro me ucely vzdy dostacoval bind, ale pak jsem objevil dnsmasq a zamiloval jsem si jej. :-D knot jsem zkousel, ale to je pro muj ucel kanon na orla. A take je od cznicu, ktery nemam rad.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.