Доброго всем времени суток. Захотелось сделать красивый DHCP сервер, что бы не лезть на Linux сервак и править конфиг dhcp3, кстати все это дело крутится в Hyper-V виртуалке на Ubuntu 12.04, а Windows dhcp сервер нам показался убогим. Так мы решили заняться поднятием dhcp-ldap. Конечно мы столкнулись с кривыми how to и поэтому то и решили сделать этот пост с подробным описанием что, куда и как, а самое главное, что все стоит в главной последовательности.
1. Установим dhcp сервер и dhcp-ldap
Мы устанавливаем обычный dhcp3-server для того, чтобы создались все директории и файлы создались для редактирования.
2. Указываем сетевой адаптер куда будет вещать dhcp:
INTERFACES=«eth0»
* eth0 у меня смотрит в локальную сеть.
3. Устанавливаем openldap-сервер:
При установке укажите свой домен. В противном случае указывайте «mega.local».
Пароль от Ldap сохраняем.
4. Реконфигурируем пакет
Отвечаем при установке:
Не выполнять настройку сервера openldap: нет
Хранение баз HDB: да
Удалять базу при вычистке slapd: да
Разрешить использование ldapv2 протокол: да
5. В конфиге LDAP указываем путь к файлу конфигу:
меняем:
SLAPD_CONF=
На:
SLAPD_CONF=/etc/ldap/slapd.conf
6. Указываем в конфиге dhcp-сервера данные для работы с ldap (все остальное ненужно, удаляем):
ldap-server «127.0.0.1»;
ldap-port 389;
ldap-username «cn=admin,dc=mega,dc=local»;
ldap-password «пасс при установке LDAP»;
ldap-base-dn «ou=dhcp,dc=mega,dc=local»;
ldap-method static;
7. Генерация хэша пароля (SHA-1) для LDAP
получаем строку вида:
{SSHA} 12345667890qwerty
Сохраняем строчку в буфер обмена
8. Создаем конфиг для LDAP демона
И редактируем до вида:
«tab» означает что в этом месте нажать клавишу TAB от начала
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/dhcp.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
modulepath /usr/lib/ldap
moduleload back_bdb
access to * by * read
access to attrs=userPassword
«tab»by self write
«tab»by anonymous auth
«tab»by * none
database bdb
suffix «dc=mega,dc=local» #имя вашего домена формата 111.222.RU
rootdn «cn=admin,dc=mega,dc=local» #root Дериктория вашего LDAP
rootpw «строчка хеш пароля»
directory /var/lib/ldap
loglevel 256
index objectClass eq
index cn eq
9. Копируем схему DHCP в каталог /etc/ldap/schema
10. Распакуем архив dhcp.schema.gz
Флаг –d указывает на удаление оригинала после распаковки
11. Пробуем Демон Slapd (LDAP)
12. создаем файлы и папки содержащие структуру LDAP, для последующего экспорта:
И редактируем базу:
dn: dc=mega,dc=local # или имя вашего домена формата dc=222,dc=111,dc=RU
objectClass: dcObject
objectclass: organization
dc: mega #полное имя домена
o: mega
dn: ou=Groups,dc=mega,dc=local
objectClass: organizationalUnit
ou: Groups
Переносим ее в LDAP:
13. Создаем контейнер DHCP:
Приводим к виду:
dn: ou=dhcp,dc=mega,dc=local # Имя Домена
ou: dhcp
description: configuration information for DHCP # Описание контейнера ou=dhcp
objectClass: top
objectClass: organizationalUnit
dn: cn=gate,ou=dhcp,dc=mega,dc=local
dhcpServiceDN: cn=conf,cn=gate,ou=dhcp,dc=mega,dc=local
objectClass: top
objectClass: dhcpServer
cn: gate
dn: cn=conf,cn=gate,ou=dhcp,dc=mega,dc=local
dhcpStatements: ddns-update-style none
dhcpStatements: ddns-updates off
dhcpStatements: client-updates off
dhcpStatements: authoritative
dhcpStatements: use-host-decl-names on
dhcpStatements: always-reply-rfc1048 on
dhcpStatements: default-lease-time 86400
dhcpStatements: max-lease-time 129600
objectClass: top
objectClass: dhcpService
objectClass: dhcpOptions
dhcpPrimaryDN: cn=gate,ou=dhcp,dc=mega,dc=local
dhcpOption: domain-name «gate» #имя машины DHCP
dhcpOption: netbios-scope ""
dhcpOption: netbios-node-type 8
dhcpOption: time-offset 10800
dhcpOption: ip-forwarding off
dhcpOption: netbios-name-servers 10.10.10.4
cn: conf
dn: cn=10.10.10.0,cn=conf,cn=gate,ou=dhcp,dc=mega,dc=local #cn=10.10.10.0
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
dhcpNetMask: 24 # Маска подсети 255.255.255.0
dhcpRange: 10.10.10.50 10.10.10.200 #Пулл Адресов от до
dhcpOption: domain-name-servers 10.10.10.4 #Адрес ДНС
dhcpOption: routers 10.10.10.4 #Адрес Шлюза
dhcpOption: ntp-servers 10.10.10.4 #Адрес сервера времени
dhcpOption: broadcast-address 10.10.10.255 # Широковещательный адрес
dhcpOption: default-ip-ttl 64
dhcpOption: default-tcp-ttl 64
cn: 10.10.10.0
и импортируем в LDAP
14.Создадим контейнер с привязкой к MAC адресу:
dn: cn=AV,cn=10.10.10.0,cn=conf,ou=dhcp,dc=mega,dc=local #cn=AV(имя контейнера)
dhcpHWAddress: ethernet 6C:F0:49:6E:59:A1 #mac адрес
dhcpStatements: fixed-address 10.10.10.9 #Адрес который будет привязан к mac
objectClass: top
objectClass: dhcpHost
objectClass: dhcpOptions
cn: AV
Импортируем в LDAP
Перезапускаем dhcp-сервер:
/etc/init.d/dhcp3-server restart
ВНИМАНИЕ КОСТЫЛИ:
Когда вся эта система поднялась, столкнулся с проблемой что записи обновляются только после перезапуска DHCP для решения этой проблемы есть скрипт dhcp2ldap который запускается как демон но я не стал его юзать, а сделал свой простенький вариант.
Мое решение:
Создаем скрипт перезагрузки dhcp каждые 15 секунд
/etc/init.d/isc-dhcp-server restart
Wait 15
/etc/init.d/isc-dhcp-server restart
Wait 15
/etc/init.d/isc-dhcp-server restart
Wait 15
Exit
Даем права на исполнение:
И ставим его в cron:
*/1 * * * * root /etc/ldap/dhcp/script_dhcp
Теперь каждые 15 секунд данные из LDAP будут обновляться.
Для администрирования советую использовать LDAP Admin для редактирования записей.
www.ldapadmin.org
Подключается все следующим образом:



