...
...
...

новая система управления IP-адресами в локальной сети

Речь в данной статье пойдет не о простом DHCP (Dynamic Host Protocol) сервере, как вы могли подумать, прочитав название статьи, а о немного более функциональной программе. Надеюсь, вам будет интересно :)

Итак, начнем с сути проблемы. В локальных сетях часто возникает проблема распределения адресов. Многие люди пытаются получить неправильные или просто понравившиеся адреса. Если эти адреса в данное время не заняты (компьютеры-владельцы выключены), то это удается, и настоящий владелец не может получить свой адрес. Таким образом, могут пострадать многие сетевые сервисы, так как адресация происходит именно по IP. Большинство файрволлов также работает на уровне IP-адресов, то есть защитные правила не будут корректно работать для конкретной машины.
В Ethernet существует такое понятие, как MAC-адрес, благодаря которому драйвер сетевой карты определяет, что данный пакет адресован именно данному компьютеру. В интернет-сетях же используется логическая адресация при помощи IP-адресов. Соответствие между IP- и MAC-адресами находится средствами отправителя пакета, этим и занимается протокол разрешения (определения) адреса (ARP, Address Resolution Protocol).
Отправитель пакета определяет МАС-адрес получателя, посылая широковещательный запрос по протоколу ARP. Давайте рассмотрим ARP-запрос.
Типичный пакет ARP-запроса:


рис.1.

Адрес получателя:FF:FF:FF:FF:FF:FF (широковещательный)
Адрес отправителя:00:01:02:75:93:33
Тип содержимого пакета:ARP 08-06
Тип оборудования:Тип протокола: IP 00-08, Ethernet 00-01
Длина МАС и IP адресов в битах:06 и 04
Код операции:ARP запрос 01
Аппаратный адрес отправителя:00:01:02:75:93:33
Адрес протокола отправителя:192.168.200.1 (IP-адрес)
Аппаратный адрес цели:00:00:00:00:00:00 (неизвестен)
Адрес протокола цели:192.168.200.4 (искомый IP)
Обрамление пакета:18 байт (Windows)

И что же мы видим? Пакет действительно рассылается широковещательно! Компьютер как будто спрашивает всю сеть: «кто имеет нужный IP-адрес, вышлите свой MAC-адрес.» Машина в сети, которая считает, что она имеет соответствующий IP-адрес, посылает ARP-отклик со своим МАС-адресом. Рассмотрим ARP-ответ.
Типичный пакет ARP ответа:


рис.1.


Адрес получателя:00:60:97:8F:93:5D
Адрес отправителя:00:01:02:75:93:33
Тип содержимого пакета:ARP 08-06
Тип оборудования:Тип протокола: IP 00-08, Ethernet 00-01
Длина МАС- и IP-адресов в битах:06 и 04
Код операции:ARP ответ 02
Аппаратный адрес отправителя:00:01:02:75:93:33
Адрес протокола отправителя:192.168.200.1 (IP-адрес)
Аппаратный адрес цели:00:60:97:8F:93:5D
Адрес протокола цели: 192.168.200.60
Обрамление пакета:
18 байт (Windows)

ARP-ответ сообщает запрашивающему МАС-адрес, соответствующий IP-адресу запроса.
Примерно такой же ARP-запрос посылается, когда компьютер включает сетевой адаптер. Посылается "беспричинный" ARP, который настраивает коммутаторы для пропуска нужных отправителю пакетов, а также проверяет уникальность запрашиваемого IP адреса в сегменте сети.
В пакете совпадают IP-адреса отправителя и получателя, он также широковещательный. Если в сети уже есть компьютер, настроенный на использование запрашиваемого адреса, то он воспринимает "беспричинный" ARP как обычный ARP-запрос и посылает ARP ответ, в котором указывает свой МАС-адрес. Включившийся компьютер не ожидает получения ответа, а если получает, то мы видим:

На самом деле, у нас есть возможность программно генерировать подобные ARP-ответы и не пускать компьютер в сеть, то есть якобы присвоить себе все адреса сети. По каким критериям мы можем не давать или давать получить адрес? Посмотрим на ARP-запрос. Ага, нам предоставляется только МАС-адрес, а поскольку его можно легко подделать, этот параметр является недостаточным. На помощь нам приходит протокол DHCP (Dynamic Host Configuration Protocol, протокол динамической настройки сети системы), DHCP-клиент существует во всех современных ОС. Он позволяет получить большее количество параметров конфигурации от клиента и уже по ним сделать выбор: пускать или не пускать в сеть. Данный протокол описывается в двух документах: RFC-2131 (Стандарт DHCP) и RFC-2132 (Опции и расширения DHCP).
DHCP действует так: сначала клиент посылает широковещательное сообщение DHCP Discover, в котором определяет желаемые параметры инициализации сети. Сервер (или несколько) отвечает DHCP Offer, где предлагает параметры инициализации, затем клиент принимает параметры и отвечает сообщением DHCP Request. Процесс завершается сообщением сервера DHCP Ack. Существуют еще другие типы сообщений, но подробное описание протокола DHCP выходит за рамки данной статьи.
Рассмотрим поле опций сообщения DHCP Discover, чтобы выяснить, какие параметры мы можем получить из него. Поле опций DHCP Discover:


рис.3.

Magic Cookie:63-82-53-63 (идентификатор опций)
Тип сообщения (35):DHCPDISCOVER(01)(1 байт)
Windows расширение (74):DHCPDISCOVER (01) (1 байт)
Идентификатор клиента (3D):01-00-0С-6E-CD-B7-DF (7 байт) (MAC)
Имя компьютера (0С):Sophia(6 байт)
Имя производителя (3C):MSFT 5.07 -> Windows XP without SP1
Запрос параметров у сервера (37):Параметры (11 байт)
Код окончания посылки (FF):1 байт
Обрамление пакета:13 байт (Windows)

Ну вот, уже намного больше параметров. Здесь мы можем использовать не только МАС-адрес, но и имя компьютера и тип операционной системы, также возможны манипуляции с идентификатором клиента. По этому принципу я и решил сделать программу, так как не нашел подобных разработок. Рабочее название системы - SecureDHCP.
Это DHCP-сервер с возможностью контроля выделения статических адресов по МАС-адресу и времени входа в сеть.
Динамические адреса выделяются по МАС-адресу, имени компьютера, типу операционной системы, идентификатору клиента и времени.
Сервер поддерживает перехват клиентов других конкурирующих DHCP-серверов.
Постоянное ARP ping сканирование (посылаются ARP запросы и ожидаются ответы) своих клиентов позволяет собирать точные данные о времени нахождения в сети каждого из них. По этим данным можно строить графики.
Также блокируется хакерская смена МАС- и IP-адреса компьютера, уже вошедшего в сеть, так как его статус постоянно проверяется ARP ping.
Реализован веб-интерфейс с поддержкой SSL (при помощи OpenSSL). В качестве обработчика веб-страниц используется PHP.
Сейчас в системе используется база данных Microsoft Jet, а раньше настройки и данные находились в текстовых файлах.


SecureDHCP:окно простой статистики.


SecureDHCP:суточный график суммарного времени пребывания в сети.

Андрей Орлов
обсуждение статьи

© Сетевые решения