info Настройка DHCP Snooping и Option 82 на коммутаторах SNR

 

DHCP snooping это функция безопасности DHCP которая предоставляет безопасную фильтрацию не прошедших проверку сообщений DHCP и поддержку привязки таблиц DHCP snooping.

Таблица сопоставлений DHCP snooping содержит MAC адрес, IP адрес, время аренды, тип сопоставления, номер VLAN и информацию о интерфейсе который отвечает ненадёжным локальным интерфейсам или свитчам. Ненадёжные интерфейсы - это интерфейсы, которые настроены на принятие сообщений от внешней сети или firewall. Надёжные интерфейсы - это интерфейсы, которые настроены на принятие сообщений только от внутренней сети.

DHCP Option 82 это опция протокола DHCP, использующаяся для информирования DHCP-сервера о том, от какого DHCP-ретранслятора и через какой егго порт был получен запрос. Данная опция применяется для привязки IP-адреса к порту коммутатора.

DHCP snooping может быть задействован на свитче посредством VLAN для перехвата DHCP сообщений второго сетевого уровня.

 

Конфигурация DHCP snooping и Option 82 на ethernet коммутаторах SNR.

Для коммутаторов SNR S2940, S2950S2960S2965, S2985G, S2990GS2990-16X, S3650G-24S, S3750GS4550:

ip dhcp snooping enable
ip dhcp snooping binding enable
ip dhcp snooping information enable
ip dhcp snooping information option subscriber-id format hex
ip dhcp snooping vlan xx​

 

Для коммутаторов SNR моделей S2970G-48S, S2970-12X

ip dhcp-relay snooping
ip dhcp-relay snooping information option
ip dhcp-relay snooping information option hn-type

 

Также дополнительно рекомендуется включить функционал user-control на портах подключения абонентов, и указать максимальное количество абонентов, подключенных к порту (кроме линейки SNR S2970):

Interface Ethernet 1/1
 ip dhcp snooping binding user-control
 ip dhcp snooping binding user-control max-user 1

 

Конфигурация DHCP-сервера.

Рассмотрим детально пример минимальной конфигурации DHCP-сервера ISC-DHCPD:

Включаем вывод сообщений в syslog, это упростит отладку в случае каких-либо проблем:

log-facility local7;
local-address 172.16.0.10;​

 

Проверяем наличие Option 82 в пакете:

if exists agent.remote-id {

 

Если пакет с Option 82, то пишем в syslog информацию:

   log ( info, concat(

 

о коммутаторе и порту подключения, с которого пришел пакет:

     «Switch MAC:», binary-to-ascii(16, 8, «:», option agent.remote-id),
    «Switch port:», binary-to-ascii(10, 8, «.», option agent.circuit-id)
  ));
}    

 

Создаем класс для порта коммутатора:

class «sw01-p01" {
  match if

 

Берем последние 6 байт agent.remote-id, делим на 8-битные числа, каждые из которых преобразуем в 16-чную систему счисления. Полученные числа объединяем между собой через «:» и проверяем соответствие полученного MAC-адреса коммутатора в agent.remote-id с необходимым:

  binary-to-ascii(
    16, 8, «:», suffix(option agent.remote-id ,6)
  )=«f8:80:82:76:10:d6» and

 

Аналогичным образом получаем порт коммутатора из agent.circuit-id и сверяем его:

   binary-to-ascii(
    10, 8,»", suffix(option agent.circuit-id, 1)
  ) = «1»;
}
subnet 172.16.0.0 netmask 255.255.255.0 {
  option routers 172.16.0.1;
  option subnet-mask 255.255.255.0;
  authoritative;

 

Выдаем IP-адрес согласно описанному выше классу:

   pool {
    range 172.16.0.121;
    allow members of «sw01-p01»;  
           }
}