Настройка option 82 на D-Link DES-3526 и Dhcpd сервере.

D-Link DES-3526 один из самых известных и распространенных коммутаторов среди провайдеров. Не текущий момент, его не производят и те, кто покрупнее уже давно перешли на более новое оборудование, а те, кто поменьше ещё используют DES-3526. На нем и будем настраивать опцию 82 в связке с ISC DHCP.

Версия прошивки коммутатора DES-3526:

Firmware: Build 6.00.B48

Подключаемся к коммутатору DES-3526 и начинаем настраивать. Удаляем vlan по умолчанию и добавляем нужные. Для примера я взял два vlan один для управления, другой для абонентов:

config vlan default delete 1-26
create vlan MANAGEMENT tag 5
config vlan MANAGEMENT add tagged 25-26
create vlan USER tag 10
config vlan USER add tagged 25-26
config vlan USER add untagged 1-24

Настраиваем интерфейс на D-Link DES-3526:

config ipif System vlan MANAGEMENT ipaddress 192.168.0.2/24 state enable

Включаем опцию dhcp_relay и указываем IP-адрес нашего DHCP-сервера:

config dhcp_relay add ipif System 192.168.0.1
config dhcp_relay option_82 state enable
config dhcp_relay option_82 policy replace
enable dhcp_relay

Включаем функцию Binding и настраиваем порты:

enable address_binding dhcp_snoop
config address_binding dhcp_snoop max_entry ports 1-24 limit 2
config address_binding ip_mac ports 1-24 state enable loose allow_zeroip enable

В качестве сервера использую рабочую станцию с ОС Gentoo. Добавляем vlan, которые прописывали на коммутаторе DES-3526:

vconfig add eth1 5
vconfig add eth1 10

Настраиваем интерфейсы на созданных vlan:

ifconfig eth1.5 192.168.0.1/24
ifconfig eth1.10 192.168.1.1/24

Настраиваем 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;
  # Класс с описанием идентификатора и порта DES-3526
  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 и смотрим, что приходит от DES-3526 к нашему 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
...

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