Документация
→ Модуль ядра make_config
Модуль make_config позволяет создавать конфигурационные файлы для программ, не входящих в NoDeny. Например, с помощью make_config можно формировать конфиг для dhcp-сервера. Конфиги формируются динамически - это значит, что они будут переформированы при изменении данных в биллинге.
make_config создает конфиг на основе шаблона. Шаблон - это рабочий конфиг для программы, в котором ключевые данные заменены на переменные. Например, рассмотрим типичный конфигурационный файл для isc-dhcpd:
allow unknown-clients;
option domain-name-servers 1.1.1.1, 8.8.8.8;
default-lease-time 28800;
min-lease-time 10000;
max-lease-time 128800;
authoritative;
ddns-update-style interim;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
}
host host10.0.0.6 {
hardware ethernet 00:11:00:11:00:22;
fixed-address 10.0.0.6;
}
host host10.0.0.2 {
hardware ethernet 00:11:22:33:44:77;
fixed-address 10.0.0.2;
}
Здесь мы видим, что присутствует информация по связке мак-адрес ↠ ip для двух абонентов. Эта информация зависит от данных в биллинге, поэтому ее необходимо заменить на переменные.
Шаблоны находятся в папке /usr/local/nodeny/kernel/make_config/. Рассмотрим dhcp.tmpl:
allow unknown-clients;
option domain-name-servers 1.1.1.1, 8.8.8.8;
default-lease-time 28800;
min-lease-time 10000;
max-lease-time 128800;
authoritative;
ddns-update-style interim;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
}
{% for user in users %}
{% eval i = 0 %}
{% for ip in user.ips %}
{% if ip.type eq 'static' && user.mac.[i] %}
host host{{ip.ipa}} {
hardware ethernet {{user.mac.[i]|pretty_mac}};
fixed-address {{ip.ipa}};
}
{% eval i = i + 1 %}
{% endif %}
{% endfor %}
{% endfor %}
Мы видим, что информация по связкам мак-ip была заменена на относительно непонятную конструкцию. Если вы хотите понять как она работает читайте документацию по бланку настроек - там работает похожий механизм. Если же читать нет времени, то кратко: в конструкциях {% .. %} прописаны команды, которые получают информацию по всем абонентам в NoDeny, выбирают у них статические ip и записывают результат в виде связки мак-ip.
Кроме самого шаблона необходим файл настроек для модуля make_config: kernel/make_config.cfg. Для формирования конфига isc-dhcpd он может быть таким:
run => 0,
period => 60,
template => {
'dhcp.tmpl' => {
# куда будет записан сформированный конфиг
file => '/usr/local/etc/dhcpd.conf',
# системная команда, которая будет выполнена перед записью конфига, можно ''
cmd_before => '',
# системная команда, которая будет выполнена после записи конфига, можно ''
cmd_after => '/usr/local/etc/rc.d/isc-dhcpd forcestart >/dev/null',
# удалять пустые строки
pretty => 1,
},
},
subs => {
pretty_mac => sub {
my $mac = shift;
$mac =~ s/(..)/$1:/g;
chop $mac;
return $mac;
},
}
Здесь dhcp.tmpl - имя файла с шаблоном. /usr/local/etc/dhcpd.conf - имя файла, куда будет записан результат.
Переменная period указывает на период в секундах, с которым будут проверяться изменения данных в биллинге. Например, если period = 60 секундам, то при изменении ip какого-либо абонента, эти изменения отобразятся в конфиге dhcp максимум через 60 секунд (обычно раньше: от 1 до 60 сек)
Запустим с выводом результата на экран:
perl /usr/local/nodeny/nokernel.pl -v -m=make_config
Если конфиг сформирован правильно, добавим запуск make_config в автозагрузку:
echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=make_config -d &' >> /etc/rc.local