LINUX.ORG.RU

DHCP: как выполнить vlan discovery

 , ,


0

1

Приветствую. Понадобилось для одного embedded девайса делать VLAN discovery, то есть когда девайс заранее не знает c каим VlanID нужно конфигурировать интерфейс, но может его выяснить средствами dhcp, сохранить в persistent memory и в следующий раз пользоваться сохраненным VlanID. DHCP потому, что устройство специфическое и ничего другого нет.

Для этого я решил использовать dhclient-script, который выполняется клиентом в определенных «точках». Скрипту передаются различные переменные, например $reason и пр. - BOUND (получили адрес), RENEW (обновили), TIMEOUT/FAIL (не удалось получить ответ от dhcp сервера) и т.д.:

  1. конфигурируем порт с VlanID=2 (вроде как ID=1 зарезервирован)

  2. пробуем послать DHCPDISCOVER

  3. не удается -> вызывается скрипт в «точке» TIMEOUT

  4. конфигурируем порт с VlanID=3 и идем на шаг 2

  5. и так далее до тех пор пока не получим DHCPOFFER (то есть dhclient-script будет вызван с $reason=BOUND), значит определили VlanID, записали его в файл для след. раза.

Понятно что будет работать медленно, но авто-дискавери будет делаться только самый первый раз когда устройство совсем «голое».

Мне интересно, может быть есть какие-то альтернативные решения? Спасибо!

★★

Сетевые устройства можно идентифицировать по-разному - с помощью портов,
MAC-адресов, протоколов, IP-подсети , приложений или их комбинации.
Стандарт IEEE 802.1Q включает 12-разрядное поле идентификатора VLAN (ID).
У этого поле ограничение на 4096 уникальными идентификаторами VLAN.
Сама VLAN может быть также промаркирована в сетевом пакете.

Ты генерируешь серию зондирующих пакетов, каждый из которых помечен идентификатором VLAN.
Запрашивается ответ от коммутатора, который автоматически отбрасывает любые пакеты с чужим идентификатором VLAN. Ответы предоставляются для тех пакетов, которые настроены в коммутаторе.

https://patents.google.com/patent/US7496052B2/en

kto_tama ★★★★★
()
Последнее исправление: kto_tama (всего исправлений: 1)

вроде как ID=1 зарезервирован

Он часто имеет «особый» статус внутри коммутатора, но это не обязательно, и нередко это только в настройках по умолчанию.

anonymous
()

Создавай 4 тысячи vlan интерфейсов с тегами от 1 до 4000. Запускай 4 тысячи dhclient-ов параллельно по штуке на каждый vlan интерфейс. Чемпион, который получил адрес первым, проходит в финал.

А проще вообще делать это при каждом запуске системы. И пусть 3999 интерфейсов висят без адресов, это не проблема.

iliyap ★★★★★
()
Последнее исправление: iliyap (всего исправлений: 1)
Ответ на: комментарий от iliyap

Бгг… нет, всё правильно, но можно же просто через raw socket отсылать dhcp запрос и смотреть, через какой vlan придёт.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Потрясающий долбо*бизм. Надо послать 4 тысячи запросов с разными тегами. При чем здесь raw.

iliyap ★★★★★
()

1. рассылаем нетегированный dhcpdiscover
2. если не пролезло, вешаем на интерфейс 192.168.1.1/24 и пусть сильно умный одмин лезет и конфигурит как ему угодно.

thesis ★★★★★
()

Дибилизм чистый. Прямо вендоидея, блэт. Девайс должен делать то, что настраивает его пользователь. Включил, указал vlan, работает. Включил в сеть с мультивланами повис высрался все страдают, зачем так?

Anoxemian ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.