Курс по сетевым технологиям
A A A

 

Принцип работы DHCP 

Чтобы компьютеры работали в сети им как минимум нужно настроить следующие параметры: 

  • IP адрес
  • Маску подсети
  • Шлюз по умолчанию
  • DNS сервер

 

Само собой обычный пользователь даже не знает, что что-то подобное существует и уж тем более как все это настроить. А для администратора это нудное и утомительное занятие, особенно когда в сети 100 и более компьютеров. 

На помощь приходит технология DHCP (Dynamic Host Configuration Protocol). Суть ее работы заключается в том,  в сети присутствует DHCP сервер, который хранит и выдает сетевые настройки при обращении к нему сетевых устройств, которые называются DHCP клиенты.

Хост, который не имеет сетевой конфигурации отправляет широковещательный запрос. На этот запрос реагирует только DHCP  сервер. Принцип работы выглядит следующим образом:


А вот как выглядит этот процесс в программе Wireshark:

 

Обычно в сети имеется один DHCP сервер, однако в больших корпоративных сетях используют 2 и более серверов. Они могут работать по принципу master-slave либо независимо друг от друга и обслуживать отдельные сегменты сети. 

В небольших сетях роль DHCP сервера, как правило, берет на себя сам маршрутизатор.



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

DHCP сервер может быть запущен как на отдельном специализированном сервере (обычно под управлением Linux или Windows) либо на маршрутизаторе. 

Рассмотрим настройку на роутере. Компания Cisco рекомендует использовать специальные хосты, называемые DHCP database agent (агент, хранящий базу данных DHCP, то есть таблицу назначенных IP адресов и необходимые параметры). В качестве хранилища выступает сервер FTP/TFTP.

 

Для чего необходимо данное устройство? Может ли роутер хранить свою базу данных локально? 

Конечно же может. Однако при перезагрузке маршрутизатора все данные теряются и ему будет сложнее решать конфликтные ситуации, когда хосту нужно выделить адрес, а он уже занят другим устройством. 

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

 

Что произойдет, если в сети устройству статически настроили адрес, а роутер захочет назначить его другому устройству? 

Перед тем, как назначить выбранный адрес, сервер всегда посылает Echo Request (Ping) по данному адресу. Если адрес “молчит”, то он свободный, в противном случае адрес временно удаляется из пула и выбирается новый.

 

Чтобы DHCP сервер работал сначала настроим и включим интерфейс локальной сети. Интерфейс должен иметь адрес, потому что маршрутизатор будет раздавать адреса только на том интерфейсе, чей адрес соответствует адресам пула. 

Если мы собираемся использовать Database agent, то для него необходимо настроить сетевой путь в нашем сервере:

Router(config)#ip dhcp database сетевая_ссылка_к_агенту  [timeout секунды | write-delay секунды]

 

Если агента базы данных нет, то отключаем логирование конфликтных событий:

Router(config)#no ip dhcp conflict logging

 

Делается это для того, чтобы роутер не исключал адреса из пула при возникновении коллизий. Если такие коллизия случаются часто, то это может исчерпать весь пул адресов (конфликтные адреса будут просто удалены из пула) и администратору придется вручную устранять проблемы. Поэтому на всякий случай отключаем логирование.

Теперь мы готовы создать и сам пул адресов:

Router(config)# ip dhcp pool имя

 

Вводим основные параметры сети:

Router(dhcp-config)# network адрес_сети маска

Router(dhcp-config)# default-router адрес_роутера

Router(dhcp-config)# dns-server адрес_сервера

 

Следует знать, что IP адрес выдается на временное пользование. По истечении срока аренды  (lease time) хост должен снова запросить адрес. Срок аренды можно настроить параметром:

Router(dhcp-config)# lease 2 (в днях)

 

Можно ли настроить несколько пулов? 

Да, можно, например, для разных VLAN.

 

Можно ли исключить из раздачи определенные адреса? 

Да, можно. Делается это так:

Router(config)# ip dhcp excluded-address начальный_адрес конечный_адрес

 

С помощью вышеуказанной команды мы исключаем сразу несколько адресов с начального по конечный.

 

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

Router(config)# ip dhcp excluded-address 192.168.1.13

Router(config)# ip dhcp excluded-address 192.168.1.28

Router(config)# ip dhcp excluded-address 192.168.1.145

 

Помимо перечисленных выше параметров DHCP поддерживает и другие параметры, например, имя домена, адрес FTP/TFTP  серверов, статический маршрут и так далее.



Просмотр сведений о DHCP 

После того, как сервер настроен и работает самое время проверить его работу, а также конфликты.

 

Проверка пула:

Router# show ip dhcp pool название

 

Список уже назначенных адресов, время аренды, МАС адреса узлов:

Router# show ip dhcp binding

  

Список конфликтных (удаленных из пула) адресов:

Router# show ip dhcp conflict

 

База данных DHCP:

Router# show ip dhcp database

 

Статистика работы сервера:

Router# show ip dhcp server statistics

 

 

Статическая привязка адреса 

Иногда может понадобиться статическая привязка адреса к определенному компьютеру. Для этого создадим отдельный пул, в котором укажем IP и МАС адреса хоста:

Router(config)# ip dhcp pool имя

Router(dhcp-config)# host IP_адрес

Router(dhcp-config)# client-identifier идентификатор_хоста

 

Что такое идентификатор хоста? 

Некоторые хосты при запросе адреса посылают серверу свой идентификатор, который передается в опции 61 (Option 61).

 

Что из себя представляет идентификатор? 

Он состоит из 2-х частей: типа интерфейса и МАС адреса хоста. Например, хост имеет МАС адрес 00:50:79:66:68:00 и работает в Ethernet сети. Тогда его идентификатор будет равен 0100.5079.6668.00, где первые 2 цифры 01 указывают на тип интерфейса Ethernet, а остальные - на МАС адрес хоста.

 

Увидеть идентификатор можно в самом роутере с помощью отладчика пакетов DHCP сервера, а также в сетевом дампе. Отладчик можно запустить командой

Router# debug ip dhcp server packet

 

Вот как будет выглядеть идентификатор в отладчике и Wireshark:

 

Однако не все хосты отправляют свой идентификатор в DHCP запросе, поэтому вместо команды client-identifier можно воспользоваться другой командой:

Router(dhcp-config)# hardware-address МАС_адрес

 

Следует учитывать следующее: 

  • Для каждого адреса создается отдельный пул, то есть, если у нас 10 адресов, то нужно создать 10 пулов.
  • В статическом пуле нельзя применять команду network. Для этого необходимо создавать отдельный пул.




Статическая привязка адреса через текстовый файл 

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

 

Этот файл можно хранить как на отдельном TFTP/FTP сервере, так и в самом роутере.

При запуске DHCP службы маршрутизатор скачает файл и обновит свою базу данных.

 

Как же выглядит файл? 

Файл выглядит так:

Файл для статической привязки адресов DHCP

Что означает поле Type? 

Type означает тип интерфейса. Например, если у нас Ethernet, то указываем 1. В нашем файле в качестве Type мы указали значение id, что означает идентификатор клиента. Дело в том, что если хост использует в запросе client-identifier, то в файле тоже необходимо указать его значение. Если же хост не использует идентификатор, то указываем 1 и его МАС адрес.

 

Теперь поговорим о самой настройке. Она очень проста. Достаточно выполнить следующие команды:

Router(config)# ip dhcp pool имя

Router(dhcp-config)# origin file tftp://адрес_сервера/имя_файла