07.07.10 Динамически обновляемый ДНС сервер на базе Генту (Gentoo DDNS (BINd+DHCPd))

0.250 Предисловие

Итак, как и обещал собрал информацию и желание в один комок и напишу статью про DDNS на базе Gentoo при помощи связки DHCPd+NAMEd.
Другими словами каждый пользователь локальной сети, что получил айпи на вашем DHCP-сервере автоматом получит доменное имя состоящее из имени его компа и DNS-суффикса выданного DHCP. Необходимость такой связки зачастую продиктована отказом от виндового домена AD и перехода на SAMBA или частых проблем с виндовым DNS и как следствие отказа от WinDNS. Эта связка при UTF-8 кодировке может использоваться совместно с Windows`ой или вместо Win`довой, полностью поддерживает кириллические имена. Само собой, из соображений здравого смысла, не стоит давать кириллическое имя компьютеру, если вы собираетесь обращаться к нему через интернет, не все ДНС это поддерживают.

0.500 Имею

Как обычно имеем сервак или то, что будет заменять нам сервак, исключительно на Gentoo полностью настроенный под свои нужды и прекрасно работающий. Прямые руки is needed!

0.750 Хочу

Динамически обновляемый ДНС на операционной системе Gentoo. Что имею в виду под динамически? - каждый пользователь получивший данные на нашем DHCP-сервере автоматом обновляет свою ДНС-запись на нашем DNS-сервере. Чо хотим - понимаем, приступаем!

1. Установка необходимых пакетов

# emerge -pv bind dhcp


Вот то, как это выглядит у меня:

Calculating dependencies... done!
[ebuild   R   ] net-misc/dhcp-3.1.2_p1  USE="-doc -minimal (-selinux) -static" 0 kB
[ebuild   R   ] net-dns/bind-9.7.1  USE="berkdb ipv6 ldap mysql ssl xml -dlz -doc -geoip -gssapi -idn -odbc -postgres -resolvconf -sdb-ldap (-selinux) -threads -urandom" 0 kB


После установки пакетов обращаем внимание на сообщение системы, которая предлагает нам отредактировать файлы, находящиеся в папке /etc/conf.d/named и /etc/conf.d/dhcpd.

Смотрим, редактируем. Мне нравится данные сервисы запускать в CHROOT-окружении, поэтому раскомментирую следующую строку.

OPTIONS=""
CHROOT="/chroot/dns"
PIDFILE="${CHROOT}/var/run/named/named.pid"
NAMED_NICELEVEL="0"


Далее нам надо отконфигурировать окружение, это можно сделать автоматически, благо разработчик нам это позволяет. Запускаем следующую команду.

# emerge --config =

в моем случае это:
emerge --config '=net-dns/bind-9.7.1'


Далее по подобию редактируем /etc/conf.d/dhcpd
DHCPD_CHROOT="/chroot/dhcp"
# DHCPD_CONF="/etc/dhcp/dhcpd.conf"
# DHCPD_IFACE=""
# DHCPD_OPTS=""


Затем необходимо запустить команду, которая установит необходимые конфигурационные файлы в песочницу, здесь команда немного отличается:

# emerge dhcp --config
Configuring pkg...

 * Setting up the chroot directory ...                                                                          [ ok ]
 * To enable logging from the dhcpd server, configure your
 * logger (app-admin/syslog-ng-3.0.4) to listen on ///chroot/dhcp/dev/log


2. Настройка сервисов

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

Конфиг DNS (named) /etc/bind/named.conf

acl "ZAVOD" (10.0.0.0/8; 127.0.0.1};
key "rndc-key" {
   algorithm hmac-md5;
    secret "CnoNrAGGsAuO8fEfjPELSG75wxx3wmYmTM99ksYa3Zc=";
};
key DHCP_UPDATER {
	algorithm hmac-md5;
	secret "rdJuK9q33GvCORLY7Xm4Sw==";
};
# Небходимо подставить свои значения ключей
controls {
    inet 127.0.0.1 port 953
    allow (localhost;} keys ("rndc-key";};
};
# Откуда разрешаем управление

options {
    directory 			"/etc/namedb";
    pid-file 			"/var/run/named/pid";
    statistics-file 		"/var/stats/named.stat";
    dump-file 			"/var/dump/named.dump";
    memstatistics-file 		"/var/stats/named.mem";
    forwarders (10.0.0.3; 10.0.0.5;};
# IP-адреса ДНС для форвардинда, то где смотрим неизвестные зоны.
};
 
zone "." {
	type hint;
	file "/etc/namedb/named.root";
};
zone "0.0.127.in-addr.arpa" {
	type master;
	file "master/localhost.rev";
};
zone "zavod.local" {
	type master;
	file "/etc/namedb/master/zavod.local";
	allow-update ( key DHCP_UPDATER; };
# Очень важная строка... как раз разрешающая обновление зоны
	notify no;
};

