ГлавнаяМатериалы по FreeBSDУcтановка и настройка DNS-сервера PowerDNS

Уcтановка и настройка DNS-сервера PowerDNS

(1 Проголосовало)

powerdns  PowerDNS — представляет собой высокопроизводительный DNS-сервер, лицензируемый под лицензией GPL.

Выбор PowerDNS был обусловлен гибкой архитектурой хранения/доступа к данным, которая может получать DNS информацию с любого источника данных. Это включает в себя файлы, файлы зон BIND, реляционные БД или директории LDAP.

1. Устанавливаем:

# cd /usr/ports/dns/powerdns
# make install clean 

 небольшой диалог настройки:
alt

 Базу доменов держим в MySQL, в диалоге настройки выбираем только его.

2. Создаем БД в MySQL

CREATE DATABASE powerdns;
GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'mypass';
FLUSH PRIVILEGES;

Стоит отметить, что создание таблиц в БД из прилагаемых скриптов приводит в дальнейшем к неправильному формированию SOA, в результате чего внешние сервера видят все время одну и ту же версию зоны и не считают нужным обновляться.

После некоторой модификации, с учетом рекомендаций, получаем скрипт:

SET SESSION sql_mode='ANSI';

CREATE TABLE "domains" (
"id" INTEGER NOT NULL AUTO_INCREMENT,
"name" VARCHAR(255) NOT NULL,
"type" VARCHAR(6) NOT NULL,
"master" VARCHAR(40) NOT NULL DEFAULT '',
"account" VARCHAR(40) NOT NULL DEFAULT '',
"last_check" INTEGER DEFAULT NULL,
"notified_serial" INTEGER DEFAULT NULL,
"auto_serial" INTEGER NOT NULL DEFAULT 0,
"status" CHAR(1) NOT NULL DEFAULT 'A',
CONSTRAINT "pdns_pk_domains_id"
PRIMARY KEY ("id"),
CONSTRAINT "pdns_unq_domains_name"
UNIQUE ("name")
) type=InnoDB;

CREATE INDEX "pdns_idx_domains_status_type" ON "domains" ("status","type");



CREATE TABLE "records" (
"id" INTEGER NOT NULL AUTO_INCREMENT,
"domain_id" INTEGER NOT NULL,
"name" VARCHAR(255) NOT NULL,
"type" VARCHAR(6) NOT NULL,
"content" VARCHAR(255) NOT NULL,
"ttl" INTEGER DEFAULT NULL,
"prio" INTEGER DEFAULT NULL,
"change_date" INTEGER(11) DEFAULT NULL,
CONSTRAINT "pdns_pk_records_id"
PRIMARY KEY ("id"),
CONSTRAINT "pdns_fk_records_domainid"
FOREIGN KEY ("domain_id")
REFERENCES "domains" ("id")
ON UPDATE CASCADE
ON DELETE CASCADE
) type=InnoDB;




CREATE INDEX "pdns_idx_records_name_type" ON "records" ("name","type");
CREATE INDEX "pdns_idx_records_type" ON "records" ("type");



CREATE TABLE "supermasters" (
"ip" VARCHAR(40) NOT NULL,
"nameserver" VARCHAR(255) NOT NULL,
"account" VARCHAR(40) NOT NULL DEFAULT ''
);

CREATE INDEX "pdns_idx_smaster_ip_ns" ON "supermasters" ("ip","nameserver");



GRANT SELECT ON "supermasters" TO "powerdns";
GRANT ALL ON "domains" TO "powerdns";
GRANT ALL ON "records" TO "powerdns";



DELIMITER :

CREATE TRIGGER "pdns_trig_records_insert"
AFTER INSERT ON "records"
FOR EACH ROW BEGIN
UPDATE "domains" d SET d."auto_serial" = d."auto_serial" + 1
WHERE d."id" = NEW."domain_id";
END;:

CREATE TRIGGER "pdns_trig_records_update"
AFTER UPDATE ON "records"
FOR EACH ROW BEGIN
UPDATE "domains" d SET d."auto_serial" = d."auto_serial" + 1
WHERE d."id" = NEW."domain_id";
END;:

CREATE TRIGGER "pdns_trig_records_delete"
AFTER DELETE ON "records"
FOR EACH ROW BEGIN
UPDATE "domains" d SET d."auto_serial" = d."auto_serial" + 1
WHERE d."id" = OLD."domain_id";
END;:

DELIMITER ;

 3. Переходим к конфигурированию PowerDNS:

# Параметры MySQL
gmysql-host=localhost
gmysql-port=3306
gmysql-user=powerdns
gmysql-dbname=powerdns
gmysql-password=mypass
gmysql-socket=/tmp/mysql.sock

# Разрешаем передачу зон только для определенных хостов
allow-axfr-ips= 193.232.130.14, 194.226.96.8


# Рекурсор юзать не будем, поэтому коммент не снимаем
#allow-recursion=0.0.0.0/0


#################################
# allow-recursion-override Set this so that local data fully overrides the recursor
#
# allow-recursion-override=no

#################################
# cache-ttl Seconds to store packets in the PacketCache
#
cache-ttl=20

