Страница 1 из 1

PowerDNS установка, настройка, эксплуатация

Добавлено: 28 окт 2015, 16:06
RomA
Задача:
Поднять DNS сервер для компании. Сервер должен отвечать быстро и желательно иметь наглядную статистику использования.

Выбор продукта:
Для работы было решено выбрать продукт PowerDNS, как довольно таки продвинутый сервер.

Установка и первоначальная настройка:
Сервер делится на две части - одна отвечает за разрешение имен - так сказать повернута к людям - по сути это и есть сам ДНС, а вторая отвечает за добывание имен с внешних серверов. Таким образом, если вы хотите, что бы сервер держал вашу локальную зону - вам будет нужна только первая часть, а если вы ходите что бы с этого сервера пользователи вашей сети получали данные - вам нужны обе части.
Ставится это все просто - идем в порты и устанавливаем. на вопросы отвечаем по вкусу - отмечу что вам надо выбрать БД, с которой будет работать ваш сервер - я выбрал MySQL, потому что он у меня уже стоял на сервере. Ставим локальный ДНС сервер:

Код: Выделить всё

# cd /usr/ports/dns/powerdns
# make install clean
Сразу поставим и резольвер:

Код: Выделить всё

# cd /usr/ports/dns/powerdns-recursor
# make install clean
Настройка резольвера:
Настраивать начнем со второго, но сначала условимся, что резальвер будет висеть на локалхосте и внешнему миру виден не будет, а ДНС будет висеть на внешнем ИП сервера и будет отслуживать все запросы.
Открываем файл /usr/local/etc/pdns/recursor.conf и правим на свой вкус. я только прописал сеть, с которой буду получать ДНС запросы

Код: Выделить всё

allow-from=127.0.0.1/32
Пропишем в /etc/rc.conf

Код: Выделить всё

pdns_enable="YES"
pdns_recursor_enable="YES"
Ну и запускаем

Код: Выделить всё

/usr/local/etc/rc.d/pdns-recursor start
Можно попробовать выполнить запрос:

Код: Выделить всё

 # host www.ya.ru 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 

www.ya.ru is an alias for ya.ru.
ya.ru has address 213.180.193.3
ya.ru has address 93.158.134.3
ya.ru has address 213.180.204.3
ya.ru has IPv6 address 2a02:6b8::3
ya.ru mail is handled by 10 mx.yandex.ru.
Как видно - сервер нам ответил, значит стоит и свою работу делает. Двигаемся дальше.

Настройка DNS:
Теперь настроим сам сервер - открываем файл /usr/local/etc/pdns/pdns.conf и правим. я Использовал следующие настройки

Код: Выделить всё

allow-axfr-ips=127.0.0.0/8,192.168.1.146/32
daemon=yes
default-soa-name=ns2.belaya-ptica.ru
disable-axfr=yes
experimental-json-interface=yes
experimental-logfile=/var/log/pdns/pdns.log
local-address=192.168.1.1
recursor=127.0.0.1
slave=yes
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081
launch=gmysql
gmysql-socket=/tmp/mysql.sock
gmysql-user=powerdns
gmysql-dbname=powerdns
gmysql-password=P@$$w0rd
Немного по конфигу - я описал с каких ИП будет приниматься запрос, Указал ИП сервера, где ДНС будет слушать запросы к нему и сказал что работать мы будем с MsSQL
Файл сохраняем. Теперь надо найти файл базы данных - мне удалось его найти в дистрибутиве, откуда он и был извлечен. Файл назывался schema.mysql.sql - ложим его в понравившуюся директорию, переходим туда и идем в скуль, где создадим базу данных и пользователя, а затем загрузим туда данные из файлика

Код: Выделить всё

# mysql -uroot
mysql> CREATE DATABASE powerdns CHARACTER SET UTF8;
mysql> GRANT ALL PRIVILEGES ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'P@$$w0rd' WITH GRANT OPTION;
mysql> \. schema.mysql.sql
Если все прошло хорошо, то запускаем сервер

Код: Выделить всё

# /usr/local/etc/rc.d/pdns start
после чего опять же проверяем, отвечает он на запросы или нет

Код: Выделить всё

# host www.ya.ru 192.168.1.1
Using domain server:
Name: 192.168.1.1
Address: 192.168.1.1#53
Aliases: 

