null

Как правильно готовить DHCP snooping

Обычно, говоря про возможности DHCP snooping на коммутаторах, говорят о борьбе с посторонними DHCP серверами. И это действительно полезный функционал практически в любой сети. Но, к счастью, этим возможности DHCP не ограничиваются. Так, например, на коммутаторах Huawei при включенном DHCP snooping сохраняется соответствие MAC адреса и IP адреса, назначенного DHCP сервером. И, как логичное продолжение, есть возможность блокирования трафика с IP адресов, которые не были выданы DHCP сервером.

Для настройки такого функционала на коммутаторе доступа необходимо глобально включить dhcp и dhcp snooping командами:

dhcp enable
dhcp snooping enable

И включить защиту в необходимых VLAN:

vlan XXX
 dhcp snooping enable
 dhcp snooping trusted interface Eth-Trunk0
 arp anti-attack check user-bind enable
 ipv4 source check user-bind enable

В данном случае Eth-Trunk0 это имя агрегированного интерфейса, смотрящего в направлении ядра сети. Для коммутаторов, расположенных в топологии выше коммутаторов доступа, данный функционал может оказаться более правильно будет включать для конкретных интерфейсов, а не для всего VLAN.

После выполнения приведённых команд коммутатор начинает слушать DHCP пакеты и заполнять таблицу соответствия MAC и IP адресов, посмотреть которую можно, например, командой:

dis dhcp snooping user-bind vlan XXX

Пример вывода команды:

DHCP Dynamic Bind-table:
Flags:O - outer vlan ,I - inner vlan ,P - Vlan-mapping 
IP Address       MAC Address     VSI/VLAN(O/I/P) Interface      Lease               
-------------------------------------------------------------------------------------------
192.168.XX.XXX   XYZK-XYZK-c414  XX  /--  /--    GE0/0/10       2022.06.18-00:35
192.168.XX.XXX   XYZK-XYZK-e7db  XX  /--  /--    GE0/0/7        2022.06.18-05:57
192.168.XX.XX    XYZK-XYZK-dfca  XX  /--  /--    GE0/0/6        2022.06.18-06:13
192.168.XX.XX    XYZK-XYZK-1d2f  XX  /--  /--    GE0/0/25       2022.06.18-04:28

А по прошествии какого-то времени в выводе команды:

display logbuffer

Вы можете обнаружить записи вида:

Jun 17 2022 18:30:58+03:00 swXXX %%01SECE/4/DAI_DROP_PACKET(l)[0]:Not hit the user-bind table. (SourceMAC=XYZK-XYZK-3d5c, SourceIP=169.254.XX.XXX, SourceInterface=GigabitEthernet0/0/46, DropTime=2022/06/17 18:30:58)

Которые говорят об успешном блокировании IP трафика от узла, не получавшего адрес от DHCP сервера.

Данный функционал успешно помогает бороться с некоторыми клиентами, которые сначала назначают на интерфейс IP адрес, который они использовали ранее, а потом обращаются к DHCP серверу. Например, ISC-DHCP сервер перед предложением IP адреса сначала проверяет его доступность отправляя ICMP echo request, а так как IP на интерфейс уже назначен, то DHCP сервер получает ответ и принимает решение, что данный IP был кем-то захвачен и предлагает клиенту другой адрес, а исходный адрес временно блокирует. Таким поведением, по моим наблюдениям, отличаются некоторые linux based дистрибутивы.

Если в Ваш коммутатор доступа подключено устройство, имеющее статический IP, то можно добавить статическую привязку командой:

user-bind static ip-address 192.168.XX.XX mac-address XYZK-XYZK-81ec interface GigabitEthernet0/0/23

Но, в данной ситуации, более правильным будет назначение статического адреса DHCP сервером.

Стоит отметить, что команда "ipv4 source check ..." появилась в относительно новых прошивках, а в более старых прошивках существовала команда "ip source check ...", которая включала провеку наличия привязки как для IPv4 трафика, так и для IPv6. Если же в Вашей сети развёрнут двойной стек с поддержкой и IPv4, и IPv6, но IPv6 адреса назначаются с использованием механизма SLAAC, то выполнение такой команды приведёт к блокированию IPv6 трафика Ваших пользователей. Найти в какой именно версии прошивки произошло данное изменение мне, к сожалению, не удалось, но в прошивках версии V200R021 данная команда уже есть.

Коротко о себе:

Работаю в компании Tune-IT и тьютором кафедры Вычислительной техники в СПбГУИТМО.

Очень люблю команду cat, core solaris и IPv6.