|
Power
DNS zwany w dalszej części tego dokumentu jako
PDNS jest zaawansowanym i bardzo efektywnym
serwerem nazw. Jego możliwości współpracy z LDAP lub bazami SQL (Mysql
i Postgresql) dają szerokie możliwości tworzenia skryptów lub
interface zarządzających. Sam PDNS jest uważany za zdecydowanie
bezpieczniejszy niż Bind, a także od niego
szybszy - zwłaszcza przy większej ilości obsługiwanych domen.
Wstęp
W tym rozdziale zostanie omówiona podstawowa
instalacja, konfiguracja z bazą
Postgresql, a także wstępna
konfiguracja przykładowej domeny. Oczywiście więcej
szczegółów możemy znaleźć w oryginalnej
dokumentacji.
Instalacja
Instalacja przebiega standardowo za pomocą poldka.
Do poprawnego działania naszej bazy potrzebujemy także
postgresql (możemy także
wykorzystać mysql lub ldap, a nawet pliki
konfiguracyjne Bind-a). Tak więc jeżeli nie mamy
Postgresql to instalujemy go i poprawnie
konfigurujemy.
Konfiguracja Postgresql dla PDNS
Następnym krokiem będzie stworzenie bazy obsługiwanej
przez PDNS w Postgresql. W tym celu możemy wykorzystać
klienta dostarczanego razem z Postgresql -
psql.
Możemy także do tego celu użyć innych wygodnych
narzędzi np. phpPgAdmin
Najpierw z konta użytkownika uprawnionego do operacji
na bazie tworzymy bazę:
$ createdb -U postgres powerdns |
Tworzymy także użytkownika dla w/w bazy:
$ createuser -P -U postgres pdns
Enter password for user "pdns":
Enter it again:
Shall the new user be allowed to create databases?
(y/n) n
Shall the new user be allowed to create more new
users? (y/n) n
CREATE USER |
Teraz za pomocą swojego ulubionego klienta Postgresql
wykonujemy poniższe polecenia SQL w celu stworzenia szkieletu
bazy:
create table domains (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
master VARCHAR(20) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL
);
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id SERIAL PRIMARY KEY,
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,
CONSTRAINT domain_exists
FOREIGN KEY(domain_id) REFERENCES domains(id)
ON DELETE CASCADE
);
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 domains_id_seq TO pdns;
GRANT ALL ON records TO pdns;
GRANT ALL ON records_id_seq TO pdns; |
Konfiguracja PDNS
W /etc/pdns/pdns.conf
konfigurujemy działanie programu PDNS. Przykładowa
konfiguracja PDNSa współpracującego z bazą Postgresql
może wyglądać następująco:
#chroot=/some/where # If set, chroot to this directory for more security
config-dir=/etc/pdns/ # Location of configuration directory (pdns.conf)
launch=gpgsql # Launch this backend
#gpgsql-socket=/var/lib/pgsql/postmaster.pid
gpgsql-dbname=powerdns # Nazwa bazy danych w psql
gpgsql-user=pdns # Użytkownik bazy w psql
gpgsql-password=hasło_do_bazy_pdns
module-dir=/usr/lib/pdns # Default directory for modules
#load-modules= # Load this module - supply absolute or relative path
#local-address=0.0.0.0 # Local IPv4 address to which we bind
#local-ipv6=:: # Local IPv6 address to which we bind
#use-logfile=no # Use a log file or syslog
#logfile=var/log/pdns.log # Logfile to use
allow-recursion=IP_ZEWN_DNS/maska,IP_ZEWN_DNS/maska # Tu podajemy adresy zewn. serwerów DNS np.
# allow-recursion=194.204.152.34/24,194.204.159.1/24
# nameserver
setgid=djbdns # If set, change group id to this gid for more security
setuid=pdns # If set, change user id to this uid for more security
#slave=no # Act as a slave (Ustawiamy na YES w przypadku
# pracy serwera PDNS jako SLAVE)
socket-dir=/var/run # Where the controlsocket will live
webserver=yes # Włączenie usługi monitorowania pracy PDNS przez WWW
webserver-address=10.1.1.1 # Adres IP strony monitorującej pracę PDNS
webserver-password=hasło_do_strony_monitorującej
webserver-port=8088 # port strony monitorującej |
Krzyżyk "#" na początku oznacza komentarz bądź wyłączenie
danej opcji. Oryginalne teksty komentarzy są na tyle czytelne,
że tylko niektóre opcje skomentowalismy po polsku.
Domeny
Praktycznie PDNS jest gotowy do pracy. Musimy jeszcze
wypełnić treścią bazę - czyli dodać domenę (domeny).
Przykładową domenę zaprezentujemy w formie tzw.
"dump-a" bazy. Jest to na tyle czytelne, że
skomentowane zostaną tylko niektóre aspekty.
--
-- PostgreSQL database dump
--
SET client_encoding = 'UNICODE';
SET check_function_bodies = false;
SET client_min_messages = warning;
SET search_path = public, pg_catalog;
--
-- Name: domains_id_seq; Type: SEQUENCE SET; Schema: public; Owner: pdns
--
SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('domains', 'id'), 1, true);
--
-- Name: records_id_seq; Type: SEQUENCE SET; Schema: public; Owner: pdns
--
SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('records', 'id'), 16, true);
--
-- Data for Name: domains; Type: TABLE DATA; Schema: public; Owner: pdns
--
INSERT INTO domains VALUES (1, 'foo.com', NULL, NULL, 'NATIVE', NULL, NULL);
INSERT INTO domains VALUES (2, '1.1.10.in-addr.arpa', NULL, NULL, 'NATIVE', NULL, NULL);
-- W pierwszym ID podajemy domenę 'foo.com'
-- W drugim ID definiujemy domenę odwrotną dla danego IP
--
-- Data for Name: records; Type: TABLE DATA; Schema: public; Owner: pdns
--
-- Poniżej zgodnie z określonymi ID definiowane są kolejno strefy
INSERT INTO records VALUES (2, 1, 'localhost.foo.com', 'A', '127.0.0.1', 120, NULL, NULL);
INSERT INTO records VALUES (3, 1, 'www.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (5, 1, 'dns.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (6, 1, 'ftp.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (7, 1, 'poczta.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (8, 1, 'pop3.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (9, 1, 'smtp.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (10, 1, 'ssh.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (11, 1, 'jabber.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (1, 1, 'foo.com', 'SOA', 'localhost user.foo.com 1', 86400, NULL, NULL);
INSERT INTO records VALUES (16, 1, 'foo.com', 'TXT', 'Serwer PDNS', 300, NULL, NULL);
INSERT INTO records VALUES (17, 1, 'foo.com', 'NS', 'ns.foo.com', 300, NULL, NULL);
INSERT INTO records VALUES (4, 1, 'mail.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (18, 1, 'foo.com', 'MX', 'mail.foo.com', 300, 5, NULL);
INSERT INTO records VALUES (19, 1, 'foo.com', 'A', '10.1.1.1', 300, 0, NULL);
-- Poniżej definiujemy rekordy SRV dla serwera Jabber
INSERT INTO records VALUES (12, 1, '_jabber._tcp.jabber.foo.com',
'SRV', '0 5269 foo.com', 300, 10, NULL);
INSERT INTO records VALUES (13, 1, '_xmpp-server._tcp.jabber.foo.com',
'SRV', '0 5269 foo.com', 300, 10, NULL);
INSERT INTO records VALUES (14, 1, '_xmpp-client._tcp.jabber.foo.com',
'SRV', '0 5222 foo.com', 300, 10, NULL);
-- Domena odwrotna
INSERT INTO records VALUES (15, 2, '1.1.1.10.in-addr.arpa', 'PTR', 'foo.com', 86400, NULL, NULL);
INSERT INTO records VALUES (20, 2, '1.1.10.in-addr.arpa',
'SOA', 'localhost root.localhost', 86400, NULL, NULL);
INSERT INTO records VALUES (21, 2, '1.1.10.in-addr.arpa', 'NS', 'nc.foo.com', 86400, NULL, NULL);
--
-- Data for Name: supermasters; Type: TABLE DATA; Schema: public; Owner: pdns
--
--
-- PostgreSQL database dump complete
-- |
Wszelkie zmiany lub dodawanie nowych domen możemy wykonywać na
bazie danych lub wykorzystując do tego odpowiednie skrypty.
Teraz możemy uruchomić demona PDNS wykorzystując skrypt:
Należy pamiętać, że jeżeli wcześniej używalismy BINDa bądź
innnego demona do obsługi nazw domenowych, należy go przed
uruchomieniem PDNS wyłączyć.
Po uruchomieniu serwisu możemy za pomocą przeglądarki http
wejść na stronę monitorującą pracę PDNS (odpowiednie opcje
dotyczące tej usługi znajdziemy w
/etc/pdns/pdns.conf). Wywołanie
zgodne z przykładowym wpisem w
pdns.conf to
http://10.1.1.1:8088.
Na stronie tej możemy odnaleźć wiele cennych informacji
dotyczących pracy naszego serwera nazw.
|
|