#################################
# chroot If set, chroot to this directory for more security
#
# chroot=

#################################
# config-dir Location of configuration directory (pdns.conf)
#
config-dir=/usr/local/etc/pdns

#################################
# config-name Name of this virtual configuration - will rename the binary image
#
# config-name=

#################################
# control-console Debugging switch - don't use
#
control-console=no

#################################
# daemon Operate as a daemon
# Переходим в фоновый режим работы
daemon=yes

#################################
# default-soa-name name to insert in the SOA record if none set in the backend
# SOA по-умолчанию
default-soa-name=ns.mydomain.ru

#################################
# default-ttl Seconds a result is valid if not set otherwise
#
default-ttl=3600

#################################
# disable-axfr Disable zonetransfers but do allow TCP queries
#
disable-axfr=no

#################################
# disable-tcp Do not listen to TCP queries
#
# disable-tcp=no

#################################
# distributor-threads Default number of Distributor (backend) threads to start
#
# distributor-threads=3

#################################
# do-ipv6-additional-processing Do AAAA additional processing
#
# do-ipv6-additional-processing=no

#################################
# fancy-records Process URL and MBOXFW records
#
# fancy-records=no

#################################
# guardian Run within a guardian process
#
guardian=no

#################################
# launch Which backends to launch and order to query them in
#
launch=gmysql

#################################
# lazy-recursion Only recurse if question cannot be answered locally
#
# lazy-recursion=yes

#################################
# load-modules Load this module - supply absolute or relative path
#
# load-modules=

#################################
# local-address Local IP addresses to which we bind
# Интерфейс, на котором будут приниматься запросы DNS, можно несколько через запятую
local-address=172.30.30.1

#################################
# local-ipv6 Local IP address to which we bind
#
# local-ipv6=

#################################
# local-port The port on which we listen
#
local-port=53

#################################
# log-dns-details If PDNS should log DNS non-erroneous details
#
# log-dns-details=

#################################
# log-failed-updates If PDNS should log failed update requests
#
# log-failed-updates=

#################################
# logfile Logfile to use (Windows only)
# Логируем
logfile=/var/log/pdns/pdns.log

#################################
# logging-facility Log under a specific facility
#
# logging-facility=

#################################
# loglevel Amount of logging. Higher is more. Do not set below 3
#
loglevel=9

#################################
# master Act as a master
#
master=yes

#################################
# max-queue-length Maximum queuelength before considering situation lost
#
max-queue-length=5000

#################################
# max-tcp-connections Maximum number of TCP connections
#
max-tcp-connections=10

#################################
# module-dir Default directory for modules
#
# module-dir=/usr/local/lib

#################################
# negquery-cache-ttl Seconds to store packets in the PacketCache
#
# negquery-cache-ttl=60

#################################
# no-shuffle Set this to prevent random shuffling of answers - for regression testing
#
# no-shuffle=off

#################################
# out-of-zone-additional-processing Do out of zone additional processing
#
# out-of-zone-additional-processing=yes

#################################
# pipebackend-abi-version Version of the pipe backend ABI
#
# pipebackend-abi-version=1

#################################
# query-cache-ttl Seconds to store packets in the PacketCache
#
# query-cache-ttl=20

#################################
# query-local-address Source IP address for sending queries
#
# query-local-address=

#################################
# query-logging Hint backends that queries should be logged
#
# query-logging=no

#################################
# queue-limit Maximum number of milliseconds to queue a query
#
# queue-limit=1500

#################################
# recursive-cache-ttl Seconds to store packets in the PacketCache
#
# recursive-cache-ttl=10

#################################
# recursor If recursion is desired, IP address of a recursing nameserver
#
#recursor=

#################################
# send-root-referral Send out old-fashioned root-referral instead of ServFail in case of no authority
#
# send-root-referral=no

#################################
# setgid If set, change group id to this gid for more security
#
setgid=pdns

#################################
# setuid If set, change user id to this uid for more security
#
setuid=pdns

#################################
# skip-cname Do not perform CNAME indirection for each query
#
# skip-cname=no

#################################
# slave Act as a slave
#
slave=yes

#################################
# slave-cycle-interval Reschedule failed SOA serial checks once every .. seconds
#
slave-cycle-interval=600

#################################
# smtpredirector Our smtpredir MX host
#
# smtpredirector=a.misconfigured.powerdns.smtp.server

#################################
# 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

#################################
# strict-rfc-axfrs Perform strictly rfc compliant axfrs (very slow)
#
# strict-rfc-axfrs=no

#################################
# trusted-notification-proxy IP address of incoming notification proxy
#
# trusted-notification-proxy=

#################################
# urlredirector Where we send hosts to that need to be url redirected
#
# urlredirector=127.0.0.1

#################################
# use-logfile Use a log file (Windows only)
#
use-logfile=yes

#################################
# version-string PowerDNS version in packets - full, anonymous, powerdns or custom
#
version-string=powerdns

#################################
# webserver Start a webserver for monitoring
#
webserver=yes

#################################
# webserver-address IP Address of webserver to listen on
#
webserver-address=172.30.30.1

