PDA

Bekijk Volledige Versie : Howto: PowerDNS Superslave



pierce
15/07/08, 12:09
Omdat er regelmatig discussies zijn over het opzetten van secundaire DNS servers, hier een korte basic handleiding over hoe je een PowerDNS Superslaaf op zet.
Deze handleiding is met wat knip en plak werk in elkaar gezet(eigenlijk had je het dus ook zelf kunnen uitzoeken...), verwacht dus geen hoogstandjes :)

Verder wordt er uitgegaan van een kale CentOS 5.1 installatie voor PowerDNS en een werkende primaire nameserver met Bind(bijvb icm Directadmin).

Op- of aanmerkingen, toevoegingen, uitbreidingen, financiele bijdrage's(kunnen worden overgemaakt naar Postbank rekening 3481329 t.a.v. iData) etc. etc. zijn altijd welkom! :)



Configure Yum:
First we enable the RPMforge repository on our CentOS system as some of the packages that we are going to install in the course of this tutorial are not available in the official CentOS 5.1 repositories:

rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm (http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm)

Install Apache, MySQL etc.
This requires a webserver with PHP enabled and the MySQL database server. If you have already Apache, PHP and MySQL installed, you may skip this step. We also install phpMyAdmin here so that you have a web interface to the MySQL database in case you need it:

yum install httpd mysql-server php php-mysql php-mbstring phpmyadmin

Start MySQL:

chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start

Then set passwords for the MySQL root account:

mysqladmin -u root password yourrootsqlpassword
mysqladmin -h your.hostname.tld -u root password yourrootsqlpassword

Configure phpMyAdmin.
We change the Apache configuration so that phpMyAdmin allows connections not just from localhost (by commenting out the <Directory "/usr/share/phpmyadmin"> stanza):

Joe /etc/httpd/conf.d/phpmyadmin.conf

#
# Web application to manage MySQL
#

#<Directory "/usr/share/phpmyadmin">
# Order Deny,Allow
# Deny from all
# Allow from 127.0.0.1
#</Directory>

Alias /phpmyadmin /usr/share/phpmyadmin
Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /mysqladmin /usr/share/phpmyadmin

Next we change the authentication in phpMyAdmin from cookie to http:

joe /usr/share/phpmyadmin/config.inc.php

[...]
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]

Then we create the system startup links for Apache and start it:

chkconfig --levels 235 httpd on
/etc/init.d/httpd start

Install PowerDNS:
Yum install pdns

Edit the PowerDNS Config file:
joe /etc/pdns/pdns.conf

# this option tells powerdns to use mysql
launch=gmysql

# the ip address of the mysql host
gmysql-host=127.0.0.1

# the mysql username
gmysql-user=root

# the mysql password
gmysql-password=changemeyesterday!

# the mysql database
gmysql-dbname=pdns

master=yes

# i have some customers that i'm slave for
# so i want to configure pdns to do master
# queries to the master dns servers of my
# customers
slave=yes

# Update every 60 seconds
slave-cycle-interval=60

# this option tells powerdns to start the statistics webserver
webserver=yes

# the ip address to which the webserver listenes
webserver-address=your.ip.here

# the port the webserver listenes
webserver-port=8081

# the webserver password
webserver-password=changemenow!

# tell what ip addresses can fetch zones from our master server
# as for example secondary dns servers
allow-axfr-ips=127.0.0.1

default-ttl=3600

Start PowerDNS on boot:

chkconfig --levels 235 pdns on
service pdns start

Create the PowerDNS database within phpmyadmin:

-- phpMyAdmin SQL Dump


SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `pdns`
--

-- --------------------------------------------------------

--
-- Tabel structuur voor tabel `domains`
--

