DHCP

DHCP (Dynamic Host Configuration Protocol - протокол динамической конфигурации узла) — это сетевой протокол, позволяющий компьютерам автоматически получать IP- адрес и другие параметры, необходимые для работы в сети TCP/IP. Данный протокол работает по модели «клиент-сервер». Для автоматической конфигурации компьютер-клиент на этапе конфигурации сетевого устройства обращается к серверу DHCP, и получает от него нужные параметры. Сетевой администратор может задать диапазон адресов, распределяемых сервером среди компьютеров. Это позволяет избежать ручной настройки компьютеров сети и уменьшает количество ошибок.

Протокол DHCP является клиент-серверным, то есть в его работе участвуют клиент DHCP и сервер DHCP. Передача данных производится при помощи протокола UDP, при этом сервер принимает сообщения от клиентов на порт 67 и отправляет сообщения клиентам на порт 68.

Но самый главный плюс DHCP вовсе не в том, что с его помощью можно автоматически раздавать IP-адреса. На этом функционал протокола не заканчивается. Основная его ценность в другом: с его помощью вы можете назначать хостам и другие, не менее важные настройки. Например:

  • Шлюзы по умолчанию. Если в вашей сети имеется несколько Интернет-каналов (для обеспечения бесперебойной работы), вы можете назначить хостам несколько шлюзов и порядок их предпочтения. В случае выхода одного из каналов из строя, переключение на резервный канал произойдет автоматически, без вашего вмешательства. Это же дает возможность организовать простейшую балансировку нагрузки между каналами, назначив по DHCP одной группе хостов один маршрутизатор в качестве шлюза, а другой группе – второй.
  • Статические маршруты. Если в вашей сети есть несколько подсетей, соединенных маршрутизаторами, то при помощи DHCP можно автоматически оповещать хосты о наличии маршрутов в другие подсети. Причем это, по желанию, можно сделать только для избранных – например, используя привязку к MAC. Эта же опция полезна при организации Раздел VPN: Что это такое VPN-доступа к корпоративной сети – VPN-клиентам можно сообщить маршруты лишь к нужным им подсетям, оставив другие подсети недоступными для подключающихся по VPN пользователей.
  • Смещение времени. Если ваши пользователи часто бывают в различных временных поясах (например, мотаются из Питера во Владивосток и обратно), то можно заставить системные часы их ноутбука адаптироваться к вашему местному времени при помощи DHCP.
  • Сервер синхронизации времени. Поскольку часы компьютеров славятся своей неточностью, их желательно синхронизировать с какими-то эталонными часами. Для этого используется служба NTP. Информацию о сервере Настройки времени systemd-timesyncd и запуск сервера NTP можно раздавать хостам при помощи DHCP.
  • Раздел DNS: Что такое DNS-серверы. С помощью этой опции вы можете назначать вашим клиентам DNS-серверы как внутри сети, так и за ее пределами. Причем, в отличие ручной настройки интерфейса, вы можете передать хосту обширный список доступных DNS-серверов.
  • Настройки сервера загрузки – настройки протокола TFTP/BOOTP, необходимые для бездисковой загрузки хостов. Эта возможность востребована при наличии в сети бездисковых терминалов, загружающихся по сети, и при организации дистанционной автоматической установки ОС на компьютеры пользователей (об этом поговорим отдельно)
  • Списки доступных SMTP — простой протокол передачи почты и POP серверов.
  • Настройки WINS и Netbios
  • Размер MTU, время жизни кэша Работа с ARP протоколом: очистка таблицы, размер TTL - Time to live и др.

Если у вас сеть разбита на несколько подсетей, разделенных маршрутизаторами, то одним DHCP-сервером вам ограничиться не получится. DHCP-запросы и ответы не маршрутизируются между подсетями и распространяются в пределах лишь одного сегмента. Это связано в первую очередь с тем, что протокол DHCP не использует для передачи данных IP- адресацию, а работают на более низком уровне. Следовательно, в каждом из сегментов сети, имеющем свой диапазон IP-адресов вам потребуется отдельная DHCP- служба.

Когда клиент загружается, начальные параметры определяются в соответствующем клиенту объявлении host, затем проверяется секция group (если она существует) которая содержит в себе host, далее проверяется секция subnet соответствующая подсети в которой находится клиент, после этого проверяется указаны ли какие-нибудь параметры в секции shared-network(если есть), содержащей нашу подсеть, ну и наконец проверяются глобальные параметры, которые могут быть указаны перед всеми объявлениями.

Когда dhcpd ищет секцию host для соответствующего клиента, он следует следующим правилам: сперва ищется объявление host где указан параметр fixed-address и секция subnet или shared network совпадает с подсетью в которой находится клиент. Если нет соответствующих записей, dhcpd ищет объявление host без параметра fixed-address. Если подходящих записей не найдено, то dhcpd считает что нет записей для этого клиента, даже если они есть для этого клиента в другой подсети.

Homepage:WWW: isc-dhcp-server

Дополнительная информация в man

> man dhcp-options
# описаны выражения допустимые в конфигурационном файле
> man dhcp-eval
> uname -a
FreeBSD ns.com.ua 7.2-RELEASE-p2 FreeBSD 7.2-RELEASE-p2 #0: Wed Jun 24 00:57:44 UTC 2009
root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386
> cd /usr/ports/net/isc-dhcp31-server
> make install clean
> cp /usr/local/etc/dhcpd.conf.sample /usr/local/etc/dhcpd.conf
> ee dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# Общие опции для всех поддерживаемых сетей...
option domain-name "example.org"; # домен по умолчанию

# (см. Список бесплатных публичных DNS серверов)

option domain-name-servers 4.2.2.2, 208.67.222.222; #сервера DNS

default-lease-time 1200; # время аренды (по умолчанию 600)
max-lease-time 7200; # максимальное время аренды

# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;

# Параметр authoritative

# Является ли сервер авторитативным - ответственным DHCP сервером.
authoritative;

# ad-hoc DNS update scheme - set to "none" to disable dynamic DNS updates.
# Способ динамического обновления DNS. Выключаем если используется статический DNS - в большинстве
# сетей так и есть. Иначе нужно конфигурировать сервер DNS (например bind)
ddns-update-style none;

Для работы параметра log-facility нужно настроить syslog.conf и ротацию лога в newsyslog.conf.

# Источник сообщений для записи логов через syslogd
log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.

subnet 10.152.187.0 netmask 255.255.255.0 {
}

# This is a very basic subnet declaration.

subnet 10.26.95.0 netmask 255.255.255.0 { # подсеть из которой будут выдаваться адреса
  range 10.26.95.1 10.26.95.240; # интервалы ip адресов на выдачу клиентам
  option domain-name-servers 10.26.95.253;
  option routers 10.26.95.253; # gateway (шлюз по умолчанию) для клиента
#option netbios-name-servers 192.168.1.51; # адрес сервера WINS (если есть)
#option domain-name-servers 192.168.1.51; # адрес DNS сервера AD
#option domain-name "office.mydomen.ru"; # полное имя домена AD
}

# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.

#привязка постоянных IP к MAC адресу сетевой карты хоста
host darkfire {
  hardware ethernet 00:15:f2:4b:ad:5c; # MAC адрес сетевой карты хоста
  fixed-address 10.26.95.251;# ip адрес, который нужно присвоить этому хосту
}

host user1 {
  hardware ethernet 00:00:1c:d3:9e:40;
  fixed-address 10.26.95.10;
}

host user2 {
  hardware ethernet 00:14:2a:1c:16:31;
  fixed-address 10.26.95.11;
}

Прописываем в rc.conf строки

dhcpd_enable="YES"
dhcpd_flags="-q" # отключаем вывод копирайта и прочего при старте dhcpd
dhcpd_ifaces="rl0 vr0" # сетевой интерфейс на котором будет работать dhcpd. Несколько интерфейсов указываются через пробел.

Запускаем и пользуемся

