Dhcpd.conf - функция execute()

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Lazy caT
мл. сержант
Сообщения: 89
Зарегистрирован: 2008-09-11 9:59:17
Откуда: Местные мы...
Контактная информация:

Dhcpd.conf - функция execute()

Непрочитанное сообщение Lazy caT » 2019-04-17 9:16:19

Доброго времени суток.

Есть isc-DHCP Server 4.3.6-P1 на FreeBSD 11.2-RELEASE-p9 который раздает адреса в локальную сеть.
Хочу его привязать к AD DNS'у на Windows Server 2008 R2, чтобы все выданные адреса вносил в виндовый DNS.

Сгенерировал keytab, установил krb5, в конфиг dhcp сервера прописал триггеры on commit, on expire, on release с функцией execute() которая, по идее, должна запускать скрипт dns-krbnsupdate.sh и передавать ему в качестве параметров IP, MAC и имя хоста, которому был выдан адрес, который в свою очередь будет заносить, переданные ему данные, в DNS.

Код: Выделить всё

        on commit {
            set noname = concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address));
            set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
            set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
            set ClientName = pick-first-value(option host-name, host-decl-name, config-option host-name, noname);
            log(info, concat("Commit: IP: ", ClientIP, " Mac: ", ClientMac, " Name: ", ClientName));
            execute("/usr/local/etc/dhcpd/dns-krbnsupdate.sh", "add", ClientIP, ClientMac, ClientName);
        }

        on release {
            set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
            set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
            log(concat("Release: IP: ", ClientIP, " Mac: ", ClientMac));
            execute("/usr/local/etc/dhcpd/dns-krbnsupdate.sh", "delete", ClientIP);
        }

        on expiry {
            set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
            log(concat("Expired: IP: ", ClientIP));
            execute("/usr/local/etc/dhcpd/dns-krbnsupdate.sh", "delete", ClientIP);
        }
И вот тут я столкнулся с проблемой, похоже функция execute() не совсем корректно работает, то что ей задано она запускает но, скрипт вываливается с ошибкой. Вот, к примеру:

Код: Выделить всё

Apr 15 20:20:43 <23.7> core dhcpd: Commit: IP: 192.168.10.36 Mac: 0:b:82:44:ff:78 Name: Phone-1132
Apr 15 20:20:43 <23.7> core dhcpd: execute_statement argv[0] = /usr/local/etc/dhcpd/dns-krbnsupdate.sh
Apr 15 20:20:43 <23.7> core dhcpd: execute_statement argv[1] = add
Apr 15 20:20:43 <23.7> core dhcpd: execute_statement argv[2] = 192.168.10.36
Apr 15 20:20:43 <23.7> core dhcpd: execute_statement argv[3] = 0:b:82:44:ff:78
Apr 15 20:20:43 <23.7> core dhcpd: execute_statement argv[4] = Phone-1132
Apr 15 20:20:43 <23.3> core dhcpd: execute: /usr/local/etc/dhcpd/dns-krbnsupdate.sh exit status 256
При более детальном анализе, было выяснено что параметры скрипту не передаются.
В начало скрипта было добавлено пара строк:

Код: Выделить всё

echo "$@" >> ./script.log
exit 0
В результате, пропала последняя строка, с "/usr/local/etc/dhcpd/dns-krbnsupdate.sh exit status 256" а вот параметры передаваемые скрипту в лог не идут.

в скрипе "dns-krbnsupdate.sh" есть проверка "пустых" переменных:

Код: Выделить всё

action=$1
ip=$2
DHCID=$3
name=${4%%.*}

...

    if [ -z "$ip" ] || [ -z "$DHCID" ]; then
        _usage
        exit 1
    fi
После того как я эту проверку закомментировал, строка с "/usr/local/etc/dhcpd/dns-krbnsupdate.sh exit status 256" перестала появляться в логах, стала появляться строка:

Код: Выделить всё

/usr/local/etc/dhcpd/dns-krbnsupdate.sh exit status 512
Ошибка скрипта, как я выяснил позже, связана с ошибкой выдаваемой nsupdate в скрипте, когда ему передаются пустые параметры.

При запуске скрипта "вручную" с параметрами, скрипт отрабатывает без проблем:

Код: Выделить всё

root@core:/usr/local/etc/dhcpd# ./dns-krbnsupdate.sh add 192.168.10.36 0:b:82:44:ff:78 Phone-1132
DDNS: adding records for 192.168.10.36 (Phone-1132.domain.loc) succeeded
root@core:/usr/local/etc/dhcpd# ./dns-krbnsupdate.sh delete 192.168.10.36 0:b:82:44:ff:78 Phone-1132
DDNS: removing records for 192.168.10.36 (phone-1132.domain.loc) succeeded
Позже, я наткнулся на сообщение тов. rere от 13-Апр-07, 11:09 на opennet'е (http://opennet.ru/openforum/vsluhforumID1/73487.html) и что-то похожее пробегало в мейллисте isc dhcp (https://lists.isc.org/pipermail/dhcp-us ... 13115.html), здесь даже приводили альтернативный способ запуска скрипта с передачей параметров, через syslog. Этот способ, по каким-то причинам у меня тоже не сработал.

Так вот, хочу узнать, есть ли у кого-нибудь из форумчан, опыт организации связки FreeBSD isc-dhcpd + MS Windows 2008 DNS?
Поделитесь, ибо, я уже не знаю в какую сторону копать...
Везде, на этот счет, "глухо" (даже в гугле :( )...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Lazy caT
мл. сержант
Сообщения: 89
Зарегистрирован: 2008-09-11 9:59:17
Откуда: Местные мы...
Контактная информация:

Dhcpd.conf - функция execute()

Непрочитанное сообщение Lazy caT » 2019-04-17 20:38:16

Всё, разобрался...
Вопрос снимается... :)