Agaton.cz

Nejprve instalace samotného programu PowerDNS:

yum install pdns pdns-recursor pdns-backend-mysql

PowerDNS je složena ze dvou samostatných částí - authoritativní část je samotná pdns, dotazy do internetu řeší pdns-recursor. Obě části se také konfigurují samostatně a nejsou na sobě závislé. Pro uložení dat authoritativní části (pdns)  je možné použít některou z podporovaných databází - já jsem zvolil MySQL, proto i postup instalace se bude nadále věnovat jen této databázi. Nejprve se musí založit databáze a tabulky

mysql -p
create database `pdns` ;
use pdns;

create table domains (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
)type=InnoDB;

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
)type=InnoDB;

CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

create table supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);

GRANT SELECT ON supermasters TO pdns;
GRANT ALL ON domains TO pdns;
GRANT ALL ON records TO pdns;

A dále samotný program PowerDNS v sobě neobsahuje žádné backend-rozhraní - to je potřeba instalovat zvlášť. Já jsem nalezl dvě celkem použitelně vypadající nadstavby, PDNS-admin a Poweradmin. Poweradmin bych řekl, že je propracovanější, ale neuměl automaticky vytvářet reverzní záznamy (PTR) a já jsem v té době žil v přesvědčení, že tuto vlastnost potřebuji.... Proto jsem se nakonec rozhodl pro PDNS-Admin.

Do databáze pro pdns je zapotřebí přidat uživatele a nastavit přístupová práva (místo uživatele "pdns" je samozřejmě vhodnější dát administrativní jméno dle svých potřeb; je to ovšem potom potřeba zohlednit při vyplňování přístupových údajů).

mysql -p
create user pdns@localhost identified by 'heslo';
grant all privileges on pdns.* to 'pdns';

Stažený balík pdnsadmin1.1.10.tgz rozbalíme do adresáře /var/www/html/pdnsadmin. Další instalace se už provádí z webového rozhraní - www.mujdnsserver.cz/pdnsadmin . V titulním menu zvolíme novou instalaci a continue. Na další stránce se vyplní přístupové údaje k databázi MySQL, nastavení IP a přístupové údaje pro administraci. Pokud toto webové rozhraní běží na stejném stroji, jako vlastní PowerDNS, jako "Host Server" se ponechá údaj "localhost". Ale i v tomto případě je lepší použít IP přístup k databázi (implicitně port 3306), než používat socket (políčko nechat prázdné).

Pokud se instaluje PDNS jako primární ns, tak se ponechá prázdné i políčko "Master IP" a jako "Primary Nameserver" se zadá adresa právě konfigurovaného stroje. Po vyplnění zvolíme continue a pokud bylo vše vyplněné správně, je hotovo. V dalším kroku je potřeba v instalačním adresáři odstranit (přejmenovat) podadresář install. Nyní je již webové rozhraní funkční. Po přihlášení se přejde so sekce "Admin CP" a "Edit settings".  Zde se mohou editovat i další (až 8) doménových nameserverů, ale hlavně je vhodné změnit defaultní hodnoty TTL, refresh, retry a expiry na vyhovující hodnoty (samozřejmě je možné nechat i ty defaultní - ve verzi 1.1.7 už jsou snad korektní, ale ve verzi 1.1.6 byly příliš velké). Co však je potřeba opravit, jsou emailové adresy. V SOA záznamech má být adresa kde je místo znaku @ použita tečka. PDNS-Admin tam však vloží klasickou adresu. Proto je zde zapotřebí ten tvar mailové adresy opravit.

Pro automatické vytváření reverzních záznamů je zapotřebí aplikovat "bigpatch2 plus auto-ptr revised", ale bohužel ten je jen na verzi 1.1.6.  Ale po pravdě řečeno, požadavek na toto automatické vytváření mne sice vedl k výběru PDNS-admin místo Poweradmin (mám ještě verzi 1.1.6), ale nakonec to stejně nevyužívám.... Takže jsem možnosti, zda by nakonec ten patch nešel přiohnout na 1.1.7, ani na svém testovacím počítači nevěnoval pozornost.... Takže tato otazka zůstává otevřená....

