Документация по ОС FreeBSD Понедельник, 06.05.2024, 08:36
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

ISC-DHCP [2011]
DHCP - это расширение протокола BOOTP, который был придуман для того, чтобы бездисковые станции UNIX могли загружаться по сети. Подсистема BOOTP предоставляет клиентам IP-адреса, сетевые маски, стандартные шлюзы, а так же информацию, касающуюся начальной загрузки через TFTP. Протокол DHCP не ограничивается этими параметрами, вводя понятие аренды. Хватит пока теории - на практике любому сетевику средних и больших сетей необходима управляемая сетевая структура которая, будет динамично управляться и обновляться при необходимости. Для этого мы и используем протокол DHCP. 

Воспользуемся эталонным ПО в реализации DHCP - демон организации Internet Systems Consortium. Мы опишем конфигурацию обеспечивающую, динамическое распределение указанного диапазона IP-адресов, фиксирование IP-адресов за сетевым устройствами, а также передачу клиентам разнообразных параметров необходимых, для работы в сети TCP/IP. А так же реализуем дополнительные трюки, к примеру - запуск в нескольких подсетях, ограничивание неизвестных клиентов, и, живя в эпоху сетевых дикарей, мы будем повышать безопасность демона путем запуска в песочнице (изменение корневого каталога chroot) и работой от имени непривилегированного пользователя. Но и на старуху бывает порнуха - предохраняйтесь и обновляетесь. =) 

Установка
 
Установка проста, но не забывайте сначала обновить систему портов. Найдем необходимый нам порт.
 
# cd /usr/ports/
# make search name=isc-dhcp41-server
Port:   isc-dhcp41-server-4.1.e,2
Path:   /usr/ports/net/isc-dhcp41-server
Info:   The ISC Dynamic Host Configuration Protocol server
Maint:  douglas@douglasthrift.net
B-deps:
R-deps:
WWW:    http://www.isc.org/products/DHCP/
 
Начнем установку и не забудем, что мы параноики и включим поддержку песочницы.
 
# cd /usr/ports/net/isc-dhcp41-server
# make config
Options for isc-dhcp41-server 4.1.e,2
 
[X] DHCP_PARANOIA  Enable support for chroot
[ ] DHCP_LDAP      Experimental LDAP backend support
[ ] DHCP_LDAP_SSL  Support LDAP connection over SSL/TLS
 
# make install clean
~~~
    This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/sbin/dhcpd
/usr/local/bin/omshell
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/isc-dhcpd
/usr/local/etc/rc.d/isc-dhcpd6
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.isc.org/products/DHCP/
===>  Cleaning for isc-dhcp41-server-4.1.e,2
 
Конфигурация
 
На данном этапе необходимо откорректировать и дополнить конфигурационный файл демона своими параметрами.
 
# cd /usr/local/etc/
# chmod u+w dhcpd.conf
# cat dhcpd.conf
 
Этот конфиг разрабатывался с учетом смешанной сети (Windows серверы и клиенты) и некоторые параметры netbios и ntp-servers можно закомментировать.
 
## Глобальные параметры ##
# указываем доменное имя
option domain-name "firma.local";
# имя DNS сервера
option domain-name-servers ns1.firma.local;
# IP DNS сервер (предыдущая строчка взаимозаменяемая)
#option domain-name-servers 192.168.0.1;
 
# по умолчанию на сколько секунд выдаётся IP-адрес
default-lease-time 600;
# максимальное время на сколько выдаётся IP-адрес
max-lease-time 1200;
# минимальное время на сколько выдаётся IP
#min-lease-time 1000;
 
# указываем, что не будем обновлять DNS-таблицу
ddns-update-style none;
# указываем, что наш сервер будет единственным авторитетным для наших сетей
authoritative;
# отправка логов DHCP в журнал (необходимо изменить syslog.conf)
log-facility local7;
 
## Параметры подсети ##
# задаем нашу подсеть и ее маску
subnet 192.168.0.0 netmask 255.255.255.0 {
        # диапазон выдачи IP адресов (фиксированные IP адреса серверов
        # должны лежат вне этого диапазона)
range 192.168.0.101 192.168.0.230;
        # маска подсети
option subnet-mask 255.255.255.0;
        # шлюз по умолчанию
option routers 192.168.0.3;
        # определяем широковещательный адрес
option broadcast-address 192.168.0.255;
        # указываем сервер времени (доп.)
option ntp-servers 192.168.0.1;
        # сообщаем клиенту, должен ли тот реализовывать 
        # широковещательный принцип преобразования адресов 
        # или обращаться к серверу WINS (доп.)
option netbios-node-type 8;
        # адрес сервера для работы с WINS (доп.)
option netbios-name-servers 192.168.0.1;
        # параметры для работы с WINS (доп.)
option netbios-dd-server 192.168.0.1; 
        default-lease-time 6000;
        max-lease-time 72000;
        min-lease-time 72000;
 
}

 Некоторые параметры глобальных и субсетей можно менять, заменять и дополнять в зависимости от необходимого результата. 

