В статье я хочу рассмотреть использование DHCP-сервера на базе маршрутизатора Cisco в корпоративной сети…
1. Теория
Как следует из названия, протокол DHCP (Dynamic Host Configuration Protocol) используется для динамической конфигурации параметров сетевых устройств. Работа протокола DHCP начинается с того, что клиент, которому необходима динамическая конфигурация, шлет запрос DISCOVERY. Выглядит он следующим образом:
Frame 34 (342 bytes on wire, 342 bytes captured) Ethernet II, Src: 02:00:4c:4f:4f:50 (02:00:4c:4f:4f:50), Dst: Broadcast (ff:ff:ff:ff:ff:ff) <font>#МАС-адрес получателя широковещательный</font> Internet Protocol, Src: 0.0.0.0 (0.0.0.0), Dst: 255.255.255.255 (255.255.255.255) <font>#IP-адрес также широковещательный</font> User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67) <font>#UDP-порты 68 и 67 определяют клиента и сервер</font> Client IP address: 0.0.0.0 (0.0.0.0) <font>#указывается текущий адрес клиента, может содержать не нулевое значение если, например, у клиента есть ip-адрес и он продлевает время его аренды</font> Your (client) IP address: 0.0.0.0 (0.0.0.0) <font>#в этом поле указывается адрес, выдаваемый DHCP-сервером при ответе</font> Next server IP address: 0.0.0.0 (0.0.0.0) <font>#адрес самого DHCP-сервера</font> Relay agent IP address: 0.0.0.0 (0.0.0.0) <font>#адрес Relay-агента, если имеется (будет рассмотрен далее)</font> Client MAC address: 02:00:4c:4f:4f:50 (02:00:4c:4f:4f:50) <font>#МАС-адрес клиента</font>
Дальше идет поле опций, номера опций могут быть в диапазоне от 0 до 255, каждая опция имеет свое назначение:
Option: (t=50,l=4) Requested IP Address = 192.168.13.2 <font>#опция 50 имеет длину 4 байта, в ней указывается IP-адрес, который хотел бы получить клиент по возможности</font> Option: (t=12,l=8) Host Name = "MainHost" <font>#опция 12 имеет длину 8 байт, в ней указывается текущее имя хоста, которое может быть изменено после конфигурации</font> Option: (t=55,l=11) Parameter Request List <font>#опция 55, в ней содержится список запрашиваемых клиентом параметров, в данной ситуации клиент запрашивает 11 параметров, каждому из которых соответствует номер опции</font>
В ответ сервер шлет предложение OFFER, в котором указывает адрес, который он назначает клиенту, а также заполняет опции соответствующими значениями: Клиент может получить несколько предложений OFFER от разных DHCP-серверов (если их несколько), какому из серверов отдать предпочтение, выбирает сам клиент. Обычно клиент выбирает тот сервер, от которого он первым получил предложение. После того, как клиент определяет для себя сервер, с которого он хочет получить конфигурацию, он отправляет запрос REQUEST. Запрос отправляется широковещательно, чтобы его могли получить все DHCP-сервера, а адрес того сервера, который выбрал клиент, указывается в специальной опции:
Option: (t=54,l=4) DHCP Server Identifier = 192.168.13.1
Таким образом клиент говорит всем серверам в широковещательном домене, какому из них он отдал предпочтение. Следующим шагом является подтверждение запроса (сообщение ACK) со стороны сервера. Сервер также широковещательно рассылает подтверждение, но в теле сообщения явным образом указывает МАС-адрес клиента:
Client MAC address: 02:00:4c:4f:4f:50 (02:00:4c:4f:4f:50)
При назначении адресов и клиент и сервер проверяют их уникальность. Предположим, на сервере сконфигурирован пул адресов, который начинается с адреса 192.168.13.2. Первый адрес пула назначен вручную одним из пользователей сети. При назначении такого адреса по DHCP произойдет конфликт, поэтому, для развязания конфликтов существует следующий механизм: После получения сообщения DISCOVERY (строка 1), сервер выбирает первый адрес из пула (в данном случае 192.168.13.2) и отправляет на него ARP-запрос (строка 2) Так как компьютер с таким адресом существует в сети, сервер получает ответ (строка 3). Чтобы убедиться в наличии в сети узла с адресом 192.168.13.2 сервер отправляет на этот адрес Echo-Request (строка 4) и получает ответ (строка 5). В таком случае, сервер берет следующий свободный адрес из пула (в данном случае 192.168.13.3) и отправляет на него ARP-запрос (строка 6) Не дождавшись ответа (прошло почти 15 сек.) сервер считает адрес свободным и предлагает его клиенту в сообщении REQUEST (строка 7). Клиент, подтвердив получение адреса (строка 8) и дождавшись подтверждения от сервера (строка 9), также проверяет, не занят ли кем-то выданный адрес. Это делается путем отправки ARP-запросов клиентом (строки 10-12), если ответ на запрос не пришел, клиент назначает себе на интерфейс полученный адрес.
2. Базовая настройка на маршрутизаторе Cisco
Рассмотрим самый простой случай, когда на маршрутизаторе конфигурируется один пул адресов и сервер находится в том же широковещательном домене, что и клиенты:
<font>!в режиме глобальной конфигурации определим адреса, которые будут исключены из пула, в данном случае это адреса 192.168.13.1 и 192.168.13.10...192.168.13.15</font> ip dhcp excluded-address 192.168.13.1 ip dhcp excluded-address 192.168.13.10 192.168.13.15 <font>!создадим пул адресов с именем lan_pool1</font> ip dhcp pool lan_pool1 <font>!определим подсеть, из которой будут выдаваться адреса</font> network 192.168.13.0/24 <font>!определим адрес шлюза по-умолчанию</font> ip default-router 192.168.13.1 <font>!определим адреса DNS-серверов</font> dns-server 192.168.13.10 192.168.13.11 <font>!определим имя домена</font> domain-name example.ua <font>!определим время аренды адреса 5 дней (по-умолчанию 1 день)</font> lease 5
При такой конфигурации сервер будет выдавать адреса только тем клиентам, запрос от которых пришел через интерфейс, адрес которого находится в той же сети, что и сконфигурированный пул. На этом пока все, спасибо за внимание и за инвайт :). В дальнейшем планирую подробнее описать работу DHCP-Relay и ряд специфических опций.
Привет, привет! Вспомнил я тут вдруг, что мы с вами разбирали настройку DHCPсервера в различных ОС, но как то совсем упустили процесс настройки DHCPна маршрутизаторах и коммутаторах фирмы Cisco. Вот сегодня об этом и поговорим.Как обычно процесс настройки мы рассмотрим на примере. Сразу хочется отметить, что пример данной статьи выполнялся и проверялся на работоспособность в CiscoPacketTracer 5.3.3.0019, работоспособность данного примера на реальном оборудование будет зависеть от поддержки функций DHCPсервера используемой вами версии CiscoIOS (Например однажды ко мне в руки попал старенький маршрутизатор, серии Cisco1600, с древней версией Cisco IOSпорядка 11 который не имел поддержки функций DHCPсервера, хотя уже мог выступать в качестве клиента DHCP).
Тестовая сеть, в качестве DHCP сервера Cisco 2811 |
И так начнем. Произведем предварительную настройку тестовой сети, выполнив следующие команды на маршрутизаторе: Router(config)#interface fastEthernet 0/0<o> Router(config-if)#ip address 192.168.1.1 255.255.255.0<o> Router(config—if)#noshutdownКоммутатор в данной сети можно не конфигурировать, так как в данной сети он «только для галочки». А вот хост, подключенный к коммутатору, придется настроить в соответствии с рисунками:
Указываем что адрес DNS сервера и шлюза нужно получать от DHCP сервера |
Указываем что IP адрес так же нужно получать от DHCP сервера |
С помощью настроек представленных на рисунке мы указываем хосту, что он должен получать IPадрес версии 4, адрес основного шлюза и адрес DNSсервера от DHCPсервера.После того как предварительная настройка выполнена можно перейти к непосредственной конфигурации DHCPсервера на маршрутизаторе. Для этого на нем необходимо выполнить следующие команды:<o> Router(config)#ip dhcp pool TEST<o> Router(dhcp-config)#network 192.168.1.0 255.255.255.0<o> Router(dhcp-config)#default-router 192.168.1.1<o> Router(dhcp-config)#dns-server 8.8.8.8<o> Router(dhcp-config)#exit<o> Router(config)#ip dhcp excluded-address 192.168.1.100<o> Router(config)#ip dhcp excluded-address 192.168.1.1<o>Здесь с помощью первой команды мы создаем пул IPадресов для DHCPсервера. В качестве названия данного пула в данном случае выбрано имя TEST, для своего пула вы можете выбрать любое другое удобное вам имя.С помощью второй команды мы указываем из какой сети мы будем раздавать IPадреса, первый параметр этой команды задает адрес данной сети, а второй параметр ее маску. Третьей командой мы указываем адрес основного шлюза, который будет рассылать в сообщениях DHCP. В четвертой команде мы указываем адрес DNSсервера, который так же будет рассылаться хостам в сообщениях DHCP. Так же в данном примере показывается, что с помощью команды ipdhcpexcluded—address можно исключить некоторые ipадреса из описанных выше DHCPпулов, то есть ни один из хостов нашей сети никогда не получит от DHCPсервера адрес, указанный в параметре команды ipdhcpexcluded—address.Далее проверим работоспособность нашего DHCPсервера. Для этого перейдем на хост и выполним на нем команду ipconfig /all.
Хост получил IP адрес от DHCP сервера |
Как легко заметить из рисунка, хост успешно получил IPадрес и все дополнительные параметры (адрес шлюза и адрес DNSсервера) от DHCPсервера.Как вы наверное помните когда мы рассматривали процесс конфигурирования DHCPсервера под различными ОС, мы говорили о возможности резервирования ряда IPадресов за хостами с определенными MACадресами, спешу вас обрадовать устройства фирмы Ciscoне лишены такой возможности. Опять же рассмотрим ее на примере. Пусть мы хотим чтобы наш хост с MACадресом 0001.6305.94E2 (Рисунок выше) всегда получал от DHCPсервера именно адрес 192.168.1.77. Что для этого необходимо сделать? Все очень просто для реализации данного функционала необходимо добавить к конфигурации DHCPсервера следующие строки: Router(config) #ip dhcp pool my_best_host Router(dhcp-config)#host 192.168.1.77 255.255.255.0 Router(dhcp-config)# сlient-identifier 0100.0163.0594.E2</span>Тут с помощью первой команды мы создаем отдельный DHCPпул только для одного адреса. С помощью второй команды указываем какой адрес необходимо выдавать в данном пуле. А с помощью третьей команды указываем MACадрес компьютера который должен получить IPадрес из данного пола. Но тут есть один нюансик, в команде сlient—identifier указывается не MACадрес устройства, а именно идентификатор клиента. Обычно идентификатор клиента можно получить из MACадреса путем добавления впереди него 00 или же 01 и приведя его к виду указанному в команде. Но иногда такой способ не срабатывает (например, при работе в GNS3 идентификатор интерфейса маршрутизатора, работающего в качестве клиента DHCP,имея MACадрес c001.122c.0000 имел идентификатор клиента 0063.6973.636f.2d63.3030.302e.3132.3263.2e30.3030.302d.4661.302f.30), но не стоит волноваться отловить идентификатор подключаемого клиента на DHCPсервере можно с помощью команды debug ip dhcp server packet – данный отладчик отобразит реальный идентификатор клиента, в тот момент когда он отправит запрос к вашему DHCPсерверу.<o>К сожалению, работу данного примера не получится проверить в PacketTracer, так как он не поддерживает команды hostи сlient—identifierв режиме конфигурирования DHCPпула, но вы можете легко проверить их в GNS3 или же на реальном устройстве.Ну и в заключение этой статьи еще разберем как сконфигурировать интерфейс маршрутизатора фирмы Ciscoв качестве DHCPклиента. Делается это очень просто:<o> Router(config) #interface FastEthernet0/0<o> Router (config-if)# ip dhcp client hostname 777<o> Router (config-if)# ip address dhcp<o>Если вы сконфигуририруете интерфейс вашего маршрутизатора как показано в примере выше, то при включении этого интерфейса он будет обращаться к DHCPсерверу с запросом о получение IPадреса и дополнительных параметров.На сегодня это все. До новых встреч.Используемые источники:
- https://habr.com/post/87920/
- http://www.netza.ru/2013/06/dhcp-cisco.html