> /usr/local/etc/rc.d/isc-dhcpd start
  • /usr/local/sbin/dhcpd

dhcpd скомпонован статически и расположен в каталоге /usr/local/sbin. Страницы справочной системы dhcpd(8), устанавливаемые портом, содержат более полную информацию о dhcpd.

  • /usr/local/etc/dhcpd.conf

dhcpd требует наличия конфигурационного файла, /usr/local/etc/dhcpd.conf, до того, как он будет запущен и начнёт предоставлять сервис клиентам. Необходимо, чтобы этот файл содержал все данные, которая будет выдаваться обслуживаемым клиентам, а также информацию о работе сервера. Этот конфигурационный файл описывается на страницах справочной системы dhcpd.conf(5), которые устанавливаются портом.

  • /var/db/dhcpd.leases или /var/db/dhcpd/dhcpd.leases

Сервер DHCP ведёт базу данных выданной информации в этом файле, который записывается в виде протокола. Страницы справочной системы dhcpd.leases(5), устанавливаемые портом, дают гораздо более подробное описание. В dhcpd.leases заносится информация только динамически выданных IP адресах, если IP статистический (привязан к МАС) - такая информация в dhcpd.leases заноситься не будет. Полный сбор статистики можно осуществлять через dhcpd-snmp: http://www.net-track.ch/opensource/dhcpd-snmp/

  • /usr/local/sbin/dhcrelay

dhcrelay используется в сложных ситуациях, когда сервер DHCP пересылает запросы от клиента другому серверу DHCP в отдельной сети. Если вам нужна такая функциональность, то установите порт net/isc-dhcp3-server. На страницах справочной системы dhcrelay(8), которые устанавливаются портом, даётся более полное описание.

Параметры allow и deny используются для контроля над поведением демона dhcp в отношении различных видов запросов.

  • Ключевое слово unknown-clients
      allow unknown-clients;
      deny unknown-clients;

Параметр unknown-clients используется что бы сообщить серверу как поступать с неизвестными клиентами. По умолчанию выдача адресов неизвестным клиентам разрешена.

  • Ключевое слово bootp
      allow bootp;
      deny bootp;

Параметр bootp сообщает серверу dhcp обрабатывать или нет bootp-запросы. По умолчанию bootp-запросы разрешены.

  • Ключевое слово booting
     allow booting;
     deny booting;

Параметр booting сообщает серверу обрабатывать ли запрос конкретного клиента. Имеет смысл только если присутствует в описании host и действует только на соответствующий хост. По умолчанию разрешено, в противном случае хост не сможет получать свой адрес и другие параметры.

Ручной запуск (в примере ниже - вывод команды говорит о неудачном запуске DHCP -клиента):

# dhclient rl0
DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 7
DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 11
DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 12
DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 9
DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 10
DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 12
No DHCPOFFERS received.
No working leases in persistent database - sleeping.

По умолчанию dhclient.conf в FreeBSD пустой (в нем ссылка только на man 5 dhclient.conf). В обычном случае и при таком конфиге все работает. Но если возникают стоит изменить настройки по умолчанию.

Читаем man, копируем приведенный пример в наш dhclient.conf

# cp /etc/dhclient.conf /etc/dhclient.conf.orig
# man 5 dhclient.conf
...
DHCLIENT.CONF(5)          FreeBSD File Formats Manual         DHCLIENT.CONF(5)

NAME
     dhclient.conf -- DHCP client configuration file

DESCRIPTION
     The dhclient.conf file contains configuration information for
     dhclient(8), the Internet Software Consortium DHCP Client.