Nyní se již může nakonfigurovat a spustit PDNS. Nejprve recursor (i když ten není na databázi závislý a může se spustit ještě před instalací PDNS-Admin). Recursor odpovídá na všechny DNS-dotazy mimo autoritativních. Pokud tedy nebudou na stroji žádné zónové záznamy, nemusí být ani pdns spuštěn, stačí pdns-recursor. Konfigurace recursoru se provádí v souboru /etc/pdns-recursor/recursor.conf . Pokud by byl recursor spuštěn samostatně bez pdns, stačilo by zde nastavit jen přístupová práva. Na řádek allow-from přidáme (oddělovač je mezera) seznam sítí, které mají oprávnění DNS používat. A na řádek local-adres přidáme adresu serveru, pod kterou bude na DNS-dotazy odpovídat (pro názornost byla zvolena adresa 20.30.40.50 v síti 20.30.40.0/22).

allow-from=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10 20.30.40.0/22
local-address=127.0.0.1  20.30.40.50
local-port=53

Pokud je však pdns spuštěna, je zapotřebí v recursoru změnit port, na kterém naslouchá, třeba na 1053 (to se potom musí zohlednit při konfiguraci pdns).

local-port=1053

Po nastavení je možné již recursor spustit (pro začátek doporučuji ponechat port na 53 a vyzkoušet. Pokud je jistota, že recursor pracuje, může se port změnit a spustit pdns).

service pdns-recursor start
chkconfig --level 2345 pdns-recursor on

Náš server teď již musí odpovídat na DNS-dotazy všem klientským počítačům, které jsou uvedeny v "allow-from=" (pro testování na klientském počítači nastavíme jen jednu DNS, a to tu naši, aby byla jistota, že neodpovídá jiný DNS-server).

Ta jednodušší část je hotova, takže teď vlastní pdns. Protože jak pdns, tak i pdns-recursor implicitně naslouchají na portu 53, docházelo by ke kolizi při současném spuštění. Proto je zapotřebí pdns-recursor spustit na jiném portu (viz výše) a číslo tohoto portu se nastaví do konfiguračního souboru pdns /etc/pdns/pdns.conf a opět nastavit přístupová práva. Zde je to však trošku složitější, protože je zapotřebí i povolit transfery zón.

recursor=127.0.0.1:1053
allow-axfr-ips=20.30.40.60
allow-recursion=192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 127.0.0.0/8, 195.113.26.193, ::1/128, fe80::/10 20.30.40.0/22
daemon=yes
disable-axfr=no
local-address=127.0.0.1 20.30.40.50
local-port=53

master=yes
slave=yes
slave-cycle-interval=60

launch=gmysql
gmysql-host=localhost
gmysql-user=pdns
gmysql-dbname=pdns
gmysql-password=heslo

webserver-address=20.30.40.50
webserver=yes
webserver-password=heslo
webserver-port=8081

V tomto příkladu je v řádku allow-axfr-ips=20.30.40.60 adresa dalšího serveru, kam je povolen transfer zón (sekundarní DNS). Nevím, zda je to zapotřebí, ale já zde mám i IP adresu NICu. Protože nyní běží recursor na nestandardním portu a místo něho na DNS-dotazy odpovídá pdns, je zde v podstatě stejný seznam povolených sítí (allow-recursion=) jako v konfiguraci pdns-recursoru. Pokud je server zároveň primární (master=yes) pro vlastní autoritativní záznamy, a zároveň je pro nějakou spřátelenou firmu pro jejich záznamy jako sekundární, je zde i řádek "slave=yes". V případě, že sekundární DNS není nikomu poskytován, řádek slave=  zde nebude (stačí jej zakomentovat). V sekci pro mysql je samozřejmě zapotřebí správně vyplnit user, dbname a password (dle výše založené databáze). Poslední 4 řádky jsou nepovinné a slouží ke sledování statistik PDNS pře webové rozhraní - pro určité "poinstalační" období je dobré jej mít zapnuté, ale v běžném provozu je to myslím zbytečné (data se dají odečítat třeba i pomocí cacti).