CREATE TABLE IF NOT EXISTS `domains` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`master` varchar(20) default NULL,
`last_check` int(11) default NULL,
`type` varchar(6) NOT NULL,
`notified_serial` int(11) default NULL,
`account` varchar(40) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name_index` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Gegevens worden uitgevoerd voor tabel `domains`
--

INSERT INTO `domains` (`id`, `name`, `master`, `last_check`, `type`, `notified_serial`, `account`) VALUES
(1, 'test.nl', '123.123.123.123', 1204238157, 'SLAVE', NULL, 'internal');

-- --------------------------------------------------------

--
-- Tabel structuur voor tabel `records`
--

CREATE TABLE IF NOT EXISTS `records` (
`id` int(11) NOT NULL auto_increment,
`domain_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`type` varchar(6) NOT NULL,
`content` varchar(255) NOT NULL,
`ttl` int(11) NOT NULL,
`prio` int(11) default NULL,
`change_date` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `name_index` (`name`),
KEY `nametype_index` (`name`,`type`),
KEY `domainid_index` (`domain_id`),
KEY `rec_name_index` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Gegevens worden uitgevoerd voor tabel `records`
--

INSERT INTO `records` (`id`, `domain_id`, `name`, `type`, `content`, `ttl`, `prio`, `change_date`) VALUES
(1, 1, 'test.nl', 'SOA', 'voorbeeld.idatahosting.nl. hostmaster.idatahosting.nl. 7 900 600 86400 3600', 3600, 0, NULL),
(2, 1, 'test.nl', 'NS', 'naamserver1.idatahosting.nl', 3600, 0, NULL),
(3, 1, 'test.nl', 'NS', 'naamserver2.idatahosting.nl', 3600, 0, NULL),
(4, 1, 'test.nl', 'MX', 'www', 3600, 10, NULL);

-- --------------------------------------------------------

--
-- Tabel structuur voor tabel `supermasters`
--