...
EXAMPLES
     The following configuration file is used on a laptop which has an IP
     alias of 192.5.5.213, and has one interface, ep0 (a 3Com 3C589C).  Boot-
     ing intervals have been shortened somewhat from the default, because the
     client is known to spend most of its time on networks with little DHCP
     activity.  The laptop does roam to multiple networks.

           timeout 60;
           retry 60;
           reboot 10;
           select-timeout 5;
           initial-interval 2;
           reject 192.33.137.209;

           interface "ep0" {
               send host-name "andare.fugue.com";
               send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
               send dhcp-lease-time 3600;
               supersede domain-name "fugue.com rc.vix.com home.vix.com";
               prepend domain-name-servers 127.0.0.1;
               request subnet-mask, broadcast-address, time-offset, routers,
                       domain-name, domain-name-servers, host-name;
               require subnet-mask, domain-name-servers;
               script "/etc/dhclient-script";
               media "media 10baseT/UTP", "media 10base2/BNC";
           }

           alias {
             interface "ep0";
             fixed-address 192.5.5.213;
             option subnet-mask 255.255.255.255;
           }

     This is a very complicated dhclient.conf file - in general, yours should
     be much simpler.  In many cases, it is sufficient to just create an empty
     dhclient.conf file - the defaults are usually fine.

SEE ALSO
     dhclient.leases(5), dhcpd.conf(5), dhcp-options(5), dhclient(8), dhcpd(8)
...

Используем tcpdump Linux примеры использования для проверки DHCP (порты 67, 68).

Передача данных производится при помощи протокола UDP, при этом сервер принимает сообщения от клиентов на порт 67 и отправляет сообщения клиентам на порт 68.

 # tcpdump -i rl0 -n
> ee /etc/dhclient.conf

Ошибка возникает если на одном интерфейсе (в данном случае vr0) прописаны алиасами несколько сетей. Для устранения ошибки нужно указать опцию shared-network {}, например так

.... 
shared-network sharedname { 
subnet 192.168.175.32 netmask 255.255.255.248 { 
  range 192.168.175.33 192.168.175.38; 
  option routers 192.168.175.33; 
} 
subnet 192.168.175.48 netmask 255.255.255.240 { 
  range 192.168.175.50 192.168.175.62; 
  option routers 192.168.175.49; 
} 
}

Окружение: Debian GNU/Linux wheezy/sid. isc-dhcp-server Версия: 4.1.1-P1-17

# aptitude install isc-dhcp-server

Этот сервер может работать с несколькими сетевыми интерфейсами одновременно. Укажем явно сетевой интерфейс на котором будет слушать DHCP сервер, в этом случае для eth0:0, который является алиасом на eth0.

# nano /etc/default/isc-dhcp-server
...
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth0:0"

По умолчанию демон Настройка DHCP сервера Linux, FreeBSD пишет логи в /var/log/messages и на /dev/console. Нужно вынести логи в отдельный файл и заблокировать вывод логов в messages.

# nano /etc/dhcp/dhcpd.conf
log-facility local7;
# touch /var/log/dhcpd.log

В конец файла rsyslog.conf добавим строку

# nano /etc/rsyslog.conf
...
!dhcpd
*.*     -/var/log/dhcpd.log

Для блокировки в messages и на console добавим local7.none

...
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none;local7.none      -/var/log/messages
...
daemon.*;mail.*;\
        news.err;\
        *.=debug;*.=info;\
        *.=notice;*.=warn;local7.none   |/dev/xconsole

Параметр authoritative DHCP

Параметр authoritative DHCP-сервера позволяет объявить сервер авторитативным (ответственным) в обслуживаемой сети. Отличие авторитативного сервера от «обычного» заключается в том, что последний игнорирует любые запросы адресов, которые не описаны в его конфигурации, в то время как авторитативный сервер в ответ на такие запросы отсылает DHCPNAK. Благодаря такому поведению клиент, перемещённый из другой подсети, сможет бы стрее получить новый адрес (в ответ на DHCPREQUEST с адресом из прежней подсети он сразу получит DHCPNAK и приступит к получению нового адреса; в противном случае DHCPDISCOVER будет отправлен лишь по истечении тайм-аута на ожидание ответа). В то же время «случайные» DHCP-серверы (например, их тыкают сейчас везде где угодно) с меньшей вероятностью смогут помешать работе сети, поскольку, будучи неавторитативными, будут просто игнорировать «чужие» запросы DHCPREQUEST.

PQ VPS сервера в 28+ странах.