www.ya.ru is an alias for ya.ru.
ya.ru has address 93.158.134.3
ya.ru has address 213.180.193.3
ya.ru has address 213.180.204.3
ya.ru has IPv6 address 2a02:6b8::3
ya.ru mail is handled by 10 mx.yandex.ru.
Отвечает. Это хорошо. Можно сказать что сервер мы настроили:-)

Теперь было бы не плохо обзавестись логами - просто по умолчанию все логи будут кидать в messages. Идём в /etc/syslog.conf и вписываем такие строки

Код: Выделить всё

!pdns
*.*      /var/log/pdns/pdns.log
!pdns_recursor
*.*      /var/log/pdns/pdns_recursor.log
Теперь надо создать каталоги и файлики логов

Код: Выделить всё

#mkdir /var/log/pdns
#touch /var/log/pdns/pdns.log
#touch /var/log/pdns/pdns_recursor.log
Теперь перестартуем сервис

Код: Выделить всё

/etc/rc.d/syslogd reload
Новые сообщения должны начать писаться в соответствующие файлики

Сразу настроим ротацию логов - в файлик /etc/newsyslog.conf добавляем

Код: Выделить всё

/var/log/pdns/*.log			644  7	   *	@T00  GJC
Теперь надо перестартавать службы

Код: Выделить всё

/etc/rc.d/syslogd restart
/etc/rc.d/newsyslog restart
Литература:
http://www.lissyara.su/articles/freebsd ... /powerdns/

PowerDNS - добавление зон

Добавлено: 28 окт 2015, 17:26
RomA
Задача:
Есть контролер домена и он держит зону компании. Выше мы поставили сервер ДНС, который хорошо работает, но ничего не знает о нашей локальной зоне. Надо исправить этот недостаток.

Решение:
Наш новый ДНС будет слейвом держать зону компании. Выше из конфига видно, что он уже включен в режиме слейва, а сейчас мы просто сделаем необходимые настройки.
Идем в базу данных и выполняем следующий запрос:

Код: Выделить всё

mysql> INSERT INTO domains (name, master, type) VALUES ('kyrsk-agro.ru', '192.168.1.2', 'SLAVE');
Query OK, 1 row affected (0.00 sec)
Где:
kyrsk-agro.ru - домен
192.168.1.2 - ИП текущего ДНС сервера
SLAVE - мастер или слейв зона

После того, как я выполнил данную команду мой ДНС сразу стал резольвить зону. О том, как это проверить в этой ветке уже говорилось.

Еще есть такое понятие - как супермастер, добавить опять же можно запросом

Код: Выделить всё

insert into supermasters values ('192.168.1.2', 'ns.kursk-agro.ru', 'master');

PowerDNS установка вебморды управления

Добавлено: 28 окт 2015, 17:29
RomA
Введение:
Управлять с командной строки интересно, но не всегда эффективно. Вообще альтернатива должна быть всегда, поэтому будем ставить альтернативу :-)

Решение:
Скачиваем дистрибутив

Код: Выделить всё

git clone https://github.com/poweradmin/poweradmin.git
кладёте это туда, где ваш веб сервер увидит эту папку и даем правильные права

Код: Выделить всё

# chown -R www:www poweradmin
Теперь надо поставить нужные модули php - мне понадобились

Код: Выделить всё

/usr/ports/security/php56-mcrypt
/usr/ports/databases/php56-pdo_mysql
Остальное, наверное, уже стояло, или было не нужно :-)
Пропишем в конфиг апача наш новый каналог

Код: Выделить всё

   Alias /pdnsadmin/ /usr/home/www/poweradmin/

    <Directory "/usr/home/www/poweradmin/">
        Options Indexes FollowSymlinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
после чего перезагружаем апачь

Код: Выделить всё

# /usr/local/etc/rc.d/apache24 stop
Stopping apache24.
Waiting for PIDS: 68926.
root@zabbix:/usr/local/etc/apache24/extra # /usr/local/etc/rc.d/apache24 start
И переходим по прописанному пути - в моём случае http://192.168.1.1/pdnsadmin/ - тут нас переадресовывает на страничку установки, где нам надо пройти несколько простых шагов:
1) Даем логин пароль на базу PowerDNS
2) Вебморда патчит базу
3) Даем логин пароль на базу - они хотят другой, типа с урезаными правами - наверное оно правильно, но можно дать и тот, что в шаге 1
4) Ну и пароль на пользователя
Потом надо будет удалить директорию install и под пользователем admin и паролем что мы придумали в последнем шаге, войти на вебморду

PowerDNS - Статистика

Добавлено: 29 окт 2015, 14:52
RomA
Введение:
Всегда интересно знать что же творится вокруг. Вот и у PowerDNS есть свою мордочка со статистикой его работы - очень интересно и познавательно. Всегда держать её включенным, наверное, не целесообразно, но посмотреть и проанализировать трафик ДНС - осень интересно.

Реализация:
В конфиге сервера /usr/local/etc/pdns/pdns.conf правим следующие строки

Код: Выделить всё

experimental-json-interface=yes
experimental-logfile=/var/log/pdns/pdns.log
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081
Можно тут написать внешний ИП сервера, но это потом вспоминать + у меня была еще другая причина сделать так, как сделал, так что продолжаем - идем в апачь и вставляем такое

Код: Выделить всё

   ProxyPass /powerdns/ http://127.0.0.1:8081/
   ProxyPassReverse /powerdns/ http://127.0.0.1:8081/
не забывая включить соответствующие модули
После чего можно наслаждаться вебмордой :-)

Скриншоты:
Как говорится - лучше один раз увидеть )))
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg

PowerDNS мониторинг в Zabbix

Добавлено: 30 окт 2015, 09:48
RomA

PowerDNS - закрываем соцсети и заодно рекламу

Добавлено: 28 дек 2015, 17:20
RomA
Введение:
Иногда начальство просит закрыть пользователям контакт и одноклассники, а иногда админы в целях уменьшения заражения компьютеров сами закрывают доступ пользователям к части сайтов... Ну а можно пойти дальше и закрыть всякие метрики и рекламные хосты - это и трафик будет экономить и быстрее открываться странички начнут...
Всё это звенья одной цепи - нам надо закрыть часть сайтов в интернете. Именно про это мы и поговорим.

Задача:
Создать инструмент для "закрытия" доступа к сайтам.

Решение:
Решений придумано уже много, но давайте подумаем - что происходит когда пользователь идет на сайт? Первым делом он пытается разрешить имя в IP адрес - вот тут мы его и обманем - мы ему подсунем "левый" IP, вместо правильного и он не сможет попасть на сайт. То есть закрывать ресурсы будет ДНС сервером.
Так как это происходит на первом шаге - то это отнимет минимум ресурсов, а что бы еще это всё и не загружало сеть - мы в качестве нового IP поставим localhost.

Реализация:

Для начала создадим файлик /usr/local/etc/pdns/hosts в который внесем "запрещенные сайты"

Код: Выделить всё

127.0.0.1       vk.com
127.0.0.1       ok.ru
на самом деле тут можно написать ИП вашего корпоративного сайта, и пользователь вместо ошибки будет видеть корпоративный сайт компании. Ну или страничку с предупреждение что он работать должен :-)

Нужный функционал присутствует в рекурсоре - в конфиг добавляем следующее:

Код: Выделить всё

etc-hosts-file=/usr/local/etc/pdns/hosts
export-etc-hosts=on
И перезапускаем сервис.
Теперь можно проверить - если обращаться к локальному ДНС серверу (в моём случае 192.168.1.1) то видим следующее:

Код: Выделить всё

roman@zabbix:~ % host vk.com 192.168.1.1
Using domain server:
Name: 192.168.1.1
Address: 192.168.1.1#53
Aliases: 

vk.com has address 127.0.0.1
roman@zabbix:~ % 
А вот если спросить у ДНС стороннего - он даст верный ИП

Код: Выделить всё

roman@zabbix:~ % host vk.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases: 

vk.com has address 87.240.131.97
vk.com has address 87.240.131.99
vk.com has address 87.240.143.241
vk.com has IPv6 address 2a00:bdc0:3:103:1:0:403:903
vk.com has IPv6 address 2a00:bdc0:3:103:1:0:403:904
vk.com has IPv6 address 2a00:bdc0:3:103:1:0:403:905
vk.com mail is handled by 10 mail.vk.com.
roman@zabbix:~ % 
Таким образом те, у кого будет прописан наш ДНС - не смогу зайти в контакт, а те, у кого прописан любой другой - смогут.