1.Предисловие В большинство компаний (фирм, контор), есть наверняка ДНС Сервера Обычно это MS DNS на Windows 2000/2003 server или BIND на UNIX систем, У меня как раз стоял BIND, и на внутреннем и наружном сервере, Потом я увидел вот это
http://www.opennet.ru/opennews/art.shtml?num=16872 Думаю все хватит пора переходит на что то новое и не глучное. Я давно присматривался на PowerDNS. Думаю сойдет, тем более что это уязвимость ее не коснулась. По мозговав не много пошарил по мануалу, и оказал не плохая вещь, то что надо
И так что мы имеем 2 сервака, внутренний и наружный, оба на FreeBSD 6.2 у обоих поднять BIND ISC 9.3 a. Внутренний – на нем крутится ISC DHCP+DDNS, его пока трогать не будем.
b. Наружный он у меня играет в роли мастера, на нем завидены три мастер домена, и один слейв
ОС FreeBSD 6.2. amd64 MySQL 5.0.41 BIND ISC 9.3 Apache/2.2.4 (FreeBSD) mod_ssl/2.2.4 OpenSSL/0.9.8e DAV/2 PHP/5.2.2 with Suhosin-Patch и куча другого софта типа: SQUID, Postfix, Dovecot, OpenWebmail, ProFTP Два сетевых интерфейса em1 – 10.10.10.5 (внешний) em0 – 192.168.0.254 (внутренний)
2. Установка Power DNS Установка из портов
сd /usr/ports/dns/powerdns
make install clean
Я выбрал MYSQL, т.к. он был уже поднять, на нем крутятся POSTFIX, SPAMASSISGN, ProFTP,
3. Установка Power DNS recursor Он мне нужен для того чтобы все неизвестные запросы переадресовывал на другие сервера в инете (внешние), если вам это не надо можете не ставит, но он лишнем не будет
сd /usr/ports/dns/powerdns-recursor
make install clean
4. Создаем БД
cd /usr/local/share/examples/powerdns/
mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6965
Server version: 5.0.41 FreeBSD port: mysql-server-5.0.41
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE DATABASE IF NOT EXISTS powerdns;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE,
mysql> DROP, INDEX, ALTER on ' powerdns '.* to
mysql> powerdns @localhost IDENTIFIED BY ' powerdns ';
mysql> use powerdns;
mysql> \. tables-mysql.sql
5. Конфигурируем PowerDNS Добавляем следующие строки в #/usr/local/etc/pdns/pdns.conf
# Разрешить передачу с …
allow-axfr-ips=0.0.0.0/0
#Разрешить запросы с..
allow-recursion=0.0.0.0/0
# cache-ttl Seconds to store packets in the PacketCache
cache-ttl=20
# Папка с конфигом
config-dir=/usr/local/etc
# Отключаем control-console, режим откладки
control-console=no
# Отключаем daemon
daemon=no
# Указываем наш сервер
default-soa-name=ns1.domain1.net
# default-ttl Seconds a result is valid if not set otherwise
default-ttl=3600
# Отключаем guardian
guardian=no
# Запускаем и настр. модуль Mysql
launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-user=powerdns
gmysql-dbname=powerdns
gmysql-password=powerpass
# Указываем какие ИП слушать
# если вы не используете recursor то можно
# поставить 0.0.0.0 (все интерфейсы)
local-address=10.10.10.5, 192.168.0.254
# IPv6 я не использую, по этому не ставлю
# local-ipv6=
# Порт который надо слушать
local-port=53
# Логим все
logfile=/var/log/pdns/pdns.log
loglevel=9
# Включаем подержу Master, он же у нас мастер
master=yes
# max-queue-length Maximum queuelength before considering
# situation lost
max-queue-length=5000
# Макс. кол-во подключении TCP соед.
max-tcp-connections=10
# Указываем на наш Recursor,
# если вы не ставили PowerDNS-Recursor, то пропускаем
recursor=127.0.0.1
# Не забудьте создать Юзера pdns принадлежащий группе pdns
setgid=pdns
setuid=pdns
# Включаем подержу slave, у нас есть один slave домен
slave=yes
slave-cycle-interval=600
# smtpredirector Our smtpredir MX host
smtpredirector=
# soa-expire-default Default SOA expire
soa-expire-default=604800
# soa-minimum-ttl Default SOA mininum ttl
soa-minimum-ttl=3600
# soa-refresh-default Default SOA refresh
soa-refresh-default=10800
# soa-retry-default Default SOA retry
soa-retry-default=3600
# soa-serial-offset Make sure that no SOA serial is
# less than this number
soa-serial-offset=0
# socket-dir Where the controlsocket will live
socket-dir=/var/run
# use-logfile Use a log file
use-logfile=yes
# Показываем версию POWERDNS в пакетах - full, anonymous,
# powerdns or custom
version-string=powerdns
# Включаем ВЕБ сервер для мониторинга
webserver=yes
# ИП каторую надо слушать я указал на локальную сеть
webserver-address=192.168.0.254
# Пасс на веб сервер он мне не нужен
# webserver-password=
# Порт на веб сервер, смотрите чтобы он не был занять
# другой ПО, например
# Apache
webserver-port=8081
webserver-print-arguments=yes
################################
6. Конфигурируем я PowerDNS-Recursor Добавляем следующие строки в #/usr/local/etc/pdns/recursor.conf
172.16.0.0/12, ::1/128, fe80::/10
# Указываем Hint файл, его можно взять из BIND
# /var/named/etc/namedb /named.root,
# или скачать ftp://ftp.rs.internic.net/domain/root.zone.gz
hint-file=/usr/local/etc/pdns/root.zone
# Адрес который надо слушать указываем только 127.0.0.1,
# и нечего лишнего
local-address=127.0.0.1
# Порт который надо слушать, по умолчанию 53
local-port=53
max-tcp-clients=128
# Не забудьте создать Юзера pdns_recursor принадлежащий группе pdns
setgid=pdns
setuid=pdns_recursor
socket-dir=/var/run/
version-string=PowerDNS Recursor 3.1.7 $Id: pdns_recursor.cc
12002008-06-1421:11:33Z ahu $
7. Импорт зон из BIND Теперь на вытянуть все записи из BIND
mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6965
Server version: 5.0.41 FreeBSD port: mysql-server-5.0.41
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use powerdns;
mysql> \. domains.sql
8. Запуск
При первом запуске я заметил после PDNS, ни что не запускается Тогда я создал свой скрипт для запуска, только сильно не пенайти, создал как мог.
Starting PowerDNS server ns1# Aug 01 12:54:10 This is module gmysqlbackend.so reporting Aug 01 12:54:10 This is a standalone pdns Aug 01 12:54:10 UDP server bound to 10.10.10.5:53 Aug 01 12:54:10 UDP server bound to 192.168.0.254:53 Aug 01 12:54:10 TCP server bound to 10.10.10.5:53 Aug 01 12:54:10 TCP server bound to 192.168.0.254:53 Aug 01 12:54:10 PowerDNS 2.9.21 (C) 2001-2006 PowerDNS.COM BV (Jul 24 2008, 19:18:54, gcc 3.4.6 [FreeBSD] 20060305) starting up Aug 01 12:54:10 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free softwar e, and you are welcome to redistribute it according to the terms of the GPL vers ion 2. Aug 01 12:54:10 Set effective group id to 1007 Aug 01 12:54:10 Set effective user id to 1007 Aug 01 12:54:10 DNS Proxy launched, local port 26807, remote 127.0.0.1:5353 Aug 01 12:54:10 Creating backend connection for TCP Aug 01 12:54:10 Master/slave communicator launching Aug 01 12:54:10 Launched webserver on 192.168.0.254:8081 Aug 01 12:54:10 Fatal error in control listener: Guardian exited - going down as well Aug 01 12:54:10 gmysql Connection succesful Aug 01 12:54:10 About to create 3 backend threads for UDP Aug 01 12:54:10 gmysql Connection succesful Aug 01 12:54:10 gmysql Connection succesful Aug 01 12:54:10 All slave domains are fresh Aug 01 12:54:10 No master domains need notifications Aug 01 12:54:11 gmysql Connection succesful Aug 01 12:54:11 gmysql Connection succesful Aug 01 12:54:11 Done launching threads, ready to distribute questions
Вроде ОК
Пробуем запустить PowerDNS-recursor
ns1# /usr/local/etc/rc.d/pdns-recursor start
Starting pdns_recursor. Aug 01 12:57:02 PowerDNS recursor 3.1.7 (C) 2001-2008 PowerDNS.COM BV (Jul 24 20 08, 19:22:16, gcc 3.4.6 [FreeBSD] 20060305) starting up Aug 01 12:57:02 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free softwar e, and you are welcome to redistribute it according to the terms of the GPL vers ion 2. Aug 01 12:57:02 Operating in 64 bits mode Aug 01 12:57:02 Reading random entropy from '/dev/urandom' Aug 01 12:57:02 Only allowing queries 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 Aug 01 12:57:02 Will not send queries to: 127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/1 6, 172.16.0.0/12, ::1/128, fe80::/10 Aug 01 12:57:02 Inserting rfc 1918 private space zones Aug 01 12:57:02 Listening for UDP queries on 127.0.0.1:5353 Aug 01 12:57:02 Not decreasing socket buffer size from 65535 to 65000 Aug 01 12:57:02 Listening for TCP queries on 127.0.0.1:5353 Aug 01 12:57:02 Done priming cache with root hints Aug 01 12:57:02 Calling daemonize, going to background
Вроде ОК
9. Веб-морда Для Power-DNS есть куча Морд вот они - PDNS Admin (http://freshmeat.net/projects/pdns-admin/) - PowerAdmin (http://www.poweradmin.org/) - PowerDNS Administration (http://sourceforge.net/projects/powerdnsadmin/) - TUPA (http://www.tupa-dns.org/) - WebDNS (http://freshmeat.net/projects/webdns/) - ZoneAdmin (http://freshmeat.net/projects/zoneadmin/)
откровенно говоря, я опробовал все, но не все работали, может руки корявые думаю у вас лучше получится…
Больше всего мне понравился PowerAdmin
можно ставит из порта
cd /usr/ports/dns/poweradmin
make install clean
или сделать как я Качаем файл poweradmin-2.1.1.tgz (на данный момент последняя версия была Poweradmin 2.1.1, не забываем посмотреть посвежее) http://freebsd.3dn.ru/введите_адрес пока качается устанавливаем необходимые проги а нам нужно Apache 1.3 или 2.0 и выше expat libiconv libxml2 mysql-client-5.0 gettext pear-1.5 pear-DB-1.7 pear-MDB2 pear-MDB2_Driver_mysql perl-5.8.8 php5 php5-mysql php5-pcre php5-xml pkg-config
это есть в портах, все это уже стояла у меня, тем более тут ничего сложного нету так что я не буду зацикливатся на этом.
теперь распакавыем poweradmin-2.1.0.tgz, ну например в /usr/local/www/data, тут разницы нет куда, если честно я распаковал в другую папку, на моем серваке есть отдельная страница АДМИНА, но не важно идем дальше
tar –zxf poweradmin-2.1.0.tgz –C /usr/local/www/data
идем в папку /usr/local/www/data/poweradmin-2.1.0
для начало сливаем MYSQL в базу powerdns, следующий файлик poweradmin-mysql-db-structure.sql, он находится в папке docs
Затем идем в папку inc (предварительно делаем chmod –R 0777)
cp config-me.inc.php config.inc.php
и добавляем следующие строки poweradmin-2.1.0/inc/config.inc.php
Alias /poweradmin/ /usr/local/www/data/poweradmin-2.1.0/
<Directory "/usr/local/www/data/poweradmin-2.1.0/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
P.S. Во время импорта зон из BIND, все зоны не зависимо от slave или master, они переводится в режим "native", надо в MySQL в базе powerdns, таблица domains, в графе type, по менять значения native на slave или master, или можно еще проще в PowerAdmin в List zones, в графе type, по менять значения native на slave или master. P.S. На этом я не останавливаюсь у меня же есть внутренний сервер, вот сейчас в активном поиске альтернативном DHCP Сервера работающий с MYSQL, будем пробовать прикручивать PDNS+DHCP. P.S. Данная статья и актуальная и для PGSQL.