Zpět na seznam článků     Číst komentáře (9)     Verze pro tisk

Bind9 - DNS server ve spojeni s mysql databazi

Autor: Tecquilka   
18.6.2006

DNS server Bind ve spojeni s databazi MySQL. Velmi vyhodne z pohledu spravy, kdyz mate vsechny sve zonove zaznamy v MySQL databazi ...


Potrebne balicky:
"libmysql14-devel"
(pripadne novejsi "libmysql15-devel")
Balicek libmysql14-devel obsahuje hlavickove souboru
a knihovny,take obsahuje program "mysql_config",
pomoci ktereho zjistim dostupne parametry a flagy,
ktere pouziji pri uprave zdrojovych kodu
(mandriva: "urpmi mysql-devel")

Potrebne soubory:
"bind9.3.2"
Stazene z www.isc.org, jedna se o verzi, kterou jsem pouzil ja.
"mysql-bind-0.1"
Stazene z http://sourceforge.net/projects/mysql-bind/
+Nainstalovane MySQL


[Bind+MySQL]: Uvedu postup jak zakomponovat do systemu Bind, spolu s podporou sdb MySQL driveru, ktere mi umozni pristupovat k zonovym zaznamum ulozenym v MySQL databazi. Tento postup by mel fungovat na libovolne distribuci, mozna s drobnymi rozdily. Zacneme stazenim zdrojovych kodu programu bind (www.isc.org). Verze kterou jsem stahl ja je "bind9.3.2". Zdrojove kody stahneme napr. do adresare /root a rozbalime. Dale rozbalime balicek mysql-bind-0.1. V adresari, ktery nam rozbalenim vynikl, je popsan postup k zakomponovani mysql ovladace do programu bind README. Vse zacina zkopirovanim zdrojoveho kodu driveru (mysqldb.c) a hlavickoveho souboru (mysqldb.h) do zdrojovych kodu programu bind. Soubor "mysqldb.c" zkopirujete do bind-9.3.2/bin/named a "mysqldb.h" prekopirujete do bind-9.3.2/bin/named/include. Po prekopirovani musite driver pridat zmenou zdrojovych kodu v souboru "Makefile.in" ("bind-9.3.2/bin/named/Makefile.in") Zde zmenim tyto zaznamy:

DBDRIVER_OBJS =
DBDRIVER_SRCS =
DBDRIVER_INCLUDES =
DBDRIVER_LIBS =

na toto:
DBDRIVER_OBJS =mysqldb.@O@
DBDRIVER_SRCS =mysqldb.c

"DBDRIVER_INCLUDES =" je potreba modifikovat take, vypadat by mel nejak takto: "DBDRIVER_INCLUDES =-I'/usr/include/mysql'", avsak muze (a nejspis bude) obsahovat rozdilne prepinace. Tyto prepinace ziskam pouzitim programu "mysql_config", ktery se nam dostava v balicku "mysql-devel" (uvedl jsem jej jiz na zacatku v potrebnych baliccich). Pro ziskani spravnych nastaveni pro prepinace pouziji program mysql_config v teto syntaxi: "mysql_config --cflags". Cely vystup pouzijeme jako parametr, takze vysledne nastaveni na mem pocitaci vypada takto:

"-I/usr/include/mysql -pipe -Wp,-D_FORTIFY_SOURCE=2 -fomit-frame-pointer -march=i586 -mtune=pentiumpro -fno-omit-frame-pointer"

Toto pouziji jako parametr takze polozka dbdriver_include bude ve vysledku vypadat takto:

"DBDRIVER_INCLUDES =-I'/usr/include/mysql' -pipe -Wp,-D_FORTIFY_SOURCE=2 -fomit-frame-pointer -march=i586 -mtune=pentiumpro -fno-omit-frame-pointer"

Posledni modifikaci v souboru Makefile.in je modifikace polozky "DBDRIVER_LIBS =" ktera obsahuje take parametry. Tyto parametry opet ziskam pomoci programu mysql_config v zapisu: "mysql_config --libs" Vracene parametry pouziji i zde, stejne jako u predechoyiho prikladu:

"DBDRIVER_LIBS =-L'/usr/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto"

Posledni fazi je úprava souboru main.c ("bind-9.3.2/bin/named/main.c"). Otevrete tento soubor k úprave a pridate tento radek: "#include "mysqldb.h", timto si zpristupnite hlavickovy soubor s funkcemi. Je dost pravdepodobne, ze Vam toto nebude fungovat, jelikoz je nutne zadat absolutni cestu (#include "/root/bind-9.3.2/bin/named/include/mysqldb.h") jinak by byl tento soubor hledan v aktualnim adresari s "main.c".

V main.c si najdete funkci "setup()" a v ni radek, ktery obsahuje volani funkce "ns_server_create();" Pred tento radek (toto volani) vlozite radek "mysqldb_init();"

Poslednim krokem v uprave mainu je nalezeni funkce "clean()", ktera ve vsem tele obsahuje funkci "ns_server_destroy();". Za ni (resp. na radek pod ni) pridate funkci "mysqldb_clear();" Zmeny ulozite a provedete kompilaci:

./configure
make
make install

