Настраиваем DDNS+DHCP в FreeBSD


Используем версию FreeBSD 5.5. Для начала опишу свою сеть:

•Первый интерфейс (внутренний) – rl0 {10.10.10.1};
•Второй интерфейс(внешний) – rl1 {10.10.1.184};
•DNS-сервера провайдера – {10.0.0.10; 10.0.0.1; 10.10.1.100;};
•Доменное имя - bonh.ds.tomsk.gov.ru;

Сперва ставим DNS, точнее не ставим, а настраиваем и «разрешаем», так как данный демон включён по умолчанию. Называется он named, а сама программа демона называется bind. Для облегчения понимания дальнейшего материала привожу некоторые определения из хандбука:

•Прямой запрос к DNS (forward DNS) - Преобразование имён хостов в адреса IP
•Ориджин (origin) - Обозначает домен, покрываемый конкретным файлом зоны
•named, bind, сервер имён - Общеупотребительные названия для обозначения пакета BIND, обеспечивающего работу сервера имён во FreeBSD.
•Резолвер - Системный процесс, посредством которого машина обращается к серверу имён для получения информации о зоне
•Обратный DNS (reverse DNS) - Операция, обратная прямому запросу к DNS; преобразование адресов IP в имена хостов
•Корневая зона - Начало иерархии зон Интернет. Все зоны находятся под корневой зоной, подобно тому, как все файлы располагаются ниже корневого каталога.
•Зона - Отдельный домен, поддомен или часть DNS, управляемая одним сервером.

Ну и до кучи описание зон идущих по умолчанию в /etc/namedb/named.conf (тоже взятые из handbook’a) :

•. - является корневой зоной
•org. - домен верхнего уровня (TLD) в корневой зоне.
•example.org. - является зоной в домене верхнего уровня (TLD) org..
•- 1.168.192.in-addr.arpa является зоной, в которую включены все IP-адреса, формирующие пространство адресов 192.168.1.*.

Ну что думаю можно приступать. Файлы с которыми мы будем работать: /etc/namedb/named.conf (главный файл демона named), /etc/namedb/bonh.ds.tomsk.gov.ru (файл в котором будет описана прямая зона моей, соответствие имя – IP-адрес ), /etc/namedb/10.10.10.rev (файв котором будет описан обратная зона моей сети, соответствие IP-адрес –имя хоста), /etc/namedb/localhost.rev (обратная зона локаль хоста), что бы до конца раскрыть тему в каталоге /etc/namedb также присутствует файл named.root который содержит адреса главных DNS (адреса не меняются годами) к которым наш DNS обращается что бы узнать какой либо адрес , но этот файл мы трогать не буди.
Всё план действий известен можно начинать. Топаем в /etc/namedb и говорим:

# sh make-localhost

В результате чего в каталоге /etc/namedb/master должны появиться файлы localhost.rev для локальной адресной зоны и localhost-v6.rev для для конфигурации IPv6. Делаем:

#mv –f /etc/namedb/master/* /etc/namedb

Всё можно приступать к главному действию!!! Редактировать файл /etc/namedb/named.conf. В показанном примере я оставил только нужное убрав всё лишнее:

directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats"; //указывается стандартное
//месторасположение служебных файлов/директорий

version "Вроде бы Windows WP home edition, а вообще х.з. :)";
//что демон будет отвечать на запрос о версии
forwarders {
10.0.0.10;
10.0.0.1;
10.10.1.100;
}; //В данном разделе указываются авторитетные DNS-сервера на которые
// наш сервер будет отправлять свои запросы. Я тут указал DNS’ы провайдера,
// если вам провайдер не дал оных адресов, значит этого раздела не должно быть.

query-source address * port 53; // нужен в случае наличия Firewall’а
//Для того что бы DNS ходил по определённому порту по умолчанию это порт 53

zone "." {
type hint;
file "named.root";
}; //Прописан файл в котором указаны адреса главных DNS. Взято из default’a

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
}; //файл содержащий описания обратной зоны локаль хоста. Взят из default’a
//немного подкорректирована последняя строчка

