Столкнулся с проблемой:
клиент дискавером находит агента и получает через него адрес. Все отлично. Но потом, когда подходит время, он пытается продлить аренду (unicast напрямую к серверу). Так вот в этот момент релей-агент перехватывает этот запрос на обоих интерфейсах и форвардит его серверу. В итоге сервер получает три запроса вместо одного. Если релей-агент выключаю (уже после дискавера, клиент имеет адрес) - то продление проходит штатно: один запрос - один ответ.
На клиент смотрит один интерфейс, он является шлюзом для клиента. Там же и стоит релей-агент. Возможно, проблема из-за этого. Как думаете, может надо вынести релей-агент на отдельный интерфейс (влан) без ip-адреса и объеденить интерфейсы бриджом? Поможет-ли это избавиться от дублирования запросов?
Пока решил таким образом на сервере:
case DHCPREQUEST { #-> DHCPACK/DHCPNAK
if ($dhcpreq->ciaddr() ne '0.0.0.0' && $dhcpreq->giaddr() ne '0.0.0.0'){}
else {
db_log_detailed($dbh, $dhcpreq, 'DHCPREQUEST');
handle_request($dbh, $fromaddr, $dhcpreq);
}
}