V pripade dobre provedene kompilace by soubor named mel byt ulozen v adresari "/usr/local/sbin/named". Konfiguracni soubor je ukrzty v "/etc/named.conf"

[Konfigurace s vyuzitim mysql databaze]: Vse zacina úpravou souboru "/etc/named/conf", ktery obsahuje polozku options. Zde nastavite adresar, ve kzerem se bude pracovat (volba "directory "/adresar";). Dale nastavite forward, zajisti cachovani zaznamu, na DNS servery. Dalsi nastaveni se tyka nastaveni samotnych zon. Nebudu zde uvadet jednotlive nastaveni, ktere lze zjistit na adrese "http://www.csd.uwo.ca/staff/magi/doc/bind9/". Jedine co uvedu je priklad zony "savvy.cz", ktera bude mit zonove zaznamy v mysql databazi:

zone "savvy.cz" {
type master;
database "mysqldb databaze_dns savvy localhost franta_uzivatel tajne_heslo";
//retezec "mysqldb" nemenit, ale vydel jsem i moznost pouziti jen mysql, bohuzel nefunguje
};


MySQL databaze by mela obsahovat databazi pojmenovanou napr. "databaze_dns" a obsahovat tabulky pro jednotlive zony. Zde je syntaxe na vytvoreni tabulky "savvy", tuto syntaxi pouziji i pri vytvareni dalsich zaznamu:

CREATE TABLE savvy (
name varchar(255) default NULL,
ttl int(11) default NULL,
rdtype varchar(255) default NULL,
rdata varchar(255) default NULL
) TYPE=MyISAM;

Vkladani do tabulky:

INSERT INTO mydomain VALUES ('savvy.cz', 259200, 'SOA', 'savvy.cz. www.savvy.cz. 200309181 28800 7200 86400 28800');
INSERT INTO mydomain VALUES ('savvy.cz', 259200, 'NS', 'ns1.savvy.cz.');
INSERT INTO mydomain VALUES ('savvy.cz', 259200, 'Cname', 'ns1.savvy.cz.');
INSERT INTO mydomain VALUES ('ns1.savvy.cz', 259200, 'A', '192.168.1.1');
INSERT INTO mydomain VALUES ('mail.savvy.cz', 259200, 'A', '192.168.1.2');
INSERT INTO mydomain VALUES ('savvy.cz', 259200, 'MX', '10 mail.savvy.cz.');
apod.

Dulezite je zadavat jmeno a ttl, jelikoz neni mozne pouzit $ORIGIN ani $TTL. Doporuceni: "pri vztvareni tabulek nenastavujte hodnotu ttl na null, ale nejakou smysluplnou hodnotu (muze se stat ze zapomenete zadat hodnotu).

[Ma konfigurace]: /* /etc/named.conf */
options {
directory "/var/named";
pid-file "/var/run/named.pid";
/* Kvuli cachovani musi byt forward, jinak necachuje */
forward first;
forwarders {
217.11.224.1;
217.11.224.2;
};
};

zone "." {
type hint;
file "root.cache";
};

zone "savvy.cz" {
type master;
database "mysqldb dns savvy localhost root 123789";
};

zone "1.168.192.in-addr.arpa" {
type master;
database "mysqldb dns arpa localhost root 123789";
};


/* vypis z databaze pro zonu savvy.cz*/

+-----------------+------+--------+----------------------------------------------------+
| name            | ttl  | rdtype | rdata                                              |
+-----------------+------+--------+----------------------------------------------------+
| savvy.cz        | 3600 | SOA    | ns1.savvy.cz. root.savvy.cz. 20060602 2H 30M 1W 2H |
| savvy.cz        | 3600 | NS     | ns1.savvy.cz.                                      |
| savvy.cz        | 3600 | NS     | ns2.savvy.cz.                                      |
| ns1.savvy.cz    | 3600 | A      | 217.11.224.1                                       |
| ns2.savvy.cz    | 3600 | A      | 217.11.224.2                                       |
| savvy.cz        | 3600 | MX     | 10 mail.savvy.cz.                                  |
| mail.savvy.cz   | 3600 | A      | 192.168.1.3                                        |
| mail2.savvy.cz  | 3600 | Cname  | mail.savvy.cz.                                     |
| brana.savvy.cz  | 3600 | A      | 192.168.1.1                                        |
+-----------------+------+--------+----------------------------------------------------+

/* vypis z databaze pro reverzni zonu */
+----------------------------+------+--------+------------------------------------------------------------+
| name                       | ttl  | rdtype | rdata                                                      |
+----------------------------+------+--------+------------------------------------------------------------+
| 1.168.192.in-addr.arpa     | 3600 | SOA    | localhost. root.localhost. 20060602 28800 7200 86400 28800 |
| 1.1.168.192.in-addr.arpa   | 3600 | PTR    | brana.savvy.cz.                                            |
| 1.168.192.in-addr.arpa     | 3600 | NS     | ns1.savvy.cz.                                              |
| 3.1.168.192.in-addr.arpa   | 3600 | PTR    | mail.savvy.cz.                                             |
+----------------------------+------+--------+------------------------------------------------------------+

Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 1.87/15

1  2  3  4  5    
(známkování jako ve škole)