Особенности работы и настройки DHCP на маршрутизаторах Cisco

    В статье я хочу рассмотреть использование 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)
    #МАС-адрес получателя широковещательный
    Internet Protocol, Src: 0.0.0.0 (0.0.0.0), Dst: 255.255.255.255 (255.255.255.255)
    #IP-адрес также широковещательный
    User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
    #UDP-порты 68 и 67 определяют клиента и сервер
    Client IP address: 0.0.0.0 (0.0.0.0)
    #указывается текущий адрес клиента, может содержать не нулевое значение если, например, у клиента есть ip-адрес и он продлевает время его аренды
    Your (client) IP address: 0.0.0.0 (0.0.0.0)
    #в этом поле указывается адрес, выдаваемый DHCP-сервером при ответе
    Next server IP address: 0.0.0.0 (0.0.0.0)
    #адрес самого DHCP-сервера
    Relay agent IP address: 0.0.0.0 (0.0.0.0)
    #адрес Relay-агента, если имеется (будет рассмотрен далее)
    Client MAC address: 02:00:4c:4f:4f:50 (02:00:4c:4f:4f:50)
    #МАС-адрес клиента


    Дальше идет поле опций, номера опций могут быть в диапазоне от 0 до 255, каждая опция имеет свое назначение:

    Option: (t=50,l=4) Requested IP Address = 192.168.13.2
    #опция 50 имеет длину 4 байта, в ней указывается IP-адрес, который хотел бы получить клиент по возможности
    Option: (t=12,l=8) Host Name = "MainHost"
    #опция 12 имеет длину 8 байт, в ней указывается текущее имя хоста, которое может быть изменено после конфигурации
    Option: (t=55,l=11) Parameter Request List
    #опция 55, в ней содержится список запрашиваемых клиентом параметров, в данной ситуации клиент запрашивает 11 параметров, каждому из которых соответствует номер опции




    В ответ сервер шлет предложение 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



    Рассмотрим самый простой случай, когда на маршрутизаторе конфигурируется один пул адресов и сервер находится в том же широковещательном домене, что и клиенты:

    !в режиме глобальной конфигурации определим адреса, которые будут исключены из пула, в данном случае это адреса 192.168.13.1 и 192.168.13.10...192.168.13.15
    ip dhcp excluded-address 192.168.13.1
    ip dhcp excluded-address 192.168.13.10 192.168.13.15
    !создадим пул адресов с именем lan_pool1
    ip dhcp pool lan_pool1
    !определим подсеть, из которой будут выдаваться адреса
    network 192.168.13.0/24
    !определим адрес шлюза по-умолчанию
    ip default-router 192.168.13.1
    !определим адреса DNS-серверов
    dns-server 192.168.13.10 192.168.13.11
    !определим имя домена
    domain-name example.ua
    !определим время аренды адреса 5 дней (по-умолчанию 1 день)
    lease 5


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

    На этом пока все, спасибо за внимание и за инвайт :). В дальнейшем планирую подробнее описать работу DHCP-Relay и ряд специфических опций.
    Поделиться публикацией

    Комментарии 11

      0
      Это какая-то статья из первой лекции CCNA?
      Если честно, может и здорово, но зачем?

      [irony] Может написать статью «настройка DHCP под Windows»[/irony]
        +4
        Мне показалось интересным описать механизм развязывания коллизий адресов, к тому же, я планирую продолжить тему детальнее рассмотрев работу DHCP-Relay и Relay-агентов, но мне не хотелось, чтобы статья получилась рваной. Поэтому в качестве вступления к теме DHCP на Cisco дано то, что есть.
          0
          По моему всё правильно делаете. Никогда не любил статьи, где гуру описывают решение задачи «галопом по европам». И дело даже не в том, что новичок ничего не поймет, иногда выходит, что и гуру до конца не понимает о чем пишет. Точнее, поставленную задачу он выполняет, но я считаю, что важно еще знать, как оно работает. Как раз недавно конфигурил dhcp на циско, и делал всё то же самое, тем не менее нашел для себя полезные моменты в статье.
            0
            Проблема в том, что на некоторых маршрутизаторах, например 1801, надо выполнить команду service dhcp что бы всё заработало, а в приведённом конфиге её нет, что может сбить с толку.
              0
              если верить command reference, сервис dhcp на маршрутизаторе по умолчанию включен, хотя для данной конкретной железяки и версии ИОСа могли быть исключения
                0
                ИОСы на 1800 серии вообще странно себя ведут. Вчера VLANы не поднимались пока их через vlan database не прописал.

                Так что тут не угадаешь. :(
            +1
            Немного позанудствую: насколько я знаю, DHCPDISCOVERY всегда имеет адрес источника 0.0.0.0 и назначения 255.255.255.255

            А если у клиента уже есть адрес, то для перезапроса аренды он сразу шлет
            DHCPREQUEST, где ставит свой адрес источника и своего сервера в качестве адреса назначения

            ЗЫ Хорошо, что вы упомянули про пинг. Часто бывает, что персональный МСЭ закрывает эхо-запросы и адрес выглядит чистым, сервер отдает адрес, а клиент его не принимает, т.к. АРП-запрос проходит. Это бывает сбивает с толку.

            ЗЗЫ Когда будете писать про ip helper-address не доверяйте литературе — проверяйте сами :) Мы столкнулись с удивительной особенностью :)

            ЗЗЗЫ И ещё имеет смысл осветить вставляние допопций на лету (коммутаторы с dot1x и маршрутизаторы с DHCP-Relay)
              0
              А если у клиента уже есть адрес, то для перезапроса аренды он сразу шлет
              DHCPREQUEST, где ставит свой адрес источника и своего сервера в качестве адреса назначения


              Вы про случай продлевания аренды адреса? проверю, засомневался :)

              ЗЗЫ Когда будете писать про ip helper-address не доверяйте литературе — проверяйте сами :) Мы столкнулись с удивительной особенностью :)


              Именно из-за неоднозначностей в литературе и хочется все проверить на схемах, награбить пакетов и описать, как это действительно работает, так как случаи действительно нетривиальные бывают

              ЗЗЗЫ И ещё имеет смысл осветить вставляние допопций на лету (коммутаторы с dot1x и маршрутизаторы с DHCP-Relay)

              Вы про опцию 82?
                0
                Да, кривовато написал: когда продлеваем аренду.

                А если вдруг свой сервер не доступен, то тогда откатываем до DISCOVER и шлем широковещательный запрос.
                  0
                  Да, про опцию 82.

                  ЗЫ Сорри, что в разных ответах — тороплюсь
                0
                По вопросу продлевания аренды можно отдельную статью писать :), там ведь первая активность клиента проявляется еще на половине срока окончания аренды, попробую смоделировать ситуацию и описать этот случай тоже

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

                Самое читаемое