Конфиг для Mikrotik с помощью make config
DHCP-сервер на Mikrotik без использования Radius
Модуль make_config периодически формирует конфиг и загружает его на Mikrotik с помощью ssh. Авторизация по сертификату.
Создание сертификата
На сервере NoDeny:
mkdir /usr/local/nodeny/mikdhcp/ ssh-keygen -t dsa
На вопрос "Enter file in which to save the key" отвечаем:
/usr/local/nodeny/mikdhcp/id_dsa
Загружаем сертификат на Mikrotik с ip=1.2.3.4:
sftp admin@1.2.3.4
И далее в консоли sftp:
put /usr/local/nodeny/mikdhcp/id_dsa.pub
Импортируем сертификат. В консоли Mikrotik:
/user ssh-keys import public-key-file=id_dsa.pub
Создание шаблона
Шаблон /usr/local/nodeny/kernel/make_config/mikrotik.tmpl:
ssh -i /usr/local/nodeny/mikdhcp/id_dsa -p22 admin@1.2.3.4 << EOF /ip dhcp-server lease remove [find comment=nodeny] {% for user in users %} {% eval i = 0 %} {% for ip in user.ips %} {% if user.mac.[i] %} /ip dhcp-server lease add address={{ip.ipa}} mac-address={{user.mac.[i]|pretty_mac}} address-list=goodboys comment=nodeny {% eval i = i + 1 %} {% endif %} {% endfor %} {% endfor %} EOF
В Linux для ssh добавьте ключ "-T".
/usr/local/nodeny/kernel/make_config_mikrotik.cfg:
run => 0, period => 60, template => { 'mikrotik.tmpl' => { # куда будет записан сформированный конфиг file => '/tmp/mikdhcp.sh', # системная команда, которая будет выполнена перед записью конфига, можно '' cmd_before => '', # системная команда, которая будет выполнена после записи конфига, можно '' cmd_after => 'sh /tmp/mikdhcp.sh >/dev/null 2>/dev/null', # удалять пустые строки pretty => 1, }, }, subs => { pretty_mac => sub { my $mac = shift; $mac =~ s/(..)/$1:/g; chop $mac; return $mac; }, },
Тестовый запуск:
perl nokernel.pl -v -m=make_config -g=make_config_mikrotik
Результат
ssh -i /usr/local/nodeny/mikdhcp/id_dsa -p22 admin@1.2.3.4 << EOF /ip dhcp-server lease remove [find comment=nodeny] /ip dhcp-server lease add address=10.0.0.26 mac-address=00:00:00:00:00:11 address-list=goodboys comment=nodeny /ip dhcp-server lease add address=10.0.0.20 mac-address=00:00:00:00:00:22 address-list=goodboys comment=nodeny EOF