zone "bonh.ds.tomsk.gov.ru" {
type master;
file "bonh.ds.tomsk.gov.ru";
}; // Добрались до вкусненького, файл в котором будет описана моя прямая зона

zone "10.10.10.in-addr.arpa" {
type master;
file "10.10.10.rev";
}; // А тут моя обратная зона.

И так ещё раз пробежимся:

forwarders-Это должен быть разделенный точкой с запятой (не забудьте поставить последнюю точку с запятой) список серверов dns. Если ваш сервер dns не
знает ответа, он будет запрашивать эти серверы dns.

query-source address При помощи этой опции вы можете заставить сервер DNS использовать определенный порт, это очень полезно при использовании файрволла.

zone "." Это зона для доменов верхнего уровня, файл 'named.root' содержит все корневые серверы (адреса не меняются годами, так что вы можете не
редактировать этот фыйл).

zone "bonh.ds.tomsk.gov.ru" Это определяет файл, в котором сервер DNS может найти информацию одомене 'bonh.ds.tomsk.gov.ru'

zone "10.10.10.in-addr.arpa" Эта зона используется для обратных поисков (lookup) DNS. Как вы могли обратить внимание, адрес ip яаляется обратным и в нем пропущен последний номер. Это решение для проблемы 'яйца и курицы'. Откуда сервер DNS знает на каком сервере он может найти информацию, которую он ищет? Он разрешает адрес ip и опрашивает ответственный за это сервер, но как он опрашивает сервер? путем разрешения имени хоста. Вы видите, это небольшая проблема. Вот почему выбран этот метод. Я не стану углубляться в подробности, поскольку для установки сервера DNS в этом нет необходимости.

Двигаемся дальше создаём файлы зон (прямой и обратный) нашего домена:

Прямой:/etc/namedb > ee bonh.ds.tomsk.gov.ru

$TTL 86400

bonh.ds.tomsk.gov.ru. IN SOA ns.bonh.ds.tomsk.gov.ru. admin.bonh.ds.tomsk.gov.ru. (
2006240801 ; Serial (YYYYDDMM plus 2 digit serial)
86400 ; refresh (1 day)
7200 ; retry (2 hours)
8640000 ; expire (100 days)
86400) ; minimum (1 day)

IN NS ns.bonh.ds.tomsk.gov.ru.
IN MX 10 mx.bonh.ds.tomsk.gov.ru.

Localhost IN A 127.0.0.1
ns IN A 10.10.10.1
mx IN A 10.10.10.1

Заметьте, что все имена хостов, оканчивающиеся на ''.'', задают полное имя, тогда как все имена без символа ''.'' на конце считаются заданными относительно origin. Например, ns преобразуется в ns.bonh.ds.tomsk.gov.ru. В нашем воображаемом файле ориджином является bonh.ds.tomsk.gov.ru. (написано в самом начале).

Записи в DNS: SOA - начало зоны ответственности, NS - авторитативный сервер имен, A - адрес хоста, MX – почта, PTR - указатель на доменное имя (используется в обратных зонах DNS). И так что же там все-таки написано:

bonh.ds.tomsk.gov.ru. IN SOA ns.bonh.ds.tomsk.gov.ru. admin.bonh.ds.tomsk.gov.ru. (
2006082401 ; Serial (YYYYDDMM plus 2 digit serial)
86400 ; refresh (1 day)
7200 ; retry (2 hours)
8640000 ; expire (100 days)
86400)

bonh.ds.tomsk.gov.ru – доменное имя зоны
ns.bonh.ds.tomsk.gov.ru. – авторитетный сервер имён в данной зоне
admin.bonh.ds.tomsk.gov.ru. - человек, отвечающий за эту зону, адрес электронной почты с символом ''@'' замененным на точку. ( становится admin.bonh.ds.tomsk.gov.ru)
2006082401 - последовательный номер файла. При каждом изменении файла зоны это число должно увеличиваться. В настоящее время для нумерации многие администраторы предпочитают формат ггггммддвв. 2006082401 будет означать, что файл последний раз изменялся 24.08.2006, а последнее число 01 означает, что это была первая модификация файла за день. Последовательный номер важен, так как он служит для того, чтобы вторичные серверы узнавали об обновлении зоны.

