Настройка option 82 на Edge-Core ES3528M и Dhcpd сервере.

Edge-Core ES3528M достаточно известная модель коммутатора среди Интернет-провайдеров. 28-ми портовый свитч с cisco-подобной командной строкой. Четыре порта 1000 Мб/с (комбо медь/оптика) и двадцать четыре порта 100 Мб/с (медь). Модель коммутатора хорошо себя зарекомендовала в плане производительности и стабильности работы. Настраивать будем вместе с ISC DHCP.

Заходим в режим конфигурации коммутатора:

config

Заходим в режим конфигурации vlan:

vlan database

Настраиваем два vlan для управления и пользователей:

vlan 5 name MANAGEMENT media ethernet state active
vlan 10 name USER media ethernet state active
exit

Настраиваем интерфейс управления:

int vlan 5
ip address 192.168.0.2 255.255.255.0
exit

Настраиваем порты пользователей:

interface ethernet 1/1-24
switchport allowed vlan add 10 untagged
switchport native vlan 10
switchport allowed vlan remove 1
ip source-guard sip-mac
exit

Настраиваем магистральные порты:

interface ethernet 1/25-28
switchport allowed vlan add 5,10 tagged
exit

Настраиваем функцию dhcp-snooping на коммутаторе:

ip dhcp snooping                  
ip dhcp snooping vlan 10
ip dhcp snooping information option
ip dhcp snooping information policy replace

Указываем магистральные порты как доверительные для DHCP:

interface ethernet 1/25-28
ip dhcp snooping trust
exit

Настраиваем ISC DHCP сервер в файле /etc/dhcp/dhcpd.conf:

# dhcpd.conf
 
# Указываем DNS сервер
option domain-name-servers 8.8.8.8;
 
authoritative;
log-facility local7;
 
# Настраиваем лог
log(info, "***");
if exists agent.circuit-id {
  log( info,concat("*Leased ",binary-to-ascii(10,8,".",leased-address)," (with opt82)") );
  log( info,concat("*Remote-ID: ",binary-to-ascii(16,8,":",substring(option agent.remote-id,2,6))) );
  log( info,concat("*Port: ",binary-to-ascii(10,8,"",suffix(option agent.circuit-id,1))) );
} else {
  log( info,concat("*Leased ",binary-to-ascii(10,8,".",leased-address)," (without opt82)") );
}
log(info, "***");
 
# Описываем подсеть
subnet 192.168.1.0 netmask 255.255.255.0 {
  # Задаем шлюз по умолчанию
  option routers 192.168.1.1;
  # Класс с описанием идентификатора и порта ES3528M
  class "port-1" {
    match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "0:19:5b:fd:b0:6e" and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) = "1";
  }
  # Прописываем IP-адрес и указываем класс
  pool {
    range 192.168.1.2;
    allow members of "port-1";
  }
}

Перезагружаем DHCPD:

/etc/init.d/dhcpd restart

Для тестирования запускаем программу dhcpdump и смотрим, что приходит от ES3528M к нашему dhcp-серверу:

...
OPTION:  82 ( 18) Relay Agent Information   
                  Circuit-ID    00:04:00:0a:00:02
                  Remote-ID     01:06:00:19:5b:fd:b0:6e
...
OPTION:  82 ( 18) Relay Agent Information   
                  Circuit-ID    00:04:00:0a:00:08
                  Remote-ID     01:06:00:19:5b:fd:b0:6e
...

В первом случае запрос пришел со второго порта, во втором с восьмого.

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