Сменить dhcp-связку

Обсуждение ПО и его настройки
Ответить
Iskatel
Сообщения: 5
Зарегистрирован: 10 май 2016, 16:32

Помогите, пожалуйста, образовалась задачка:
Есть сеть, все пользователи которой идентифицируются по MAC-адресу и есть dhcp-сервер на MikroTik, который раздаёт статические IP-адреса. Управляется MikroTik по ssh из системы билинга, так например для создания пользователя система биллинга отправит команду:

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

/ip dhcp-server lease add address=UIP mac-address=MAC

Соответственно UIP и MAC будут заменены на IP-адрес и MAC-адрес.
Но есть одно но, эта команда не сработает, если уже есть связки содержащие указанный MAC-адрес или IP-адрес.
Стало быть нужно перед этой командой выполнить ещё две, которые эти связки будут удалять:

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

/ip dhcp-server lease remove [find address=UIP]

и

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

/ip dhcp-server lease remove [find mac-address=MAC]

То есть задача выполнима при помощи скрипта, в котором эти три команды будут выполняться. А вот дальше никак не разберусь. Вот допустим биллинг передаст на Микротик команду запуска скрипта:

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

/system script run Change_IP_MAC UIP MAC

А дальше как? Нужно же чтобы переменные UIP и MAC правильно внутрь скрипта передались. В wiki написано, что это как-то через :global делается, но тут я ничего не понимаю.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

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

:global UIP 10.10.10.1;
:global MAC 12:34:56:78:90:AB

Такими командами вы задаете глобальные переменные, которые сохраняются до перезагрузки оборудования. Есть еще локальные переменные, которые живут только пока выполняется локальная область, в которой они заданы.
http://wiki.mikrotik.com/wiki/Manual:Sc ... obal_scope


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Iskatel
Сообщения: 5
Зарегистрирован: 10 май 2016, 16:32

Понятно что нужны локальные переменные. А как сделать, чтобы они в моём случае в скрипт передавались


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Локальные переменные можно назначить только в самом скрипте. По моему вам скорее с глобальными работать надо. То есть объявить глобальную переменную и назначить ей нужное значение, если нужно изменить значение, используем команды:

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

:set UIP 10.10.10.2;
:set MAC 12:34:56:78:90:CD

В скрипте уже объявляем эту переменную (как бы просто заявляем, что мы с ними будем работать)

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

:global UIP;
:global MAC

и далее работаем с ними вполне себе спокойно в скрипте. Я как-то не очень понимаю, что там вы и чем собираетесь делать, но в целом все как-то так...
А вообще, может вам допилить биллинг, чтобы он с самого начала выдавал всю серию команд в фигурных скобках, тогда никаких переменных и никаких криптов? Выйдет что-то типа:

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

{
:local UIP 10.10.10.1;
:local MAC xx:xx:xx:xx:xx:xx;
/ip dhcp-server lease remove [find address=$UIP];
/ip dhcp-server lease remove [find mac-address=$MAC];
/ip dhcp-server lease add address=$UIP mac-address=$MAC
}

То есть вы искусственно создали локальную область, которая выполнится как одна команда... Или я неверно все понимаю?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Iskatel
Сообщения: 5
Зарегистрирован: 10 май 2016, 16:32

podarok66 писал(а):А вообще, может вам допилить биллинг, чтобы он с самого начала выдавал всю серию команд в фигурных скобках, тогда никаких переменных и никаких криптов?

Сегодня попробовал сделать, чтобы биллинг передавал на микротик последовательность из трёх команд вместо одной как раз через фигурные скобки. Передаёт, но теряются как раз самые важные части кода: значения UIP и MAC. - не вышло. Я сейчас как раз параллельно общаюсь с техподдержкой биллинга ("Netup"), может что и выйдет, но вариант со скриптом тоже рассматриваю.

podarok66 писал(а):Локальные переменные можно назначить только в самом скрипте. По моему вам скорее с глобальными работать надо. То есть объявить глобальную переменную и назначить ей нужное значение

Получается, что передавать значения переменных как параметры через командную строку нельзя? То есть мне нужно опять же передать последовательность команд: две команды назначают глобальные переменные, одна запускает скрипт, а потом в конце скрипта эти переменные должны сбрасываться?


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Iskatel писал(а):Получается, что передавать значения переменных как параметры через командную строку нельзя?

Да можно передать, только вот локальная переменная живет только до конца исполнения команды. То есть вы даль команду в терминале, команда исполнилась и нет переменной. Скрипт есть локальная область, с точки зрения терминала это одна команда. Задали переменную в скрипте - до конца исполнения скрипта переменная живет. Потом нет. Понятно, что я говорю о локальных переменных.
Отсюда и разговор о глобальных переменных. Они своё значение сохраняют до перезагрузки.
Возможно, мы немного друг друга недопонимаем. Вы скажите, что для вас UIP и MAC. Я предполагал, что это некие значения, которые нужно подставить в переменные. Например UIP=10.10.10.1 - IP адрес какого-то клиента. MAC=хх:хх:хх:хх:хх:хх - это его МАС-адрес.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Iskatel
Сообщения: 5
Зарегистрирован: 10 май 2016, 16:32

Всё верно, UIP и MAC - это IP и MAC адрес какого-то клиента и таких клиентов около тысячи. Эти данные хранятся биллинге и их нужно передавать в микротик в "ip - dhcp-server - leases", если в биллинге они изменятся, чтобы dhcp-сервер всегда выдавал клиенту правильный ip-адрес.
После завершения работы скрипта переменные не нужны. Более того как раз необходимо, чтобы они сбросились, чтобы их старые значения не нарушили работу следующего запущенного экземпляра скрипта.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Тогда приведенный мною скрипт должен отрабатывать правильно. Главное, чтобы биллинг значения 10.10.10.1 и xx:xx:xx:xx:xx:xx подменял на нужные вам. Проверьте еще раз, что там посылается...


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить