Конфиг для Mikrotik с помощью make config

Матеріал з NoDeny
Версія від 19:36, 25 листопада 2019, створена Sv (обговорення | внесок) (→‎Создание шаблона)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

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