Установка вторичного DNS сервера NSD на Centos 7

On 19/05/2015, in Linux, by Алексей Волобуев

Понадобилось установить вторичный сервер DNS. Решил установить NSD 4.x . Как это сделать, читаем далее

Установку буду производить на Centos 7 в минимальной первоначальной установке. Репозитория с готовым пакетом я не нашел, поэтому ставить буду с исходником. Для этого с сайта компании NLnet Labs качаю исходники. в директорию /tmp. Распаковываю и захожу в директорию с исходниками и устанавливаю.

./configure
checking for gcc… no
checking for cc… no
checking for cl.exe… no
configure: error: in `/tmp/nsd/nsd-4.1.2′:
configure: error: no acceptable C compiler found in $PATH
See `config.log’ for more details

 

Получаю ошибки. Выяснилось, что требуется установка дополнительных пакетов gcc, libevent-devel, openssl-devel.

# yum -y install gcc

# yum -y install libevent-devel

# yum -y install openssl-devel

 

После этого процесс установки прошел без проблем

# ./configure

# make

# make install

 

Заходим в директорию, копируем образец конфигурационного файла и редактируем его.

# cd /etc/nsd

# cp nsd.conf.sample nsd.conf

# nano /etc/nsd/nsd.conf

Ниже только изменение в этом файле, отличного от образца:

server:
ip-address: 0.0.0.0
do-ip4: yes
do-ip6: no
port: 53
verbosity: 2
username: nsd
logfile: «/var/log/nsd.log»
pidfile: «/var/run/nsd/nsd.pid»

remote-control:
control-enable: yes
control-interface: 127.0.0.1

zone:
name: «example.com»
zonefile: «/etc/nsd/slave/db.example.com»
allow-notify: XX.YY.ZZ.NN NOKEY
allow-notify: 127.0.0.1 NOKEY
request-xfr: XX.YY.ZZ.NN NOKEY

IP XX.YY.ZZ — адрес Master сервера DNS. У меня это BIND. Настройки на мастер сервере для этой зоны следующие:

// example.com
zone «example.com» {
type master;
file «/etc/namedb/master/example.com»;
allow-transfer { 12.34.56.78; };
also-notify { 12.34.56.78; };
notify yes;
};

IP 12.34.56.78 — адрес slave (вторичного) сервера NSD.
Создаем папку для хранения зоны в текстовом формате

# mkdir -p /etc/nsd/slave

Создаем пользователя nsd и группу для него

groupadd -g 5252 nsd
useradd -M -d /etc/nsd -s /sbin/nologin -g nsd -u 5252 nsd

Даем права пользователю NSD для папки

chown -R nsd:nsd /etc/nsd

Формируем ключи для утилиты управления:

# nsd-control-setup
setup in directory /etc/nsd
generating nsd_server.key
Generating RSA private key, 3072 bit long modulus
….
Setup success. Certificates created. Enable in nsd.conf file to use

После этого проверяем

# nsd-control status
error: connect (127.0.0.1@8952): Connection refused
nsd is stopped

Отлично управление есть, но днс сервер пока не запущен.

Создаем папку для PID файла и дадим права пользователю NSD

# mkdir -p /var/run/nsd/
# chown -R nsd:nsd /var/run/nsd/

Запускаем

# /usr/local/sbin/nsd-control -c /etc/nsd/nsd.conf status
error: connect (127.0.0.1@8952): Connection refused
nsd is stopped

Получаем ошибку

Лезем в логи

tail -f /var/log/nsd.log
[2015-05-19 15:56:39.842] nsd[11670]: error: unable to open the database /var/db/nsd/nsd.db: Permission denied
[2015-05-19 15:56:39.843] nsd[11670]: error: server preparation failed, nsd could not be started

Забыли дать права

# chown -R nsd:nsd /var/db/nsd/

Стартуем, смотрим логи

tail -f /var/log/nsd.log

nsd[11726]: notice: nsd started (NSD 4.1.2), pid 11725
[2015-05-19 16:02:05.208] nsd[11725]: info: xfrd: zone example.com committed «received update to serial 2015051502 at 2015-05-19T16:02:05 from XX.YY.ZZ.NN»
[2015-05-19 16:02:05.209] nsd[11726]: info: zone example.com. received update to serial 2015051502 at 2015-05-19T16:02:05 from XX.YY.ZZ.NN of 198 bytes in 0.000185 seconds
[2015-05-19 16:02:05.212] nsd[11725]: info: zone example.com serial 0 is updated to 2015051502.

Создаем скрипт запуска. Заходим в /etc/systemd/system/ . Создаем файл nsd.service со следующим содержимым:

# nano /etc/systemd/system/nsd.service

[Unit]
Description=NSD DNS Server
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/var/run/nsd/nsd.pid
ExecStartPre=/usr/bin/mkdir -p /var/run/nsd/
ExecStartPre=/usr/bin/chown -R nsd:nsd /var/run/nsd/
ExecStart=/usr/local/sbin/nsd-control -c /etc/nsd/nsd.conf start
ExecReload=/usr/local/sbin/nsd-control -c /etc/nsd/nsd.conf write
ExecReload=/usr/local/sbin/nsd-control -c /etc/nsd/nsd.conf reconfig
ExecStop=/usr/local/sbin/nsd-control -c /etc/nsd/nsd.conf write
ExecStop=/usr/local/sbin/nsd-control -c /etc/nsd/nsd.conf stop
ExecStopPost=/usr/bin/rm -rf /var/run/nsd

[Install]
WantedBy=multi-user.target

Проверяем работу

# systemctl status nsd
nsd.service — NSD DNS Server
Loaded: loaded (/etc/systemd/system/nsd.service; disabled)
Active: inactive (dead)

Включаем данный сервис

# systemctl enable nsd
ln -s ‘/etc/systemd/system/nsd.service’ ‘/etc/systemd/system/multi-user.target.wants/nsd.service’

Для проверки можно перезагрузить сервер

systemctl reboot

 

Ссылки, которые мне помогли:

 

Tagged with:  

6 Responses to Установка вторичного DNS сервера NSD на Centos 7

  1. Phil:

    Только в nsd.service
    Type=forked
    иначе фига а не работа

  2. Phil:

    Type=forking конечно

  3. Виктор:

    Алексей, вы всё как в каменном веке живёте. configure, make, make install надо забыть как страшный сон уже давно, если вы работаете с дистрибутивом на пакетом менеджере. Лучше возьмите .src.rpm пакет из CentOS6 и соберите его под CentOS 7, а затем и поставьте. Намного быстрее и грамотнее!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *