Jump to content
Калькуляторы

Dlink relay+opt82 формат DHCPOFFER

Ситуация такая: на D-link 3200 включен dhcp-relay, запрос DHCPDISCOVER благополучно доходит до сервера, сервер отвечает DHCPOFFER, но пакет не доходит до клиента, соответственно он не посылает DHCPREQUEST. Та же схема чудесно работает на OLT BDCOM 3310. В DHCPOFFER согласно RFC копируется Opt82.

 

Может кто-нибудь, у кого работает, проснифать трафик и скинуть формат DHCPOFFER и DHCPACK?

Share this post


Link to post
Share on other sites

Да там настроек-то, на сброшенном в дефолт свитче:

 

create vlan MGMT tag 100

create vlan USERS tag 700

conf vlan MGMT add tagged 28

conf vlan USERS add tagged 28

conf vlan USERS add untagged 1-24

conf ipif System vlan MGMT ipaddress 10.103.0.2/24

create iproute default 10.103.0.1

 

conf dhcp_relay add ipif System xx.xx.xx.xx

conf dhcp_relay option_82 state enable

enable dhcp_relay

 

где xx.xx.xx.xx - адрес DHCP-сервера.

Share this post


Link to post
Share on other sites

Что руками прописать? Адрес на хосте? Работает конечно, пока что снупинг выключен. Кстати, на каталисте тоже все работает. А вот на длинке - ни 3200, ни 1210/ME не работает. Есть чувство, что релею не нравится пакет DHCPOFFER.

Share this post


Link to post
Share on other sites

Нет, коммутатор сбросил, включил только релей. Самая простая настройка, запросы на сервер приходят, все поля корректные (circuit-id, remote-id, relay-agent), с сервера - DHCPOFFER уходит, но к клиенту не попадает. Как-то на Длинке вообще можно включить debug?

Share this post


Link to post
Share on other sites

DHCP-сервер какой? Случайно не самописный?

Есть нюанс с портами. Если память не изменяет, relay-relay должный на 67 порту общаться.

 

Вот настройки с боевого

enable dhcp_relay
config dhcp_relay hops 4 time 0
config dhcp_relay option_82 state enable
config dhcp_relay option_82 check disable
config dhcp_relay option_82 policy keep
config dhcp_relay option_82 remote_id default
config dhcp_relay option_82 circuit_id default
config dhcp_relay option_60 state disable
config dhcp_relay option_61 state disable
config dhcp_relay add ipif System _REMOTE_SERVER_IP_
config dhcp_relay option_60 default mode drop
config dhcp_relay option_61 default drop
config dhcp_relay ports 1-16 state enable
config dhcp_relay ports 17-18 state disable

 

Тут обратите внимание на "config dhcp_relay ports 1-16 state enable". Может у вас просто выключено?

И, кстати, сразу хочется посоветовать выключать на магистральных портах, есть неприятный глюк с бесконечной репликацией dhcp-запросов, если на магистральных портах включено.

Share this post


Link to post
Share on other sites

Сервер самописный, под собственные нужды, теперь стала задача скрестить его с Длинком. Т.е. нужно обратить внимание на порт ответа на релей? В понедельник проверю конфигурацию и отслежу, на какой порт ответ идет. Собственно, почему и вопрос был насчет снифа трафика с рабочей схемы.

Share this post


Link to post
Share on other sites

используем с 3200 и 1210-28 самописный dhcp через dhcp_local_relay. Все работает стабильно.

 

dhcp_local_relay работает с сервером по broadcast, так? А у меня сервер в другом сегменте сети стоит, поэтому нужен dhcp_relay с юникастом.

Share this post


Link to post
Share on other sites

Сервер самописный, под собственные нужды, теперь стала задача скрестить его с Длинком. Т.е. нужно обратить внимание на порт ответа на релей? В понедельник проверю конфигурацию и отслежу, на какой порт ответ идет. Собственно, почему и вопрос был насчет снифа трафика с рабочей схемы.

Напишите мне свою почту в личку - кину дамп.

Share this post


Link to post
Share on other sites

Нашел проблему, спасибо vurd за дамп. Фишка в том, что мои длинки в DHCPDISCOVER шлют bootp flag 0x8000 - broadcast, а не 0x0000 - unicast. А я им отвечал 0x0000. Поменял на 0x8000 - сразу все заработало. Самое смешное, что другое железо без проблем работает и плюет на эти флаги. Теперь буду подставлять в зависимости от запроса.

Share this post


Link to post
Share on other sites

Нашел проблему, спасибо vurd за дамп. Фишка в том, что мои длинки в DHCPDISCOVER шлют bootp flag 0x8000 - broadcast, а не 0x0000 - unicast. А я им отвечал 0x0000. Поменял на 0x8000 - сразу все заработало. Самое смешное, что другое железо без проблем работает и плюет на эти флаги. Теперь буду подставлять в зависимости от запроса.

 

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

 

dhcp.c

....
state -> bootp_flags = packet -> raw -> flags;
....
raw.flags = state -> bootp_flags;
....

 

Копирование бита никак не ставится в зависимости от адреса ответа - броадкаст или релей.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.