2008-12-15

Настройка DHCP+DDNS сервера

Неделю (даже больше) бился над настройкой связки DHCP3 и BIND9 в виртуальной машине VirtualBox. Как всегда, оказалось, что ничего существенно сложного в этой задаче нет (для текущего случая, по крайней мере), но намучался я здорово.
Итак, существуют 3 машины: us-vpn (Ubuntu Server 8.04.1), mao-vb-ud (Ubuntu Desktop 8.04) и mao-vb-winxp (Windows XP SP2). Из названий ясно, что машина под управлением Ubuntu Server будет сервером, на котором будут подняты сервисы DHCP и DNS для раздачи по локальной сети.

Приведу готовые конфиги (которые еще надо отшлифовать), а уже потом опишу свои ошибки:

/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0

/etc/resolv.conf

search sapfir.local
nameserver 127.0.0.1
nameserver 192.168.1.1

/etc/hosts (указанная строка добавляется в начало)

127.0.0.1 us-vpn us-vpn.sapfir.local localhost

/etc/dhcp3/dhcpd.conf

server-identifier 192.168.1.1;
ddns-update-style interim;
ddns-updates on;
authoritative;
log-facility local7;

option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 604800;
max-lease-time 604800;
option subnet-mask 255.255.255.0;
option domain-name "sapfir.local";
option domain-name-servers 192.168.1.1;
#ddns-domainname "sapfir.local";

key dhcp_updater {
algorithm hmac-md5;
secret hu4YF9mEvZkee+H2aW5d7Q==;
};

zone sapfir.local. {
primary 192.168.1.1;
key dhcp_updater;
}

zone 1.168.192.in-addr.arpa. {
primary 192.168.1.1;
key dhcp_updater;
}

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.5 192.168.1.10;
}

/etc/bind/rndc.key

key "rndc-key" {
algorithm hmac-md5;
secret hu4YF9mEvZkee+H2aW5d7Q==;
};


/etc/bind/named.conf

key dhcp_updater {
algorithm hmac-md5;
secret hu4YF9mEvZkee+H2aW5d7Q==;
};

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";

// prime the server with knowledge of the root servers

zone "." {
type hint;
file "/etc/bind/db.root";
};

zone "localhost" {
type master;
file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};

/etc/bind/named.conf.local

controls { inet 127.0.0.1 allow { any; } keys { dhcp_updater; }; };

zone "sapfir.local" {
type master;
file "/var/cache/bind/db.sapfir.local";
allow-query { any; };
allow-update { key dhcp_updater; };
};

zone "1.168.192.in-addr.arpa" {
type master;
file "/var/cache/bind/db.192.168.1";
allow-query { any; };
allow-update { key dhcp_updater; };
};

logging {
channel query.log {
file "query.log";
severity debug 3;
};
category queries { query.log; };
};

/etc/bind/named.conf.options

options {
directory "/var/cache/bind";
notify yes;
query-source address * port 53;
recursion yes;
version "REFUSED";
listen-on port 53 { 127.0.0.1; 192.168.1.0/24; };
auth-nxdomain no;
allow-recursion { 127.0.0.1; 192.168.1.0/24; };
allow-query { 127.0.0.1; 192.168.1.0/24; };
};

/var/cache/bind/db.sapfir.local

$ORIGIN .
$TTL 300 ; 5 minutes
sapfir.local IN SOA us-vpn.sapfir.local. root.sapfir.local. (
200806364 ; serial
300 ; refresh (5 minutes)
300 ; retry (5 minutes)
300 ; expire (5 minutes)
300 ; minimum (5 minutes)
)
NS ns.sapfir.local.
A 192.168.1.1
$ORIGIN sapfir.local.
$TTL 302400 ; 3 days 12 hours
mao-vb-ud A 192.168.1.9
TXT "00e7329a66f4b06b3121faaaba5275e0e3"
mao-vb-winxp A 192.168.1.10
TXT "31c9024a383ab7fb34307c70b546a1dac9"
$TTL 300 ; 5 minutes
us-vpn A 192.168.1.1

/var/cache/bind/db.192.168.1

$ORIGIN .
$TTL 86400 ; 1 day
1.168.192.in-addr.arpa IN SOA ns.sapfir.local. root.sapfir.local. (
200806355 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
2419200 ; expire (4 weeks)
86400 ; minimum (1 day)
)
NS ns.
$ORIGIN 1.168.192.in-addr.arpa.
1 PTR us-vpn.sapfir.local.
$TTL 302400 ; 3 days 12 hours
10 PTR mao-vb-winxp.sapfir.local.
8 PTR mao-ws002.sapfir.local.
9 PTR mao-vb-ud.sapfir.local.

Типичные ошибки:
1. Сервер не входит в какую-либо сеть.
Проблема у меня возникла в конце пути. когда я вроде бы настроил все правильно, на сервере все работает, соответствие адреса и имени выводится, а на локальных машинах глухо. Т.е. командой dig @192.168.1.1 us-vpn.sapfir.local сервер вроде found, но получить с него информацию нельзя. Оказалось, в пылу борьбы с DHCP/DNS я неправильно выставил маску подсети в /etc/network/interfaces - вместо 255.255.255.0 было 255.255.255.255. Т.е. сервер не входил в какую-либо сеть;
2. На успешный запуск DNS-сервера влияет даже пропущенная точка или другой знак.
Причем определить, где ошибка, не представляется возможным. Такое случалось не раз, и я грешил на неправильные настройки, а все дело было в неверном написании;
3. В разных источниках описание настройки приводится по разному.
В основном в инете пишется про настройку на FreeBSD, и в меньшей степени на GNU/Linux. И если во FreeBSD все более-менее стандартно, то настройка на Linux варьируется. Так что лучший метод - вводить опции по одной и смотреть на реакцию системы. Прошло удачно - двигаемся дальше;

Комментариев нет: