Анализ поля RelayAgentInformation в логе DHCP сервиса


Сценарий: компьютеры подключаются к коммутаторам 3-го уровня как DHCP клиенты, коммутаторы работают как DHCP Relay Agent и отправляют запросы на DHCP серверы Windows Server 2012/R2.

Задача: предоставить обслуживающему персоналу информацию о том, на каком порту какого коммутатора подключен конкретный компьютер

Решение: настроить на коммутаторах DHCP Snooping, получить на DHCP серверах опцию 82, расшифровать

В этой статье рассмотрим только расшифровку опции 82, но не решение задачи в целом. Настройка DHCP Snooping также вне темы этой статьи. Дополнительную информацию по использованию опции на серверах Windows можно найти в статье DHCP policies based on Relay Agent Information Option (option 82), DHCP Snooping and IP Source Guard.

Сервер Windows Server 2012/R2 имеет в журналах DHCP сервиса поле RelayAgentInformation. (Журналы аудита DHCP нужно включить.) Это поле содержит информацию от устройства выполняющего функции DHCP Relay Agent. Официально это называется Relay Agent Information Option — DHCP Option 82. Внутри себя эта опция может включать несколько подопций (sub option). Официальные документы описывающие форматы опции 82 и её подопций:

  1. DHCP Relay Agent (RA) Information Option [Option 82] — RFC 3046
  2. Circuit ID, RA Sub-Option [Sub Option ID — 1] — RFC 3046
  3. Remote ID, RA Sub-Option [Remote Option ID — 2] — RFC 3046
  4. Subscriber ID, RA Sub-Option [Sub Option ID — 6] — RFC 3993
  5. Server Identifier Override Option, RA Sub-Option [Sub Option ID — 11] — RFC 5107

Нам важны фактически две подопции:

Circuit ID – это описание порта подключения

Remote ID – это имя устройства, где выполняется подключение

(Остальные опции могут отправляться DHCP клиентом, но в нашей задаче они не важны.)

В поле RelayAgentInformation журнала аудита сервер пишет в шестнадцатеричном виде только сами подопции. Формат подопций:

 

SubOpt Len     Sub-option Value

+——+——+——+——+——+——+—…-+——+

| 1   |   N | s1 | s2 | s3 | s4 |     | sN |

+——+——+——+——+——+——+—…-+——+

SubOpt Len     Sub-option Value

+——+——+——+——+——+——+—…-+——+

| 2   |   N | i1 | i2 | i3 | i4 |     | iN |

+——+——+——+——+——+——+—…-+——+

Ниже пример разбора поля RelayAgentInformation.


# Строка значения взята из журнала аудита DHCP

$RelayAgentInformation="0x0106000400660222021401125546412D434D2D4153573130312D34353036"

#

$RelayAgentInformation=$RelayAgentInformation.Substring(2)

#$RelayAgentInformation="0106000400660222021401125546412D434D2D4153573130312D34353036"

# Suboption Num=01 Len=0x06=6

#

$AgentCircuitIDlen = [CONVERT]::toint16($RelayAgentInformation.Substring(2,2),16) *2

$AgentCircuitID = $RelayAgentInformation.Substring( 4, $AgentCircuitIDlen )

#$AgentCircuitID ="000400660222"

# SubOption Type=0 Len=0x04=4

#

$AgentCircuitIDlen00 = [CONVERT]::toint16($AgentCircuitID.Substring(2,2),16) *2

$AgentCircuitID00 = $AgentCircuitID.Substring( 4, $AgentCircuitIDlen00 )

#$AgentCircuitID00 ="00660222"

#

$AgentCircuitIDvlan = [CONVERT]::toint16($AgentCircuitID00.Substring(0,4),16)

$AgentCircuitIDslot = [CONVERT]::toint16($AgentCircuitID00.Substring(4,2),16)

$AgentCircuitIDport = [CONVERT]::toint16($AgentCircuitID00.Substring(6,2),16)

$RelayAgentInformation=$RelayAgentInformation.Substring(4 + $AgentCircuitIDlen)

#$AgentRemoteID ="021401125546412D434D2D4153573130312D34353036"

# Suboption Num=02 Len=0x14=20

#

#$AgentRemoteID=$RelayAgentInformation.Substring(4 + $AgentCircuitIDlen)

$AgentRemoteIDlen = [CONVERT]::toint16($RelayAgentInformation.Substring(2,2),16) *2

$AgentRemoteID = $RelayAgentInformation.Substring( 4, $AgentRemoteIDlen )

#$AgentRemoteID ="01125546412D434D2D4153573130312D34353036"

# SubOption Type=01 Len=0x12=18

#

$AgentRemoteIDlen01 = [CONVERT]::toint16($AgentRemoteID.Substring(2,2),16) *2

$AgentRemoteID = $AgentRemoteID.Substring( 4, $AgentRemoteIDlen01 )

#$AgentRemoteID ="5546412D434D2D4153573130312D34353036"

$AgentRemoteID =($AgentRemoteID -split "(..)" | ? {$_} | FOREACH { [CHAR]([CONVERT]::toint16($_,16)) } ) -join ""

$RelayAgentInformation=$RelayAgentInformation.Substring(4 + $AgentRemoteIDlen)

$AgentCircuitIDvlan

$AgentCircuitIDslot

$AgentCircuitIDport

$AgentRemoteID

Реклама

комментария 2

  1. […] так давно я публиковал скрипт для расшифровки опции 82 из DHCP лога Windows Server 2012/R2. Эта заготовка требовала обертки для полноценного […]

  2. […] продолжении темы Анализ поля RelayAgentInformation в логе DHCP сервиса. В той статье была сформулирована задача и приведена […]

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: