LINUX.ORG.RU

Как хранить конфиг DHCP для ipv6 в LDAP?

 , ,


0

1

Стоит ISC-DHCP 4.2.4. Пытаюсь сделать хранение конфигов DHCP в LDAP. Но никак не могу понять, как завести в LDAP параметр subnet6. Взять для примера конфиг из интернета:

default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:3f3e;
option dhcp6.domain-search "test.example.com","example.com";
option dhcp6.info-refresh-time 21600;
dhcpv6-lease-file-name "/usr/local/var/db/dhcpd6.leases";
subnet6 3ffe:501:ffff:100::/64 {
  range6 3ffe:501:ffff:100::10 3ffe:501:ffff:100::11;
  range6 3ffe:501:ffff:100:: temporary;
  prefix6 3ffe:501:ffff:100:: 3ffe:501:ffff:111:: /64;
}
host myclient {
  host-identifier option
    dhcp6.client-id 00:01:00:01:00:04:93:e0:00:00:00:00:a2:a2;
  fixed-address6 3ffe:501:ffff:100::1234;
  fixed-prefix6 3ffe:501:ffff:101::/64;
  option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:4f4e;
}
host otherclient {
        hardware ethernet 01:00:80:a2:55:67:34;
        fixed-address6 3ffe:501:ffff:100:4321;
}
Получается примерно следующее:
#dhcp сервер
dn: cn=dhcp1.v6.domain.ru,dc=domain,dc=ru
objectClass: top
objectClass: dhcpServer
cn: dhcp1.v6.domain.ru
dhcpServiceDN: cn=DHCP Service Config, dc=ipv6,dc=domain,dc=ru

#новый инстанс для конфига:
dn: dc=ipv6,dc=domain,dc=ru
dc: ipv6
o: domain.ru
objectClass: top
objectClass: dcObject
objectClass: organization

# корень конфига:
dn: cn=DHCP Service Config, dc=ipv6,dc=domain,dc=ru
cn: DHCP Service Config
objectClass: top
objectClass: dhcpService
dhcpPrimaryDN: dc=ipv6,dc=domain,dc=ru
dhcpStatements: default-lease-time 2592000;
dhcpStatements: preferred-lifetime 604800;
dhcpStatements: option dhcp-renewal-time 3600;
dhcpStatements: allow leasequery;
dhcpStatements: dhcpv6-lease-file-name "/usr/local/var/db/dhcpd6.leases";
dhcpOption: dhcp-rebinding-time 7200;
dhcpOption: dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:3f3e;
dhcpOption: dhcp6.domain-search "test.example.com","example.com";
dhcpOption: dhcp6.info-refresh-time 21600;
До этого момента конфиг генерируется нормально. теперь нужно добавить subnet6 3ffe:501:ffff:100::/64 {} и host myclient {}. Пробую хост:
dn: cn=myclient,cn=DHCP Service Config,dc=ipv6,dc=domain,dc=ru
objectClass: top
objectClass: dhcpHost
cn: myclient
dhcpOption: dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:4f4e
dhcpStatements: fixed-prefix6 3ffe:501:ffff:101::/64
dhcpStatements: fixed-address6 3ffe:501:ffff:100::1234
dhcpStatements: host-identifier option dhcp6.client-id 00:01:00:01:00:04:93:e0:0
 0:00:00:00:a2:a2
И тут начинается странное:
..
option dhcp6.info-refresh-time 21600;host myclientfixed-prefix6 3ffe:501:ffff:101::/64;
fixed-address6 3ffe:501:ffff:100::1234;
host-identifier option dhcp6.client-id 00:01:00:01:00:04:93:e0:00:00:00:00:a2:a2;
option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:4f4e;
}
перед host нет переноса, после myclient - нет скобки. можно накостылить и сделать так:
dn: cn=myclient,cn=DHCP Service Config,dc=ipv6,dc=domain,dc=ru
objectClass: top
objectClass: dhcpHost
cn: myclient {
cn: myclient
Скобка на месте, но переноса нет (в общем то пофиг. DHCP понимает).Но это нормально или я что то не то делаю?

С subnet6 вообще беда. не пойму как добавить. Если костылить, то какой класс ставить (что бы не добавлялось лишних слов)? dhcpSubnet дает просто subnet {} без 6. пробовал так:

dn: cn=subnet6 3ffe:501:ffff:100::/64,cn=DHCP Service Config,dc=ipv6,dc=domain,dc=ru
objectClass: top
cn: subnet6 3ffe:501:ffff:100::/64 
ругается что нет класса.


Если просто гуглить, то гуглится это:

http://marc.info/?l=dhcp-hackers&m=133992193110516

там патчится схема LDAP, чтобы там был класс dhcpSubnet6. Не знаю, наскольо актуален патч для conflex.c, но схема LDAP у вас, похоже, не содержит нужного для dhcp ipv6 https://github.com/dcantrell/ldap-for-dhcp/blob/master/dhcp.schema .

mky ★★★★★ ()
Ответ на: Слона то я и не приметил. от DeeZ

Патч выше хорошо встал на isc-dhcp-4.2.4. Но в патче - ошибки. После его применения надо еще патч на патч накатить:

--- ./isc-dhcp-4.2.2.dfsg.1.orig/server/ldap.c  2016-06-14 17:09:36.434809446 +0500
+++ ./isc-dhcp-4.2.4-2/server/ldap.c   2016-06-14 15:36:29.000000000 +0500
@@ -361,9 +361,9 @@
   struct berval **tempbv;
   int i;
 
-  x_strncat (cfile->inbuf, "pool {\n", LDAP_BUFFER_SIZE);
+  x_strncat (cfile->inbuf, "pool6 {\n", LDAP_BUFFER_SIZE);
 
-  if ((tempbv = ldap_get_values_len (ld, item->ldent, "dhcpRange")) != NULL)
+  if ((tempbv = ldap_get_values_len (ld, item->ldent, "dhcpRange6")) != NULL)
     {
       x_strncat (cfile->inbuf, "range6", LDAP_BUFFER_SIZE);
       for (i=0; tempbv[i] != NULL; i++);

Тогда генерирует нормальный конфиг. Но серверу он все равно не нравится. Разбираться с 4.2.4 уже не стал. Плюнул. Но патч из рассылки - принят в официальный репозиторий, а ошибка не исправлена до сих пор. Для ISC-DHCP 4.3.4b1 нужно накатить этот патч (только его):

--- ./dhcp-4.3.4b1/server/ldap.c        2016-03-05 01:40:31.000000000 +0500
+++ ./dhcp-4.3.4b2/server/ldap.c        2016-06-14 16:40:23.000000000 +0500
@@ -702,9 +702,9 @@
   struct berval **tempbv;
   int i;
 
-  x_parser_strcat (cfile, "pool {\n");
+  x_parser_strcat (cfile, "pool6 {\n");
 
-  if ((tempbv = ldap_get_values_len (ld, item->ldent, "dhcpRange")) != NULL)
+  if ((tempbv = ldap_get_values_len (ld, item->ldent, "dhcpRange6")) != NULL)
     {
       x_parser_strcat (cfile, "range6");
       for (i=0; tempbv[i] != NULL; i++)

Теперь все отлично работает с LDAP.

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

Мой патч приняли в официальный ISC-DHCP. ошибка исправлена в версии выше dhcp-4.3.4b1. качайте, собирайте из исходников. и все работает.

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