První zkušební spuštění je pomocí

service pdns monitor

Odezva by měla být přibližně

[root@ns pdns]# service pdns monitor
Oct 22 02:20:58 This is module gmysqlbackend.so reporting
Oct 22 02:20:58 This is a standalone pdns
Oct 22 02:20:58 UDP server bound to 127.0.0.1:53
Oct 22 02:20:58 UDP server bound to xxx.xxx.xxx.135:53
Oct 22 02:20:58 TCP server bound to 127.0.0.1:53
Oct 22 02:20:58 TCP server bound to xxx.xxx.xxx.135:53
Oct 22 02:20:58 PowerDNS 2.9.21.2 (C) 2001-2008 PowerDNS.COM BV (Nov 18 2008, 16:34:15, gcc 4.3.2 20081105 (Red Hat 4.3.2-7)) starting up
Oct 22 02:20:58 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2.
Oct 22 02:20:58 Set effective group id to 488
Oct 22 02:20:58 Set effective user id to 491
Oct 22 02:20:58 DNS Proxy launched, local port 10496, remote 127.0.0.1:1053
% Oct 22 02:20:58 Creating backend connection for TCP
Oct 22 02:20:58 gmysql Connection succesful
Oct 22 02:20:58 About to create 3 backend threads for UDP
Oct 22 02:20:58 gmysql Connection succesful
Oct 22 02:20:58 gmysql Connection succesful
Oct 22 02:20:58 gmysql Connection succesful

Pokud je vše v pořádku (hlavně vazba na databázi), je možné již pdns spustit stanardně pomocí

service pdns start
chkcoinfig ----level 2345 pdns on

V tomto okamžiku je již možné přes webové rozhraní PDNS-Admin zakládat jednotlivé uživatele a jejich doménové záznamy (při přechodu z již existujícího DNS serveru), nebo jen jednotlivé uživatelské účty a doménové záznamy si pak vytvářejí uživatelé sami.

 

Nevím, zda jsem někde udělal nějakou chybu, nebo zda přímo pdns korektně neodpovídá na dotazy "localhost", proto je potřeba zadat jak localhost, tak reverzní zónu ručně do databáze (pdnsadmin to nechce přímo povolit. Nejlépe zadat třeba jako doménu "localhost.cz" a pak ručně v databázi editovat - tím se vytvoří správně všechny indexy. U reverzního záznamu dtto.

Nastaveni pdns jako sekundární

PowerDNS v režimu sekundární DNS se umí sama aktualizovat z primární. Konfigurace je v podstatě stejná, jako u primáru, pouze je zakázán allow-axfr-ips. Ostatní nastavení se provádí ve webovém rozhraní, přes "Admin CP" - "Edit settings" se nastaví řádek "Master IP for SLAVE domains" a přes "Admin CP" - "Set domain supermaster" - tlačítko "Add Supermaster" se přiřadí primární nameserver, ze kterého se bude provádět automatické načítání zónových souborů.

Zde musím upozornit, že sekundární pdns-admin nenačte dodatečně (přeinstalace sekundární pdns) seznam domén z primární pdns, je zapotřebí všechny domény znovu zadat. Ovšem obsah zón se pak skoro okamžitě aktualizuje z primární pdns, takže při vkládání je možné jako IP adresu pro A zadat libovolnou - vzápětí se přepíše tou správnou spolu s ostatními záznamy. Při vkládání nové domény přes primární pdns-admin je obsah korektně přenesen i na sekundární.

Bohužel u nastavování sekundární DNS jsem si nedělal poznámky, je tedy možné, že jsem zde něco opomněl...