CREATE TABLE IF NOT EXISTS `supermasters` (
`ip` varchar(25) NOT NULL,
`nameserver` varchar(255) NOT NULL,
`account` varchar(40) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Gegevens worden uitgevoerd voor tabel `supermasters`
--

INSERT INTO `supermasters` (`ip`, `nameserver`, `account`) VALUES
('123.123.123.123', 'master.domeinnaam.tld', 'internal');


On the primary nameserver:

Edit named:
Joe /etc/named.conf

And add the lines:
allow-transfer { 192.168.0.0/24; 123.123.123.123; IP van de PowerDNS Slaaf;
notify yes;
also-notify {IP van de PowerDNS Slaaf;};


Note:
Windows 2003 has a problem when replicating with PowerDNS, and thus records like A and CNAME are not replicated, only SOA, NS and MX records!
There's a workaround for this problem, somewhere....



P.S. Garantie tot aan de deur :D

Paul Z.
15/07/08, 17:03
Een opmerking; Aangezien je knip en plakkers gaat krijgen die dit proberen te gebruiken voor een install, moet je eigenlijk even de hoofdletters van de commando's wijzigen in kleine letters... "Joe" of "Yum" gaan niet echt werken denk ik ;) .
Voor de rest denk ik dat het goed bruikbaar is voor anderen...

pierce
15/07/08, 17:16
Een opmerking; Aangezien je knip en plakkers gaat krijgen die dit proberen te gebruiken voor een install, moet je eigenlijk even de hoofdletters van de commando's wijzigen in kleine letters... "Joe" of "Yum" gaan niet echt werken denk ik ;) .
Voor de rest denk ik dat het goed bruikbaar is voor anderen...

Ik kan het niet meer wijzigen, bovendien kan een beetje eigen inzet geen kwaad...

Straks kunnen we overal inloggen met Changemenow! of yourrootsqlpassword :D

gjtje
15/07/08, 18:15
Waarom phpmyadmin? Kunnen sysadmins tegenwoordig niet meer 2 regels sql in een console typen?

De workaround is trouwens de hele check op out-of-zone data er uitslopen en hercompileren.

pierce
15/07/08, 18:59
Waarom phpmyadmin? Kunnen sysadmins tegenwoordig niet meer 2 regels sql in een console typen?

De workaround is trouwens de hele check op out-of-zone data er uitslopen en hercompileren.

Volgens mij is 90% van de beheerders niet eens bekend met sql...
Maar los van dat is het natuurlijk gewoon gemakzucht, bovendien is dit een handleiding gemaakt van het betere knip en plak werk.

host3000
16/07/08, 16:52
En vergeet de betreffende backend niet:

pdns-backend-geo
pdns-backend-ldap
pdns-backend-mysql
pdns-backend-pipe
pdns-backend-postgresql
pdns-backend-sqlite
pdns-recursor
postgresql-libs

PowerSp00n
16/07/08, 21:03
Waarom phpmyadmin? Kunnen sysadmins tegenwoordig niet meer 2 regels sql in een console typen?

Waarom voorkauwen als je mag verwachten van iemand die echt een master/slave setup maakt(nodig heeft) toch wel enige kennis mag hebben danwel goed genoeg is om dit zelf uit te zoeken? :)

Dion Wales
16/07/08, 21:49
Ik zie dat pierce een yum phpmyadmin geeft, echter ik draai centos 5.2 en yum zegt dat hij hem niet kent. Ligt dit aan mij en wat is er aan te doen? Verder is het duidelijk.

IT-worX
16/07/08, 22:14
wat zegt yum search phpmyadmin oid?

Dion Wales
17/07/08, 01:18
wat zegt yum search phpmyadmin oid?

Iets in de trant van dat er geen package is gevonden. Net zoals met cacti, zou ook via yum moeten kunnen, werkt hier ook niet, met search vind hij ook niets. Het is een testbak en ik wil deze howto daar op toepassen. Ik kan voor het yum gebeuren nergens een oplossing vinden.

eXtreme Service
21/11/09, 17:31
Iemand een idee hoe ik het volgende probleem kan oplossen :

Unable to find backend willing to host test.be for potential supermaster ....

Het gaat om een DirectAdmin server met meerdere resellers met hun eigen nameserver gegevens. Nadeel is dat de PowerDNS (secundaire DNS) alle domeinen gaat ophalen van het IP van de eerste nameserver maar dan ook de domeinen zal ophalen van de resellers en vervolgens bovenstaande error opwerpen omdat hij het eerste IP niet zal terug vinden in de DNS records van de resellers. Ip en nameserver van de reseller opgeven als supermaster is blijkbaar ook de oplossing niet.

pid
22/11/09, 03:44
Ip en nameserver van de reseller opgeven als supermaster is blijkbaar ook de oplossing niet.

Geef eens de nameserver kan de klant op (vb: ns1.jouklant.nl) met het HOOFD ip van de server...? IP-aliassen van je klant zelf werkt niet, want je nameservers sturen de pakketjes uit vanaf het server IP.

eXtreme Service
22/11/09, 05:07
Geef eens de nameserver kan de klant op (vb: ns1.jouklant.nl) met het HOOFD ip van de server...? IP-aliassen van je klant zelf werkt niet, want je nameservers sturen de pakketjes uit vanaf het server IP.

:lovewht: Bedankt!

DiedX
22/11/09, 12:58
Afgezien van Joe vs joe (joe vs vi gaan we maar niet aan ;)): de tabellen maak je pas aan *NADAT* je 'm gestart hebt... Ik kan me niet voorstellen dat PowerDNS werkt zonder tabellen (eerlijk is eerlijk: ik heb het niet getest).

Mikey
22/11/09, 13:00
Ik kan me niet voorstellen dat PowerDNS werkt zonder tabellen (eerlijk is eerlijk: ik heb het niet getest).

als er geen database is, stopt hij vanzelf :)

DiedX
24/11/09, 12:36
Precies. Maar dan zit dat ook fout in de HOWTO. Aan TS, even bot: goede poging, maar verbeter de bovenstaande punten even.

pierce
24/11/09, 14:44
Precies. Maar dan zit dat ook fout in de HOWTO. Aan TS, even bot: goede poging, maar verbeter de bovenstaande punten even.

Zoals ik eerder al heb geschreven:


Garantie tot aan de deur


Ik kan het niet meer wijzigen, bovendien kan een beetje eigen inzet geen kwaad...

Stank voor dank.... ?

Mikey
25/11/09, 12:45
De patch voor de windows dns servers is hier te vinden:
http://wiki.powerdns.com/trac/changeset/1048