#################################
# webserver-password Password required for accessing the webserver
#
# webserver-password=

#################################
# webserver-port Port of webserver to listen on
#
webserver-port=8081

#################################
# webserver-print-arguments If the webserver should print arguments
#
#webserver-print-arguments=yes

#################################
# wildcard-url Process URL and MBOXFW records
#
# wildcard-url=no

#################################
# wildcards Honor wildcards in the database
#
# wildcards=

Следует отметить, что  PowerDNS во FreeBSD пишет свои логи в /var/log/messages. Чтоб логи писались в /var/log/pdns/pdns.log надо в /etc/syslog.conf внести следующее:

!pdns
*.* /var/log/pdns/pdns.log

и перечитать конфиг syslog'а:

 # /etc/rc.d/syslogd reload

 3. Запуск

Перед запуском добавим в /etc/rc.conf

pdns_enable="YES"

 Проверяем наличие в системе пользователя и группы pdns, создаем, если их нет.

Правим стартовый скрипт PowerDNS /usr/local/etc/rc.d/pdns до такого состояния (отличается от оригинального):

#!/bin/sh
#
# $FreeBSD: ports/dns/powerdns/files/pdns.in,v 1.5 2009/07/15 16:55:41 dougb Exp $
#

# PROVIDE: pdns_server
# REQUIRE: mysql
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable powerdns:
#
# pdns_enable="YES"
# pdns_flags=""
#
# See pdns_server(8) for flags.
#

. /etc/rc.subr

############################
pdns_uid=120
pdns_gid=120
############################

name=pdns
rcvar=`set_rcvar`

command=/usr/local/sbin/pdns_server

# set defaults

pdns_enable=${pdns_enable:-"NO"}
pdns_conf=${pdns_conf:-"/usr/local/etc/pdns/pdns.conf"}

load_rc_config ${name}

required_files=${pdns_conf}

monitor_cmd="${command} --daemon=no --guardian=no --control-console --loglevel=9"
extra_commands="monitor"

run_rc_command "$1"

 Запускаем сервер

 # /usr/local/etc/rc.d/pdns start

 И проверяем

 # netstat -an | grep 53

 Если видим

tcp4       0           0  172.30.30.1.53         *.*            LISTEN
udp4 0 0 172.30.30.1.53         *.*

 то все ОК, переходим к установке и настройке web-интерфейса PowerAdmin

PowerAdmin - web-инструмент для администрирования PowerDNS. Для его работы нужны установленные Apache и PHP.

1. Установка

# cd /usr/ports/dns/poweradmin/
# make install clean 

 alt

По-умолчанию PowerAdmin собирается с поддержкой MySQL.

Устанавливается PowerAdmin в каталог /usr/local/www/poweradmin. Теперь нужно переопределить владельца файлов PowerAdmin:

 # chown -R www:www /usr/local/www/poweradmin

 2. Настройка

Создаем недостающие в БД powedns таблицы, используя скрипт /usr/local/www/poweradmin/docs/poweradmin-mysql-db-structure.sql

Редактируем /usr/local/www/poweradmin/inc/config.inc.php:

<?php
// See <https://www.poweradmin.org/trac/wiki/Documentation/ConfigurationFile> for help.

$db_host        = "localhost";
$db_user        = "powerdns";
$db_pass        = "mypass";
$db_name        = "powerdns";
$db_type        = "mysql";

$iface_lang        = "en_EN";
$iface_style        = "example";
$iface_rowamount    = "50";
$iface_expire        = "1800";
$iface_zonelist_serial    = "1";

$dns_hostmaster        = "hostmaster.mydomain.ru";
$dns_ns1        = "ns.mydomain.ru";
$dns_ns2        = "";
$dns_ttl        = "3600";
$dns_fancy        = "false";
$dns_strict_tld_check    = "1";

?>

 Теперь настроим Apache, сделаем такой виртуальный сервер:


ServerName pdns.mydomain.ru
DocumentRoot /usr/local/www/poweradmin

Options Indexes FollowSymlinks MultiViews
AllowOverride AuthConfig

Order deny,allow
Deny from all
Allow from all


 Заходим через броузер на pdns.mydomain.ru, логин и пароль - admin, их нужно сменить сразу после первого входа.

С помощью PowerAdmin можно полностью управлять PowerDNS.

 

Secondary DNS можно настроить на одном из бесплатных ресурсов, например Everydns (правда, у меня так и не получилось там залогиниться) или Freedns, а проверить и получить информацию о DNS-серверах на IntoDNS. Неплохие инструменты для тестирования DNS (и не только) представлены на NetTools. Рекомендую также посетить страничку казахского регистратора, где можно получить достаточно полный отчет о настройках DNS для домена.

Обновлено 04.09.2011 17:13

Ваше мнение

Вы с пользой провели время на сайте?
 

Кто сейчас на сайте

Сейчас на сайте:
  • 1 гость

wolf3Волк - символ свободы и самостоятельности среди животных.

wolf1Волк - это символ бесстрашия. В любой схватке волк борется до победы или до смерти.

wolfsВолк живет семьей, ухаживает только за своей волчицей-женой и воспитывает своих детей-волчат.

Наверх