А теперь приступим к формированию групп и привязки IP к MAC адресу сетевого устройства.
 
group {
host PC0054 {
  hardware ethernet 00:26:5A:13:E7:5C;
  fixed-address 192.168.0.54;
}
host PC0055 {
  hardware ethernet 00:24:54:74:36:14;
  fixed-address 192.168.0.55;
}
}
 
group { 
host PC0060 {
  hardware ethernet 00:17:31:67:E0:29;
  fixed-address 192.168.0.60;
}
host PC0061 {
  hardware ethernet 00:1C:C0:1B:D1:2B;
  fixed-address 192.168.0.61;
}
}
 
Из этого вам уже понятно, что мы сформировали две группы (для удобства работы и можно добавлять больше групп или вообще без них работать)
  • host - имя сетевого устройства
  • hardware ethernet - его MAC адрес
  • fixed-address - привязанный за ним IP адрес 
Запуск и работа в chroot
 
rc.conf
 
Для автоматического запуска при перезагрузке сервера внесем в /etc/rc.conf опции и укажем специфичные параметры, такие как: запуск в песочнице, нужный сетевой интерфейс, путь до конфигурационного файла, необходимого пользователя и тп.
 
# cat /etc/rc.conf |grep dhcpd
dhcpd_enable="YES"                      # включить dhcpd сервер?
dhcpd_flags="-q"                        # командные опции (вкл. тихая работа)
dhcpd_conf="/usr/local/etc/dhcpd.conf"  # конфигурационный файл
dhcpd_ifaces="em0"                      # сетевой интерфейс
dhcpd_withumask="022"                   # маска создаваемых файлов
dhcpd_chuser_enable="YES"               # работать без привелегий?
dhcpd_withuser="dhcpd"                  # имя пользователя для запуска
dhcpd_withgroup="dhcpd"                 # группа для запуска
dhcpd_chroot_enable="YES"               # запускать в песочнице?
dhcpd_devfs_enable="YES"                # использовать devfs если есть?
#dhcpd_makedev_enable="YES"             # использовать MAKEDEV?
dhcpd_rootdir="/var/db/dhcpd"           # каталог работы
dhcpd_includedir="/usr/local/etc"       # включить каталог с конфигурационными файлами
dhcpd_flags="-early_chroot"             # необходимо для полного корня

 Для включения вывода сообщений DHCP-сервера на консоль следует изменить определение переменной dhcpd_flags в файле /etc/rc.conf:
 
#cat /etc/rc.conf |grep dhcpg_flags
dhcpg_flags="-4"
 
Запуск
 
Запустим демон.
 
# /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.
Internet Systems Consortium DHCP Server 4.1-ESV-R2
Copyright 2004-2011 Internet Systems Consortium.
All rights reserved.
For info, please visit _https://www.isc.org/software/dhcp/
Wrote 0 deleted host decls to leases file.
Wrote 0 new dynamic host decls to leases file.
Wrote 31 leases to leases file.
Listening on BPF/em0/00:16:76:32:c8:a1/192.168.0.0/24
Sending on   BPF/em0/00:16:76:32:c8:a1/192.168.0.0/24
Sending on   Socket/fallback/fallback-net
 
Посмотрим, создалась ли ФС с песочницей для dhcpd.
 
#df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
/dev/mirror/gm0s1a    989M    442M    468M    49%    /
devfs                 1.0K    1.0K      0B   100%    /dev
/dev/mirror/gm0s1g     67G     14G     48G    22%    /ftp
/dev/mirror/gm0s1d     19G     15G    2.9G    84%    /usr
/dev/mirror/gm0s1e     19G    3.1G     15G    17%    /var
tmpfs                 2.3G     52K    2.3G     0%    /tmp 
devfs                 1.0K    1.0K      0B   100%    /var/db/dhcpd/dev

 Созданная структура песочницы - ОС в миниатюре, и в ней есть всё, что необходимо для запуска этого демона.
 
# ls /var/db/dhcpd/
dev etc usr var
 
Запущен ли демон.
 
# ps -ax | grep dhcp
  975  ??  Ss     0:00,01 /usr/local/sbin/dhcpd -q -cf /usr/local/etc/dhcpd.conf -lf 
/var/db/dhcpd/dhcpd.
 1759   0  S+     0:00,00 grep dhcp
 
