LINUX.ORG.RU
ФорумAdmin

DHCP relay и iptables.


0

0

Есть следующая схема:

host -------[eth0 device eth1]-------dhcp server (192.168.1.100)

eth0 192.168.2.1 eth1 192.168.1.1

на девайсе встроенный линукс. Мне нужно организовать dhcp relay на нем, т.е. host посылает dhcp diiscovery, оно переправляется на сервер юникастом и т.д. В комплекте busybox'a есть релей, собрал, поставил. В поле giaddr dhcp пакета релей прописывает адрес клиентского интерфейса, т.е. eth0 (таким образом сервер знает из какого пула выдавать адреса).

Проблема в том, что сервер отправляет ответы на адрес 192.168.2.1 (вроде как это в соответствии с rfc2131), но девайс не может роутить такие пакеты куда следует, не могу понять что я делаю не так.

★★

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

Забыл добавить, что от клиента сидящего за eth0 dhcp discover идет с порта 68 на порт 67, как и положено; релей переправляет запрос через eth1 с порта 68 на 67, что тоже логично, а вот сервер отвечает с 192.168.1.100:67 на 192.168.2.1:67 (вот это вот непонятно, но вроде rfc это допускает). Получается мне нужно делать проброс порта на внутренний интерфейс ?

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

Нет, проброс неприменим здесь. Весь функционал лежит на самом dhcp relay.

Dhcp discovery - это broadcast, т.к. клиент ещё не имеет адреса. А после релея идёт unicast. И сервер DHCP отвечает unicast'ом. А вот тут dhcp relay, получив от сервера ответ, вновь посылает broadcast клиенту.

Если в устройстве есть tcpdump, то посмотрите, какие пакетики ходят.

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

Все верно, юникасты от сервера устройству уходят (вижу по дампу на dhcp сервере), но они идут на 192.168.2.1:67 и это очевидно не доходит до интерфейса (на устройсте к сожалению tcpdump'a нет).

Я убрал все iptables-правила на устройстве, включая маскарадинг - и все равно пакет не доходит, а ведь все маршруты статические - должен ходить.

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

Предвижу удивлённый взгляд, но всё же... Назначьте хосту статический адрес и пустите с него трейс на dhcp-сервер. Затем с сервера пустите трейс на хост. При этом пусть все iptables-правила будут как обычно, не выключайте их. Повторите эксперимент без правил в iptables.

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