March 10th, 2017

taki_net: (Default)
Friday, March 10th, 2017 02:19 pm
Удивительно, но проблема множественных DHCP-серверов никем, похоже, никак не решается и никого не волнует.

Напомню, если ваш компьютер (на винде) имеет в настройках сети параметр "получать IP-адрес автоматически" (или такую настройку имеет ваш Ой-Фон, андроед и т.д. - а вот они так настроены просто всегда, у компьютеров есть хотя бы 1 процент исключений) - так вот, если так происходит, то после перезагрузки или подключения к новой сети устройство слушает рассылаемые по сети сигналы от так называемых DHCP-серверов, и поймав сигнал одного из них, соединяется с ним и получает от него данные этой сети: какой адрес свободен и его можно занять, и прочие параметры. После того как ваше устройство соглашается и занимает, по договоренности с DHCP-сервером, свободный адрес в данной сети, процесс подключения к сети заканчивается (именно этот процесс идет, когда после "обнаружены сети" начинает крутиться желтый кружок на индикаторе сети на экране - как видим, довольно длительный процесс и сложный).

Альтернативой является узнать (договориться с администратором) о заведомо свободном адресе, прописать его СТАТИЧЕСКИ в настройки устройства и всегда подключаться с этим адресом. Это крайне неудобно (функции компьютеров передаются людям), фактически ограничивает перечень возможных сетей подключения одной-двумя (то есть для публичных вайфай сетей вообще непригодно), а кроме того, на мобильных устройствах эта настройка часто вообще недоступна.

Так что же не так с прекрасным первым методом? Всё так. Кроме одного: что будет, если в сети окажутся два и более устройств, на которых запущена ПРОГРАММА (напомню, это просто программа) DHCP-сервер? "Правильный" при этом запущен на роутере, и именно пакеты с данными, поступающие от устройств, получивших правильный адрес от него (или статически, как описано выше, но согласованно с роутером) - будут пропускаться сквозь этот роутер наружу, в интернет и т.д. А компьютеры и другие устройства, которые получат от других DHCP-серверов неправильный адрес, будут видеть только друг друга, но не внешний мир или остальную сеть.

Откуда может взяться неправильный DHCP-сервер?

В сети могут быть устройства (например, дополнительные wifi роутеры), на которых DHCP-сервис запускается штатно по умолчанию. Администратор сети должен позаботиться, чтобы на всех, кроме одного, DHCP был отключен. При этом, при аварийном сбросе настроек в заводские легко в цейтноте забыть (при перенастройке такого роутера) о необходимости отключения DHCP. Кроме того, при наличии физического доступа к роутеру "лица с пониженной социальной ответственностью" могут за несколько секунд, простым нажатием спичкой на утопленную кнопочку, организовать сброс параметров роутера.

И, наконец, на любом компьютере под управлением Windows (и, конечно, Linux и, возможно, MacOS) лицо, имеющее права администратора, может запустить службу DHCP случайно или намеренно. И настроить любой пул раздаваемых адресов.

Внимание, ВОПРОС: что мешает за все десятилетия, которые проблема существует и не решается, модифицировать протокол, по которому работает DHCP, позволив включать в широковещательные пакеты, рассылаемые сервером, простой короткий идентификатор (пароль)? И позволить в настройках сети указывать этот пароль, так, чтобы устройство подключалось только к этому DHCP-серверу (а при отсутствии пароля - к любому)? Уже такое примитивное решение (даже без шифрования этих паролей - а можно сделать и это) полностью исключит случайные дублирования сервера и затруднит намеренные.