zone "10.0.0.in-addr.arpa" {
	type master;
	file "/etc/namedb/master/10.0.0.rev";
};
# Далее параметры логирования
logging {
        channel log_default {
                file "/var/log/named-default.log" versions 5 size 50m;
                severity debug;
                print-category yes;
                print-severity yes;
                print-time yes;
                };
        channel log_resolving {
                file "/var/log/named-resolving.log" versions 5 size 50m;
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
                };
        channel log_security {
                file "/var/log/named-security.log" versions 5 size 10m;
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
                };
        channel null {
                null;
                };
        channel log_clients {
                file "/var/log/named-clients.log" versions 5 size 50m;
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
                };
        category lame-servers {
                null;
                null;
                };
        category queries {
                log_clients;
                };
        category client {
                log_default;
                };
        category unmatched {
                log_clients;
                };
        category security {
                log_security;
                };
        category default {
                log_default;
                };
};
server 10.0.0.1 {
	keys {
		DHCP_UPDATER;
		};
	};



Конфиг DHCP

option domain-name "zavod.local";
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
option ms-classless-static-routes code 249 = array of unsigned integer 8;
option ntp-servers 10.0.0.3;
default-lease-time 999999999999999999999;
# Присваиваем данные на веки вечные
max-lease-time 9999999999999999999999999;
# Присваиваем данные на веки вечные

log-facility local7;
authoritative;
ddns-updates on;
ddns-update-style ad-hoc;

#Включаем поддержку дднс обновления зон

if exists agent.circuit-id
{
    log ( info, concat(
	"SW-ID: ", suffix(option agent.circuit-id, 5),
	", Port: ", binary-to-ascii (10, 8, "", substring( option agent.circuit-id, 1, 1)))
    );
}
# Заменим значение хеша свими
key DHCP_UPDATER {
	algorithm hmac-md5;
	secret "rdJuK9q33GvCORLY7Xm4Sw==";
};

zone zavod.local {
	primary 127.0.0.1;
	key DHCP_UPDATER;
}

zone 101.10.in-addr.arpa {
	primary 127.0.0.1;
	key DHCP_UPDATER;
}

#------------------------------------------------
#Примерная настройка для оелеинга
#------------------------------------------------
#class "addpac" {
#        match if binary-to-ascii (16, 8, "", option agent.remote-id)="00:02:a4:05:18:a7";
#}
#
#subnet 192.168.10.0 netmask 255.255.255.0 {
#	range 192.168.10.2 192.168.10.230;
#        option broadcast-address 192.168.10.255;
#        option subnet-mask 255.255.255.0;
#        option routers 192.168.10.1;
#	allow members of "addpac";
#}


#================================================
#Vlan1 MANAGEMENT
#================================================
subnet 10.10.10.0 netmask 255.255.255.0 {
	option routers 10.10.10.1;
	option subnet-mask 255.255.255.0;
	option domain-name-servers 10.10.10.234;
	option broadcast-address 10.10.10.255;
	range 10.10.10.30 10.10.10.230;
}
	#========================================
	#KOMMYTATOPbI - Пример выдачи статики для девайса
	#========================================
	host bog29-1-sw {
		hardware ethernet 00:17:9a:7a:97:ac;
		fixed-address 10.10.10.2;
	}
	host ent1712-1-sw {
		hardware ethernet 00:13:46:37:38:f8;
		fixed-address 10.10.10.3;
	}
#================================================
#KAMEPbI - Пример выдачи статики для девайса
#================================================
#	office camera tral
	host camera-office {
		hardware ethernet 00:0f:a5:00:59:3d;
		fixed-address 10.101.53.250;
	}
	
#	bogolubova 15 tral
	host camera-bog15 {
		hardware ethernet 00:0f:a5:00:57:7a;
		fixed-address 10.101.1.242;
	}
#================================================
#Vlan10
#================================================
subnet 10.0.0.0 netmask 255.0.0.0 {
	range 10.0.0.20 10.0.0.230;
	option routers 10.0.0.1;
	option ms-classless-static-routes 8, 10, 10,0,0,1, 27, 62,84,107,64, 10,101,11,1, 27;
# Роутинги выдаются в следующем формате:
# Сначала маска потом название сети потом гейтвей 
# Внимание везде запятые - [u]это не ошибка!!!![/u]
# Пример: 8, 10, 10,0,0,1; - означает route add -net 10.0.0.0/8 gw 10.0.0.1
	option rfc3442-classless-static-routes 8, 10, 10,101,11,1, 27, 62,84,107,64, 10,101,11,1, 27;
	option subnet-mask 255.255.255.0;
	option domain-name-servers 10.0.0.3;
	option netbios-name-servers 10.0.0.5;
	option netbios-dd-server 10.0.0.3;
	option netbios-node-type 8;
	option broadcast-address 10.0.0.255;
}


Вот собственно и все.
{TAGS}




Вас также может заинтересовать:

22.07.10 Apache2(frontend) + Nginx(backend) на Gentoo(генту) с заточкой под liteовый highload (массхостинг)
05.05.2010 Автомонтирование USB Flash в Генту (Gentoo flash automount)
Для Gentoo создан инсталлятор на базе Anaconda
22.05.2010 Использование PackageSet в Gentoo (Или жизнь после установки Gentoo-Way)
Настройка РРТР в GENTOO консольный вариант (PPTP Gentoo-way)
Книга по Генту на GNU.SU