Остановить демон и запустить можно так.
 
# /usr/local/etc/rc.d/isc-dhcpd stop
Stopping dhcpd.
# /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.
 
Или так.
 
# kill `cat /var/db/dhcpd/var/run/dhcpd/dhcpd.pid`
# /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.
 
Для перечитывания конфигурационного файла можно просто перезапустить демон
 

# /usr/local/etc/rc.d/isc-dhcpd restart
 
Сложные вопросы конфигурации
 
Работа в двух подсетях
 
Иногда случается, что в одном физическом сегменте сосуществуют несколько IP подсетей. Например, в организации существует требование использовать 8-битные маски подсетей, но сеть разрослась до размеров, превышающих 254 хоста, в этом случае необходимо использовать две подсети с 8-битными масками. В этом случае секции subnet, описывающие две эти подсети, могут быть заключены в секцию shared-network.
 Добавляем после указанных глобальных параметров:
 
# Указываем, что будем использовать разные подсети с названием <strong>mynet</strong>.
shared-network mynet {
### Локальные параметры подсети 192.168.1.0/24: ###
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.200;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.1;
option routers 192.168.1.2;
}
 
### Локальные параметры подсети 192.168.2.0/24: ###
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.10 192.168.2.200;
option broadcast-address 192.168.2.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.2.1;
option routers 192.168.2.2;
}
 
host DC23 {
    hardware ethernet 6c:f0:49:e3:92:9d;
    fixed-address 192.168.1.11;
}
 
host RM54 {
    hardware ethernet 0:13:8f:24:a4:d9;
    fixed-address 192.168.2.22;
 
 
В /etc/rc.conf не забудем внести нужные нам интерфейсы для прослушки - это нужно при использовании к примеру разных сетевых карт.
 
# cat /etc/rc.conf |grep dhcpd_ifaces
dhcpd_ifaces="em0 em1"   # доп. сетевой интерфейс через пробел

Если у вас alias на сетевой карте - ничего менять не нужно.
 
Разрешить или запретить неизвестных клиентов
 
Иногда необходимо ограничивать работу неизвестных клиентов, о которых нет упоминания в dhcp.conf, или использовать разные конфигурации сетей в зависимости от клиента - это делается двумя параметрами.
  • deny unknown-clients - запретить неизвестных клиентов
  • allow unknown-clients - разрешить неизвестных клиентов 
shared-network "net” {
# подсеть для известных клиентов
subnet 192.168.1.0 netmask 255.255.255.0
pool {
range 192.168.1.10 192.168.1.200;
option routers 192.168.1.2;
deny unknown-clients;
}
}
 
# подсеть для не известных клиентов
subnet 192.168.2.0 netmask 255.255.255.0
pool {
range 192.168.2.190 192.168.2.200;
allow unknown-clients;
}
}
}

 В данном примере в подсети №1 мы запрещаем получать настройки неизвестным клиентам и разрешаем их работу в подсети №2.
 
IPv6
 
И так эта версия протокола накладывает свои ограничения на работу DHCP во-первых вы должны сконфигурировать свою сетевую карту на работу с IP6, во-вторых, создать отдельный конфигурационный файл dhcp6.conf, а в в-третьих, запустить отдельный демон для IP6. Небольшой FAQ.
 Я пока пропущу данный раздел за ненадобностью мне.
 
Логи
 
Обязательно включим логгирование - без этого бывает очень тяжело разобраться в появившейся проблеме. Укажем демону syslogd, чтобы он записывал сообщения DHCP-сервера в лог /var/log/dhcpd.log. Необходимо добавить в /etc/syslog.conf строку:
 
# cat /etc/syslog.conf |grep dhcp
#local7.*                                        /var/log/dhcpd.log
!dhcpd
*.*                                             /var/log/dhcpd.log
 
# /etc/rc.d/syslogd restart
 
Создадим лог и дадим права для записи.
 
# touch /var/log/dhcpd.log
# chown dhcpd:dhcpd /var/log/dhcpd.log
# ll /var/log/dhcpd.log
-rw-r--r--  1 dhcpd  dhcpd     0B 22 апр 21:41 /var/log/dhcpd.log
 
FAQ
 
В: Где DHCP хранит списки выданных адресов?
О: У DHCP есть файл базы данных по арендуемым параметрам называемый dhcp.leases также демон периодически делает резервную копию этого файла dhcp.leases~. И при проблемах с основным файлом вы можете его заменить резервным.


Источник: http://www.ignix.ru/book/freebsd/network/isc_dhcp
Категория: Net | Добавил: oleg (29.04.2011) | Автор: Raven2000
Просмотров: 1027 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024