DHCP, Option 82

Posted by map[name:devi1 uri:https://www.blogger.com/profile/05777499482649623616] on Monday, November 9, 2015

Встала задача: определять на каком порту какого свитча находится конкретный IP-адрес. На самом деле задача глобальнее, но сейчас имеет смысл именно это. В ходе гугления вышел на DHCP Option 82. Инфы много, но кроме теории важно это.
Суть в том, что коммутатор в запрос DHCP добавляет два поля: Agent Remote ID (идентификатор коммутатора) и Agent Circuit ID (идентификатор порта). Казалось бы, всё просто. Но я столкнулся с некоторыми трудностями.

Дело в том, что сеть поделена на сегменты для улучшения безопасности, выделения потоков трафика и уменьшения широковещательного трафика. Каждый сегмент имеет свою адресацию и, соответственно, свой DHCP-сервер.
Чтобы настроить работу Option 82, коммутатор необходимо настроить как DHCP-relay. Это значит, что при получении DHCP request’a коммутатор просто отправит этот запрос DHCP серверу, указанному в настройках релея. Таким образом можно уменьшить количество широковещательного трафика в пределах сегмента и иметь один DHCP сервер на несколько подсетей. Но, DHCP-relay может работать только с одним DHCP-сервером (указанным в настройках релея), соответственно, все наши сегменты получат адреса из одной подсети, что
нас совсем не устраивает.

Умные инженеры придумали для этого т.н. DHCP Snooping или DHCP Local Relay в терминологии D-Link’a. Просто указываем VLAN’ы в которых будет работать Relay и правим параметры Option 82 если требуется.

На DHCP-сервере (в моем случае Mikrotik RouterOS) в полях Agent Remote/Circuit ID получаем коммутатор и порт, на котором висит наш адрес. В более продвинутых DHCP серверах на основе этой информации можно очень тонко сконфигурировать работу DHCP.
Так это выглядит в DHCP Leases Mikrotik. В поле Agent Circuit ID последние 2 символа - шестнадцатеричный номер порта.

Спасибо Никита Писарев aka mastakid  и blackc за разжевывание


comments powered by Disqus