IN NS ns.bonh.ds.tomsk.gov.ru.
Это NS-запись. Такие записи должны иметься для всех серверов имён, которые будут отвечать за зону.

IN MX 10 mx.bonh.ds.tomsk.gov.ru.
Это майл сервер в данной зоне число 10 означает его приоритет (например когда не один майл сервер, 10 наивысший приоритет затем идёт 20 и т.д.)

Localhost IN A 127.0.0.1
ns IN A 10.10.10.1
mx IN A 10.10.10.1

тут уже сопоставляется имя хоста IP-адресу, замете я тут только прописал свой сервер и всё, остальное пропишет DHCP и будет вносить коррективы при каждом изменении, неправда ли удобно.

Всё переходим к файлу отвечающему за обратную зону:

/etc/namedb > ee 10.10.10.rev


$TTL 86400
@ IN SOA ns bonh.ds.tomsk.gov.ru. admin. bonh.ds.tomsk.gov.ru. (
2001220200 ; Serial (date, 2 digits version)
86400 ; refresh (1 day)
7200 ; retry (2 hours)
8640000 ; expire (100 days)
86400) ; minimum (1 day)
IN NS ns. bonh.ds.tomsk.gov.ru.

1 IN PTR bonh.ds.tomsk.gov.ru.

Тут практически то же самое только как Вы уже могли заметить вместо записи A (как это было в прямой зоне) стоит запись PTRи выходит что адресу 10.10.10.1 будет соответствовать хост bonh.ds.tomsk.gov.ru. Всё сервер имён настроен «разрешаем его:

#echo `named_enable=”YES”` >> /etc/rc.conf
#echo `named_flage=”-u bind -g bind”` >> /etc/rc.conf

Разрешаем работу DNS в firewall’е добавляя следующие строки:

${fwcmd} add pass udp from any to any 53
${fwcmd} add pass udp from any 53 to any

И запускаем:

#/usr/sbin/named –u bind

Затем проверяем как он работает:

#ping www.ru

Если всё нормально двигаемся дальше, если что – то не так читаем handbook. Следующий этап устанавливаем DHCP одновременно прикручивая его к DNS. Почему то так сложилось, что во FreeBSD DHCP-сервер используется от компании ISC и называется он isc-dhcp3-server. Начнём установку DHCP с… правильно обновления портов, после обновления портов топаем /usr/ports/net/isc-dhcp3-server и говорим:

#make install clean

После чего появляется синенькое окошко, ничего там не трогаем пусть устанавливается. Когда всё установится идём в /usr/local/etc/ и делаем примерно следующие:

cp ./dhcpd.conf.sample ./dhcpd.conf

и рихтуем его под себя, хотя нет подождите у нас же не просто DNS и DHCP у нас с Вами DDNS&DHCP, а значит нам нужен секретный ключ, для общения этих двух серверов, а где еговзять?.. Ну… можно самому придумать, хотя все его генерируют, вот и мы с Вами не будим отделятся от стада (не тот это случай) и просто сгенерируем его, следующи образом:

# dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER

Посмотрим что он нам нагенерил:

# cat Kdhcp_updater.+157+46827.key
DHCP_UPDATER. IN KEY 0 2 157 key==

Ага что-то есть, ну а вот теперь то можно со спокойной совестью рихтовать конфиг, у меня получилось следующие:

# dhcpd.confsp;параметры
option domain-name "bonh.ds.tomsk.gov.ru"; // доменное имя
option domain-name-servers ns.bonh.ds.tomsk.gov.ru; // ДНС
default-lease-time 720000; //Поумолчанию на сколько
// выдаётся IP (я поставил // по больше)
max-lease-time 720000; //Максимально на сколько выдаётся IP, после чего мы
// его сами забираем
min-lease-time 720000; //Минимально на сколько выдаётся IP
authoritative; //Говорим что мы самые авторитетные 
ddns-update-style ad-hoc; // Тут мы говорим что мы ещё и DNS таблицу будем
// обновлять