1. Установим dhcp сервер и dhcp-ldap
apt-get install dhcp3-server dhcp3-server-ldap
Мы устанавливаем обычный dhcp3-server для того, чтобы создались все директории и файлы создались для редактирования.
2. Указываем сетевой адаптер куда будет вещать dhcp:
sudo nano /etc/default/isc-dhcp-server
INTERFACES=«eth0»
* eth0 у меня смотрит в локальную сеть.
3. Устанавливаем openldap-сервер:
apt-get install slapd ldap-utils
При установке укажите свой домен. В противном случае указывайте «mega.local».
Пароль от Ldap сохраняем.
4. Реконфигурируем пакет
dpkg-reconfigure slapd
Отвечаем при установке:
Не выполнять настройку сервера openldap: нет
Хранение баз HDB: да
Удалять базу при вычистке slapd: да
Разрешить использование ldapv2 протокол: да
5. В конфиге LDAP указываем путь к файлу конфигу:
nano /etc/default/slapd
меняем:
SLAPD_CONF=
На:
SLAPD_CONF=/etc/ldap/slapd.conf
6. Указываем в конфиге dhcp-сервера данные для работы с ldap (все остальное ненужно, удаляем):
nano /etc/dhcp/dhcpd.conf
ldap-server «127.0.0.1»;
ldap-port 389;
ldap-username «cn=admin,dc=mega,dc=local»;
ldap-password «пасс при установке LDAP»;
ldap-base-dn «ou=dhcp,dc=mega,dc=local»;
ldap-method static;
7. Генерация хэша пароля (SHA-1) для LDAP
slappasswd –s «пасс при установке LDAP»
получаем строку вида:
{SSHA} 12345667890qwerty
Сохраняем строчку в буфер обмена
8. Создаем конфиг для LDAP демона
touch /etc/ldap/slapd.conf
И редактируем до вида:
«tab» означает что в этом месте нажать клавишу TAB от начала
nano /etc/ldap/slapd.conf
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/dhcp.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
modulepath /usr/lib/ldap
moduleload back_bdb
access to * by * read
access to attrs=userPassword
«tab»by self write
«tab»by anonymous auth
«tab»by * none
database bdb
suffix «dc=mega,dc=local» #имя вашего домена формата 111.222.RU
rootdn «cn=admin,dc=mega,dc=local» #root Дериктория вашего LDAP
rootpw «строчка хеш пароля»
directory /var/lib/ldap
loglevel 256
index objectClass eq
index cn eq
9. Копируем схему DHCP в каталог /etc/ldap/schema
cp /usr/share/doc/isc-dhcp-server-ldap/dhcp.schema.gz /etc/ldap/schema/dhcp.schema.gz
10. Распакуем архив dhcp.schema.gz
gzip -d /etc/ldap/schema/dhcp.schema.gz
Флаг –d указывает на удаление оригинала после распаковки
11. Пробуем Демон Slapd (LDAP)
/etc/init.d/slapd restart
12. создаем файлы и папки содержащие структуру LDAP, для последующего экспорта:
mkdir /etc/ldap/dhcp
touch /etc/ldap/dhcp/base.ldif
И редактируем базу:
nano /etc/ldap/dhcp/base.ldif
dn: dc=mega,dc=local # или имя вашего домена формата dc=222,dc=111,dc=RU
objectClass: dcObject
objectclass: organization
dc: mega #полное имя домена
o: mega
dn: ou=Groups,dc=mega,dc=local
objectClass: organizationalUnit
ou: Groups
Переносим ее в LDAP:
ldapadd -x -D "cn=admin,dc=mega,dc=local" -W -f /etc/ldap/dhcp/base.ldif
13. Создаем контейнер DHCP:
touch /etc/ldap/dhcp/dhcp.ldif
Приводим к виду:
nano /etc/ldap/dhcp /dhcp.ldif
dn: ou=dhcp,dc=mega,dc=local # Имя Домена
ou: dhcp
description: configuration information for DHCP # Описание контейнера ou=dhcp
objectClass: top
objectClass: organizationalUnit
dn: cn=gate,ou=dhcp,dc=mega,dc=local
dhcpServiceDN: cn=conf,cn=gate,ou=dhcp,dc=mega,dc=local
objectClass: top
objectClass: dhcpServer
cn: gate
dn: cn=conf,cn=gate,ou=dhcp,dc=mega,dc=local
dhcpStatements: ddns-update-style none
dhcpStatements: ddns-updates off
dhcpStatements: client-updates off
dhcpStatements: authoritative
dhcpStatements: use-host-decl-names on
dhcpStatements: always-reply-rfc1048 on
dhcpStatements: default-lease-time 86400
dhcpStatements: max-lease-time 129600
objectClass: top
objectClass: dhcpService
objectClass: dhcpOptions
dhcpPrimaryDN: cn=gate,ou=dhcp,dc=mega,dc=local
dhcpOption: domain-name «gate» #имя машины DHCP
dhcpOption: netbios-scope ""
dhcpOption: netbios-node-type 8
dhcpOption: time-offset 10800
dhcpOption: ip-forwarding off
dhcpOption: netbios-name-servers 10.10.10.4
cn: conf
dn: cn=10.10.10.0,cn=conf,cn=gate,ou=dhcp,dc=mega,dc=local #cn=10.10.10.0
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
dhcpNetMask: 24 # Маска подсети 255.255.255.0
dhcpRange: 10.10.10.50 10.10.10.200 #Пулл Адресов от до
dhcpOption: domain-name-servers 10.10.10.4 #Адрес ДНС
dhcpOption: routers 10.10.10.4 #Адрес Шлюза
dhcpOption: ntp-servers 10.10.10.4 #Адрес сервера времени
dhcpOption: broadcast-address 10.10.10.255 # Широковещательный адрес
dhcpOption: default-ip-ttl 64
dhcpOption: default-tcp-ttl 64
cn: 10.10.10.0
и импортируем в LDAP
ldapadd -x -D "cn=admin,dc=mega,dc=local" -W -f /etc/ldap/dhcp/dhcp.ldif
14.Создадим контейнер с привязкой к MAC адресу:
nano /etc/ldap/dhcp/dhcphw.ldif
dn: cn=AV,cn=10.10.10.0,cn=conf,ou=dhcp,dc=mega,dc=local #cn=AV(имя контейнера)
dhcpHWAddress: ethernet 6C:F0:49:6E:59:A1 #mac адрес
dhcpStatements: fixed-address 10.10.10.9 #Адрес который будет привязан к mac
objectClass: top
objectClass: dhcpHost
objectClass: dhcpOptions
cn: AV
Импортируем в LDAP
ldapadd -x -D "cn=admin,dc=mega,dc=local" -W -f /etc/ldap/dhcp/dhcphw.ldif
Перезапускаем dhcp-сервер:
/etc/init.d/dhcp3-server restart
ВНИМАНИЕ КОСТЫЛИ:
Когда вся эта система поднялась, столкнулся с проблемой что записи обновляются только после перезапуска DHCP для решения этой проблемы есть скрипт dhcp2ldap который запускается как демон но я не стал его юзать, а сделал свой простенький вариант.
Мое решение:
Создаем скрипт перезагрузки dhcp каждые 15 секунд
nano /etc/ldap/dhcp/script_restart_dhcp
/etc/init.d/isc-dhcp-server restart
Wait 15
/etc/init.d/isc-dhcp-server restart
Wait 15
/etc/init.d/isc-dhcp-server restart
Wait 15
Exit
Даем права на исполнение:
chmod +x /etc/ldap/dhcp/script_restart_dhcp
И ставим его в cron:
nano /etc/crontab
*/1 * * * * root /etc/ldap/dhcp/script_dhcp
Теперь каждые 15 секунд данные из LDAP будут обновляться.
Для администрирования советую использовать LDAP Admin для редактирования записей.
www.ldapadmin.org
Подключается все следующим образом:


