DNS+DHCP сервер на Ubuntu
Все установки пакетов и редактирование файлов конфигурации производятся с правами суперпользователя.
| 0 1 2 3 | sudo su | 
Права суперпользователя действуют до следующей перезагрузки.
1. Начальные настройки сети.
Диапазон: 192.168.0.1/255.255.255.0
Диапазон DHCP: 192.168.0.101 — 192.168.0.199
Основной шлюз: 192.168.0.1
Внешние DNS-сервера: 8.8.8.8, 8.8.4.4, 204.194.232.200, 204.194.234.200
Имя нашего сервера: ns1
Статический IP-адрес сервера: 192.168.0.2
Имя домена: team.local
2. Установка bind9 и dhcp3-server
Команды для установки:
| 0 1 2 3 4 | apt-get install bind9 apt-get install dhcp3-server | 
3. Создание секретного ключа
После установки этих пакетов создаём секретный ключ, который понадобиться для обновления DNS-записей в зоне нашей локальной сети.
| 0 1 2 3 | dnssec-keygen -a HMAC-MD5 -b 128 -r /dev/urandom -n USER DHCP_UPDATER | 
После завершения команды в текущем каталоге появятся два файла один с расширением  .key , другой  .private .
В тексте этих файлов содержится секретный ключ вида:
| 0 1 2 3 | mdgG4pTKI9sqqXUCAicNcA== | 
Он нам и понадобиться в дальнейшем.
4. Настройка сетевого соединения со статическим IP
Внесите изменения в файл /etc/network/interfaces. Статический, жестко прописанный адрес, необходим хотя бы для того, чтобы сервис dhcp стартовал при перезапуске сервера. Иначе, не увидев поднятых интерфейсов во время перезапуска, dhcp не запустится.
| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | auto lo iface lo inet loopback auto eth0 iface eth0 inet static         address 192.168.0.2         #hwaddress ether 00:01:2e:2c:d6:70         netmask 255.255.255.0         network 192.168.0.0         broadcast 192.168.0.255         gateway 192.168.0.1         dns-nameservers 192.168.0.2 # The secondary network interface #auto wlan1 #iface wlan1 inet static #        address 192.168.0.12 #        #hwaddress ether 00:25:d3:f0:c2:92 #        netmask 255.255.255.0 #        gateway 192.168.0.1 | 
Адрес DNS сервера можно задать в файле /etc/network/interfaces , но вообще управление адресами DNS серверов в Ubuntu осуществляется через файл /etc/resolv.conf. Важно не забыть его поправить. Он должен иметь вид:
| 0 1 2 3 4 5 |         domain team.local         search team.local         nameserver 127.0.0.1 | 
Перезапускаем службу networking
| 0 1 2 3 | /etc/init.d/networking restart | 
5. Настраиваем BIND9
Файлы конфигурации лежат в каталоге: /etc/bind
Нам нужно отредактировать два файла: named.conf.options и named.conf.local
Правим named.conf.options:
| 0 1 2 3 4 5 6 7 8 9 10 11 12 |         forwarders {                 8.8.8.8;                 8.8.4.4;                 204.194.232.200;                 204.194.234.200;         };         listen-on {                 127.0.0.1;                 192.168.0.2;         }; | 
Этим мы указываем серверу куда передавать неизвестные нам имена «на опознание» и по каким адресам «слушать» DNS-запросы клиентов нашей сети.
Файл named.conf.local правится далее по тексту.
6. Создание прямой и обратной зоны для сети
Создаём файлы прямой и обратной зоны для нашей локальной сети.
Файлы наших локальных зон должны лежать в директории: /var/lib/bind.
Если поместить эти файлы в папку /etc/bind, где уже лежат файлы описания корневых зон,то обновление записей для локальных зон производиться не будет, так-как локальная группа [bind] по умолчанию не имеет права на запись в эту директорию.
Итак, в папке /var/lib/bind создаём файл для прямой зоны, назовём его например: forward.bind. Файл используется DNS-сервером для преобразования имени компьютеров локальной сети в ip-адрес.
forward.bind
| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | $TTL 86400      ;       1 day team.local.    IN      SOA      ns1.team.local. admin.team.local. (                                 20110103        ; Serial                                 10800           ; Refresh                                 3600            ; Retry                                 604800          ; Expire                                 86400           ; Minimum TTL                         ) ; DNS Servers                 IN      NS      ns1.team.local. ; MX Records                 IN      A       192.168.0.2 ; Machine Names localhost       IN      A       127.0.0.1 ns1             IN      A       192.168.0.2 gw              IN      A       192.168.0.1 ; Различные клиенты сети eagle           IN      A       192.168.0.12 storage         IN      A       192.168.0.13 media           IN      A       192.168.0.14 crow            IN      A       192.168.0.200 HP              IN      A       192.168.0.211 ; Aliases www             IN      CNAME   @ | 
В последних строчках содержаться записи о серверах и устройствах нашей локальной сети, имеющих статические адреса, но впрочем обязательно нужно прописать только DNS-сервер. Заранее скажу, что аккуратно оформлять все не обязательно т.к. сервис DHCP все равно все перестроит.
Создаём файл для обратной зоны, назовём его : reverse.bind. Файл используется DNS-сервером для преобразования ip-адреса компьютеров локальной сети  в доменное имя.
reverse.bind
| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $TTL 86400      ;       1 day 0.168.192.in-addr.arpa. IN SOA ns1.team.local. admin.team.local. (                         20110104        ; Serial                         10800           ; Refresh                         3600            ; Retry                         604800          ; Expire                         3600 )          ; Minimum         IN      NS      ns1.team.local. 1       IN      PTR     gw.team.local. 2       IN      PTR     team.local. 2       IN      PTR     ns1.team.local. ; Различные клиенты сети 12      IN      PTR     eagle.team.local. 13      IN      PTR     storage.team.local. 14      IN      PTR     media.team.local. 200     IN      PTR     crow.team.local. 211     IN      PTR     HP.team.local. | 
Последние строки, так-же содержат данные о серверах и устройствах нашей локальной сети, для которых выделены статические адреса.
7. Правка name.conf.local
Возвращаемся в директорию /etc/bind и правим файл name.conf.local
name.conf.local
| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | key DHCP_UPDATER {         algorithm HMAC-MD5.SIG-ALG.REG.INT;         secret mdgG4pTKI9sqqXUCAicNcA== ; }; zone "team.local" IN {         type master;         file "/var/lib/bind/forward.bind";         allow-update { key DHCP_UPDATER; }; }; zone "0.168.192.in-addr.arpa" IN {         type master;         file "/var/lib/bind/reverse.bind";         allow-update { key DHCP_UPDATER; }; }; | 
Вот здесь нам и понадобился созданный ранее секретный ключ
На этом настройка DNS-сервера закончена, можно перезагрузить BIND.
| 0 1 2 3 | /etc/init.d/bind9 restart | 
Если при перезагрузки bind9 не ругается — проверяем работу нашего DNS-сервера:
| 0 1 2 3 | dig ns1 | 
В ответ получаем:
| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ; <<>> DiG 9.7.1-P2 <<>> ns1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 34684 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;ns1.   IN   A ;; AUTHORITY SECTION: .   1121  IN  SOA  a.root-servers.net. nstld.verisign-grs.com. 2011022001 1800 900 604800 86400 ;; Query time: 96 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Feb 21 13:57:30 2011 ;; MSG SIZE  rcvd: 96 | 
Далее проверим как наш сервер преобразует своё локальное имя:
| 0 1 2 3 | host ns1 | 
В ответ должны получить:
| 0 1 2 3 | ns1.team.local has address 192.168.0.2 | 
Если что-то не так проверяем фаил forward.bind Проверим обратное преобразование:
| 0 1 2 3 | host 192.168.0.2 | 
В ответ получаем нечто такое:
| 0 1 2 3 4 | 2.0.168.192.in-addr.arpa domain name pointer ns1.team.local. 2.0.168.192.in-addr.arpa domain name pointer team.local. | 
Соответственно если доменное имя сервера не определилось, проверяем файл reverse.bind. Ну и все проблемы будут отражены в логе системы /var/log/syslog.
8. Настройки DHCP сервера
Теперь dhcp3-server именуется в ubuntu isc-dhcp-server, поэтому обратите внимание на название папок и файлов.
Приступаем к настройке. Нам нужен фаил: dhcpd.conf который лежит в /etc/dhcp
На самом деле все из него можно удалить и заменить примерно таким содержимым:
| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ddns-update-style interim; authoritative; log-facility local7; key DHCP_UPDATER { algorithm hmac-md5; secret "mBSiYpTKI9sqqXUCAicNcA=="; } zone team.local. { primary 127.0.0.1; key DHCP_UPDATER; } zone 0.168.192.in-addr.arpa. { primary 127.0.0.1; key DHCP_UPDATER; } subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.101 192.168.0.199; option domain-name "team.local"; option domain-name-servers 192.168.0.2; option routers 192.168.0.1; option broadcast-address 192.168.0.255; default-lease-time 43200; max-lease-time 86400; } | 
Вот где нам ещё раз понадобился секретный ключ, который мы создавали.
Далее добавлены строки для раздачи адресов и параметров сети клиентам нашего DHCP-сервера:
Если в локальной сети есть сетевой принтер или сетевое многофункциональное устройство, по опыту работы их желательно сажать на статические адреса или сервер DHCP может выдавать им постоянные ip-адрес зарезервированный под них из выделенного диапазона. Для этого необходимо знать их сетевые имена и MAC-адрес.
Добавляем в файл dhcpd.conf строку к примеру для компьютера crow:
| 0 1 2 3 4 5 6 | host crow { hardware ethernet 00:17:31:8f:98:2a; fixed-address 192.168.0.200; } | 
Эти имена также необходимо прописывать в файлы forward.bind и reverse.bind, как и для статических адресов.
9. Настройка IP адреса DHCP сервера
Не забудьте указать сетевую карту сервера, с которой он будет раздавать клиентам ip-адреса. Файл где прописывается интерфейс DHCP-сервера в Ubuntu/Debian лежит в: /etc/default/isc-dhcp-server
Там нужно указать сетевой интерфейс, в нашем случае: eth0
| 0 1 2 3 | INTERFACES="eth0" | 
10. Перезапускаем, проверяем.
Перезапускаем наш DHCP-сервер.
| 0 1 2 3 | /etc/init.d/isc-dhcp-server restart | 
Если при перезагрузке никто не ругается, то можно включать клиентские компьютеры.
При правильной работе в директории /var/lib/bind должны появиться файлы:
forward.bind.jnl  и reverse.bind.jnl а в файлах  forward.bind и reverse.bind появиться строчка с ip-адресом и именем клиентского.
В директории /var/lib/dhcp появиться файл: dhcpd.leases с параметрами ip клиента. Для проверки с Windows-клиента можно дать команду из командной строки:
| 0 1 2 3 | tracert ns1 | 
В ответ должна пойти трассировка до ns1.team.local[192.168.0.2]
Также, обратите внимание, что если прописать в Windows «Основной DNS-суффикс этого компьютера» (Это по кнопке «Дополнительно» в окне «Изменение имени компьютера» — в нашем случае «team.local»), то прямая зона обновляться не будет, ругаясь на ошибку авторизации. Обратная будет обновляться. Как это побороть — не знаю. Проще не прописывать суффикс.
Ну вот и вся настройка. При редактировании файлов конфигурации будьте внимательны, из-за одного пропущенного или лишнего символа, можно потерять пол дня.
11. Итог
После настройки всего будут изменены файлы:
/etc/network/interfaces
/etc/bind/named.conf.local
/etc/bind/named.conf.options
/etc/resolv.conf
/var/lib/bind/forward.bind
/var/lib/bind/reverse.bind
/etc/dhcp/dhcpd.conf
/etc/default/isc-dhcp-server
...
Неправленый мной оригинал статьи: http://fgh151.blog.ru/97522339.html