key DHCP_UPDATER {
algorithm hmac-md5;
secret "key==";
}; //Тута мы вписываем вместо key== наш ключь.

zone bonh.ds.tomsk.gov.ru.{
primary 127.0.0.1;
key DHCP_UPDATER;
} //Зоны которые мы будем обновлять всё оставляем так же как и у меня, меняем
// лишь название зоны

zone 10.10.10.in-addr.arpa.{
primary 127.0.0.1;
key DHCP_UPDATER;
} //Соответствует предыдущему

log-facility local7; // логии 

// А вот и локальные параметры т.е. наша с вами, точнее моя, зона

subnet 10.10.10.0 netmask 255.255.255.0 { //сеть и её маска
range 10.10.10.2 10.10.10.250; //Диапазон адресов
option routers 10.10.10.1; //роутер
option subnet-mask 255.255.255.0; // Маска сети
option netbios-name-servers 10.10.10.1; //
option netbios-dd-server 10.10.10.1; //
option netbios-node-type 8; // Эти 3 параметра нужны при наличии самбы
option broadcast-address 10.10.10.255; // широковещательный адрес
option ntp-servers 10.0.0.10; //сервер точного времени
}

Всё, осталось только внести коррективы в /etc/namedb/named.conf, я его продублирую но уже со внесёнными в него изменениями и про комментирую их.

directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
version "Вроде бы Windows WP home edition, а вообще х.з. :)";
forwarders {
10.0.0.10;
10.0.0.1;
10.10.1.100;
}; //При включении этого раздела сервер будет автоматически опрашивать
// серверы имён которые здесь указаны, используя преимущества его кэша.
// наличия нужной информации. Если соответствующий сервер имён провайдера
//работает быстро и имеет хороший канал связи, то в результате такой настройки
//вы можете получить хороший результат.

query-source address * port 53; // нужен в случае наличия Firewall’а

key DHCP_UPDATER {
algorithm hmac-md5;
secret "key==";
}; // Тот самый key

zone "." {
type hint;
file "named.root";
};

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};

zone "bonh.ds.tomsk.gov.ru" {
type master;
file "bonh.ds.tomsk.gov.ru";
allow-update { key DHCP_UPDATER; };
notify no;
};
zone "10.10.10.in-addr.arpa" {
type master;
file "10.10.10.rev";
allow-update { key DHCP_UPDATER; };
};
logging {
channel update_debug {
file "/var/log/named-update.log";
severity debug 3;
print-category yes;
print-severity yes;
print-time yes;
};
channel security_info {
file "/var/log/named-auth.log";
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category update { update_debug; };
category security { security_info; };
};
# Эти строки вставляются для протоколирования работы сервера.
#Взято из man dhcpd.conf
# Предварительно необходимо создать файлы, которые указаны в оции file ":"

include "/etc/namedb/rndc.key";

Теперяче дописываем в /etc/rc.conf следующие строки:

dhcpd_enable=”YES”
dhcpd_conf=”/usr/local/etc/dhcpd.conf”
dhcpd_ifaces=”rl0” # на каком интерфейсе крутится DHCP

Перезапускаем DNS:

killall -1 named

и запускаем DHCP:

/usr/local/etc/rc.d/isc-dhcd -start

Если всё нормально маздайки получат нужные параметры, а в директории /etc/namedb в ближайшем будущем появятся два новых файла bonh.ds.tomsk.gov.ru.jnl и 10.10.10.rev.jnl, а сами файлы bonh.ds.tomsk.gov.ru и 10.10.10.rev будут изменены.

Вот и всё.

Литература:
http://opennet.ru
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/network-dns.html
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/network-dhcp.html
http://forum.lissyara.su/viewtopic.php?t=753
http://www.lissyara.su/?id=1138
И прочие изыскания :)))

автор: bonh
Источник http://www.lissyara.su/?id=1256

Обновлено: 12.03.2015