Instalacja PowerDNS, zamiennik bind9

Najwięcej trudności w momencie jak się podepnie serwer do sieci jest z utrzymanie jego IP (no, chyba, że mam stałe). W moim przypadku IP mam zmienne, z bardzo małą częstotliwością – raz na kilka miesięcy właściwie. Tak, czy siak nie mogłem tego wykluczyć przy konfiguracji serwera.

Serwer nie będzie przecież tylko pod jakąś grę, tylko w większości jego zastosowaniem będzie hosting stron internetowych. W gruncie rzeczy kiedyś sobie pomyślałem, że po co płacić te ponad 1xx zł rocznie za hosting, kiedy sam mogę sobie go zapewnić na znacznie lepszych warunkach.
Samo podpięcie domeny jest banalnie proste – wystarczy u rejestratora przekierować ją na Nasze IP, w apache ustawić VirtualHost i tyle.

Co jeśli nagle zmieni się Nam IP? Wtedy musimy zmieniać przekierowania na poprawny adres IP… i tak dla kilkunastu zaparkowanych domen. Mi by się nie chciało :P

Dlatego istnieje takie dobrodziejstwo jak PowerDNS który jest rewelacyjnym odpowiednikiem najbardziej popularnego bind9.

Dzięki PowerDNS/bind9 możemy:

  • utworzyć swoje własne NameServery, np: ns1.blueman.pl, ns2.blueman.pl,
  • nie musimy zmieniać w panelu rejestratora domeny IP – wystarczy, że zrobimy to na serwerze,
  • mamy dostępny szereg innych funkcji – możemy podpiąć się pod Google Apps, dzięki modyfikacji rekordów MX,
  • możemy delegować konkretne subdomeny na całkiem inny, serwer,

Większość osób korzysta z bind9, ja jednak zdecydowałem się na PowerDNS, który polecony został przez mojego znajomego – malu123 (Dziękuję ci bardzo!). Dla mnie najważniejszym rzeczami, które zaważyły na tej decyzji są:

  • łatwość zmiany IP – jak zmieni mi się IP to jednym UPDATE do bazy danych MySQL zmienię wpisy w kilkunastu domenach.
  • Nie muszę grzebać w plikach – wszystko wykonuję dzięki dodatkowemu oprogramowaniu PowerAdmin który działa przez przeglądarkę www. Mimo, że mniej przejrzyste to jest, to jednak ogólnie wygodniejsze (chociaż to i tak kwestia gustu i przyzwyczajenia)
  • mniejsze zużycie RAM – nie wiem o ile, bo nie monitorowałem tego. Znajomy (malu123) mi powiedział, że tak jest, więc mu ufam :)

Są to chyba wystarczające argumenty przemawiające za użycie PowerDNS. Podobno także przy dziesiątkach domen ten system jest znacznie bardziej sprawniejszy, niż popularny bind9.

1. Instalacja PowerDNS

apt-get install pdns-server pdns-backend-mysql

Oczywiście musimy mieć zainstalowaną wcześniej bazę danych MySQL. Jeśli mamy inną (postgresql, sqlite) to musimy pobrać inne, odpowiednie dla Naszego systemu paczki.

2. Konfiguracja PowerDNS
Oficjalna dokumentacja nie jest szczegółowa, ale jednak warto mieć ją pod ręką.
Cała konfiguracja skupia się na jednym pliku /etc/powerdns/pdns.conf. W którym najpierw dopisujemy

launch=bind

aby przetestować poprawną instalację pdns. Upewniamy się, że pdns jest wyłączony, a następnie wpisujemy /etc/init.d/pdns monitor
Jeśli bez żadnych błędów poprawnie się uruchomi, to zaliczyliśmy pierwszy sukces :] Wpisujemy QUIT w konsoli monitora.

Kolejnym krokiem jest podpięcie się do backendu – czyli do jakiejś bazy danych. W moim przypadku jest to MySQL.
W pdns.conf wy-haszowujemy poprzednią testową wartość i dodajemy nowe linijki:

launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=pdns
gmysql-dbname=pdnsbind

, gdzie pdns to nazwa użytkownika bazy danych, a pdnsbind sama nazwa bazy. Użytkownik ten musi mieć prawa SELECT, INSERT, UPDATE, DELETE, CREATE i NIE może posiadać hasła !
No i oczywiście sama struktura bazy:

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;

Jeśli wszystko jest wporządku, to uruchamiając /etc/init.d/pdns monitor powinniśmy otrzymać coś w stylu:

# /etc/init.d/pdns monitor
(…)
15:31:30 PowerDNS 1.99.0 (Mar 12 2002, 15:00:28) starting up
15:31:30 About to create 3 backend threads
15:39:55 [gMySQLbackend] MySQL connection succeeded
15:39:55 [gMySQLbackend] MySQL connection succeeded
15:39:55 [gMySQLbackend] MySQL connection succeeded

I tyle :] cała konfiguracja PowerDNS została zakończona :] Uruchamiamy poprzez /etc/init.d/pdns start

3. Instalacja PowerAdmin
Cały proces instalacji został opisany na stronie głównej projektu https://www.poweradmin.org/trac/wiki/Documentation/Install ja nie miałem z nim żadnych problemów, więc nie będę go jeszcze raz opisywać. Myślę, że dacie radę :]

Teraz logując się do PowerAdmin wszystkie operacja na strefach wykonujemy z poziomu przeglądarki. Bardzo, ale to bardzo wygodne narzędzie jest to wg. mnie :)

4. Podsumowanie
Teraz mamy w pełni działający serwer DNS. Możemy dodawać, usuwać domeny do woli.
Co prawda pierwszy odczyt rekordów z danej domeny trochę dłużej trwa, ale potem już jest szybciej.