Alter.Org.UA  
 << Back Home EN en   Donate Donate www/www1/www2

Strict MAC-based DHCPv6 option + Prefix Distribution

by Alter (alterX@alter.org.ua (remove X))

В DHCPv6 опция назывется также, как и в DHCPv4 (hardware ethernet), но делает совсем другое. Из запроса получается DUID - идентификатор клиента. Младшая часть его может конструироваться на основе MAC'а. А может и нет. Иногда это MAC внутреннего интерфейса. Иногда - вообще непонятно что. Вариантов не так много:

  • обратиться к производителю железки/прошивки и попросить исправить :)
  • предложить клиенту заменить оборудование или перенастроить его (что не всегда возможно)
  • подправить сервер так, чтобы он таки обращал внимание на реальный MAC-адрес.

Патч добавляет в ISC DHCPD v4.2.4 привязку выдаваемого IPv6-адреса к MAC-адресу клиента. По умолчанию используется младшая часть Client DUID, которая может, но не обязана содержать MAC-адрес клиента. Если Client DUID не опознан - проверяем MAC. И только если никаким способом не удалось идентифицировать клиента, выдаем гостевой адрес. Синтаксис dhcpd.conf не меняется. Патч также применим к ISC DHCPD v4.2.5, но для него есть более свежая и правильная версия (см. ниже).

При практическом использовании клиентских подсетей (Prefix Distribution, PD) во многих прошивках домашних роутеров есть недоработки, в результате которых нет гарантии, что выделенный блок адресов следует маршрутизировать на тот адрес, который назначает по DHCPv6. Роутер может вместо него использовать адрес от RtADV, а то и вообще только Link-local. Поэтому добавлен (некрасивым хакерским методом) вызов внешнего скрипта, который в момент назначения клиентской сети настраивает маршрут к ней через тот IPv6 адрес, с которого пришел DHCP запрос. См. server\dhcpv6.c

#define ROUTE_BIN "/usr/local/bin/sudo /home/traf_check/rt6_upd.sh "

rt6_upd.sh (for FreeBSD)

#!/bin/sh
net=$1
mask=$2
gw=$3
gw2=`ndp -an | grep $3 | awk '{print $1;}'`
if [ "$gw2x" = "x" ] ; then
  exit 1
else
  /sbin/route -n add -inet6 $net -prefixlen $mask $gw2
  /sbin/route -n change -inet6 $net -prefixlen $mask $gw2
fi
exit 0

dhcpd6.conf

   host demo6-host {
      hardware ethernet 00:13:14:14:46:96;
      fixed-address6 2a01:d0:9:8::a1fa:f001;
      option dhcp6.fqdn "demo6-host.my-isp.com";
      fixed-prefix6 2a01:d0:3ff0:9700::/56;
   }

Patch download:
4.2.5dhcpdv6-4.2.5-P1_hwaddr_pd_dbg.rar/tgz (5.8 Kb/6 Kb)
4.2.4dhcpv6-4.2.4_hwaddr-dbg.rar/tgz (4.9 Kb/5 Kb) ISC-Bugs #32258

2015.01.15

См. также


Mail to alterX@alter.org.ua (remove X)  
Автор: Alter (Александр А. Телятников) Сервер: Apache+PHP под FBSD © 2002-2017