Здравствуйте, возможно ли как то запомнить Статических клиентов: Имеется 2 линии связи через DHCP Leases я могу менять способ подключения к интернету ( находятся в Adress List), НО статических клиентов я не могу контролировать. Возможно ли как то добавить клиентов в этот список (DHCP), то есть Запомнить в роутере IP-MAC-Adress List.
Пробовал скрипт который якобы должен их помещать туда из ARP в Leases, но что-то пошло не так и как был список полученный автоматически, так и остался. Скрипт прилагаю.
Наш скрипт выглядит следующим образом.
:local a; :local m; :for y from=0 to=7 do={:set a [/iparp get value-name=address number=$y]; :set m [/iparp get value-name=mac-address [find address=$a]]; :ipdhcp-server lease add address=$a mac-address=$m; };
Разберем скрипт по пунктам.
:locala; :localm; – создаем две локальные переменные, в которые будут помешены значения ІР и mac адреса.
:foryfrom=0 to=7 – цикл for будет осуществлять перебор записей из ARP таблицы. Вместо цифры 7 вы должны подставить, свое значение, то есть порядковый номер последней записи из вашей ARP таблицы.
seta [/iparpgetvalue-name=addressnumber=$y]; – получаем данные об ІР-адресе и заносим в переменную а.
setm [/iparpgetvalue-name=mac-address [findaddress=$a]] – получаем данные о мас адресе и заносим в переменную m.
ipdhcp-server lease add address=$a mac-address=$m; – добавляем записи в раздел lease подставляя значения ІР и mac адреса.
Топикастер так и не отрапортовал, а скрипт действительно интересный.
Привел его в такой вид по подсказке выше, но он все равно не работает( Клиентов со статикой в leases как не было так и нет(
:local a; :local m; :for y from=0 to=7 do={:set a [/ip arp get value-name=address number=$y]; :set m [/ip arp get value-name=mac-address [find address=$a]]; :ip dhcp-server lease add address=$a mac-address=$m; };
В первоначальном варианте я конечно же пробовал вместо 7 подставлять разные значения, вплоть до 254...
Ваш вариант к сожалению тоже не видит статику на стороне клиента. В таблице arp они есть.
Это, видимо, из-за двойного отступа табом - консоль думает, что автодополнение запросили. Проверил - на полёт оно не влияет. Попробуйте "[/ip arp find]" заменить на "[/ip arp find complete]" - возможно, у вас в ARP есть адреса в процессе резолвинга, поэтому у них ещё нет MAC'а - и из-за этого выпадает с исключением.
Терминал:
{:local a;
{... :local m;
{... :foreach y in=[/ip arp find complete] do={
{{... :set a [/ip arp get $y address];
{{... :set m [/ip arp get $y mac-address];
{{... :if ([/ip dhcp-server lease print count-only where address=$a mac-address=$m] = 0) do={
{{{...
caps-man console dude interface ipv6 mpls port queue routing special-login task user blink import password quit undo
certificate disk file ip log partitions ppp radius snmp system tool beep export jobname ping redo
{{{... /ip dhcp-server lease add address=$a mac-address=$m;
{{{... }
{{... };}
0
0
1
1
1
1
1
1
1
1
1
1
1
1
Меню winbox все равно выдает, но в таком виде сработал.
В leases показались записи со статикой на стороне хоста, а так же GW провайдера.
Заполнены поля только ip, mac, server показывает как all, status показывает waiting, остальные поля пустые.
Остальные поля возможно оживить? Host Name, Bridge Port, Status?
filmoto писал(а): ↑27 дек 2023, 12:11
В leases показались записи со статикой на стороне хоста, а так же GW провайдера.
Как и ожидалось. Всё, что есть в ARP-таблице
filmoto писал(а): ↑27 дек 2023, 12:11
Заполнены поля только ip, mac, server показывает как all, status показывает waiting, остальные поля пустые.
Остальные поля возможно оживить? Host Name, Bridge Port, Status?
Host Name не нахожу, вижу только Active Host Name. Это, и Bridge Port со Status вдобавок, про DHCP-аренду. Поскольку у хоста статикой настройки прописаны - первые два пустые, т.к. адрес не выдавался, а Status - waiting Пока не будет DHCP-запроса от клиента - ничего не изменится.
По остальным полям понял.
Я только хотел его в scheduler запихнуть и тут я заметил что скрипт только добавляет в leases хосты из arp , но когда эти хосты из arp исчезают при повторном запуске скрипта они все равно остаются в leases.
Убирать их из leases только руками?
- cкрипт из таблицы arp подтянул хосты со статикой
- хосты отключились, и по таймауту через 30 мин исчезли из таблицы arp, а новые хосты с другими ip подключились
- запускаю скрипт снова, и он снова подтягивает новые хосты из arp в leases, а старые хосты которые уже давно отключились до сих пор висят в leases
- Хотелось бы что бы отключившиеся хосты удалялись из leases
Зачем вам вообще эти хосты в Leases? %) Вопрос полуриторический, но ответ всё же интересен.
В простейшем варианте можно, например, добавлять эти записи в Leases c комментарием ("from ARP"), а в начале скрипта эти записи все удалять - тогда по окончании работы там будут только свежие, актуальные.
У меня некоторые хосты в видеонаблюдении не могут получать ip по dhcp (только статикой), хотелось бы их видеть в leases как и остальные.
Конечно думал что будет видно и Active Host Name, Bridge Port,Status и Comment (теперь понятно что не получится), но если есть под носом хотя бы их ip и mac - тоже не плохо, а то часто приходится их искать.
From arp можно не писать - так как host name не отображается мне все равно придется руками их комментировать с именем
Да, нужно старые удалять а новые добавлять
filmoto писал(а): ↑28 дек 2023, 10:43
но если есть под носом хотя бы их ip и mac - тоже не плохо, а то часто приходится их искать.
Хм... Странные какие-то хосты, то появляются, то пропадают, и искать надо только тогда, когда они работают... Может, вам лучше какой-нибудь список вести отдельно, не на роутере?..
filmoto писал(а): ↑28 дек 2023, 10:43
From arp можно не писать - так как host name не отображается мне все равно придется руками их комментировать с именем
Да, нужно старые удалять а новые добавлять
Комментарий "From ARP" (или любой другой) нужен как раз для того, чтобы скрипт мог понять, какие записи добавил он, а какие были добавлены кем-то другим. Надо же знать, какие можно удалить
filmoto писал(а): ↑28 дек 2023, 10:43
А есть и сложный вариант???
Ну, например, не с полным удалением всех записей и пересозданием таблицы Leases из ARP, а, например, удалением только того, что в ARP не найдено. Чуть больше времени, чуть более громоздкий скрипт, чуть меньше записей в логе
Так, напишу побольше дабы внести ясность!
- Хосты то видеонаблюдения постоянно в сети,,, просто я скрипт проверил на предмет, если допустим придется сменить ip у ряда камер (например поменять их местами), то этот скрипт их снова не добавит с новыми ip из arp в leases, так как их маки уже добавлены в leases им же ранее, а по таймауту не активные ip удаляются только из arp и только через 30 мин., но не из leases.
- Список с маками у меня есть (цель скрипта не только в этом), но мне удобнее видеть их в winbox, чем лезть за ним в NAS + хосты из leases можно групировать в address-list для использования в filter, и прочее управление для них так же активно в свойствах.
- From arp я все равно буду переименовывать в host name для читабельности. Скрипт разве не может использовать другой атрибут, кроме как comment для сортировки? Например скрипт при добавлении хостов в графе Server указывает "all" вместо "dhcp", по этому атрибуту он будет понимать что он добавил в leases, а что добавлено dhcp server с make static?
- Скрипту не надо сначала удалять все из leases а потом это же подтягивать из arp, так как он удалит мне так же хосты с make static, а потом их же добавит но уже без атрибутов Active Host Name, Bridge Port, Status и прочего.
- В общем нужен алгоритм примерно такой:
) Скрипт при старте удаляет из leases только те ip которых уже нет в arp таблице и только те, которые сам добавлял, ориентируясь например по графе Server с атрибутом "all", и не трогал хосты с атрибутом "dhcp" хостов с "make static" добавленные DHCP-сервером, даже если они к примеру временно отвалились и вдруг исчезли из arp таблицы.
) Далее скрипт добавляет новые ip которых нет в leases, но которые появились в arp (жаль что скриптом не подтянется Host Name и Status новых ip), было бы вообще шикарно если подтянуть из других мест максимум атрибутов.
ПС: Собственно я случайно набрел на эту ветку и увидел описанный топикастером скрипт, который мне показался очень удобным для моих целей (некоторым управлением через свойства хостов в leases адресами камер, регистраторов и коммутаторов которые сидят на статике на
стороне клиента, которым по соображениям стабильности видео-сети не стоит быть зависимыми от dhcp роутера).
Скрипт мне правда, сразу показался слишком коротким и простым, даже с учетом того что в скиптах я не понимаю.
Я решил привести его в рабочее состояние по вашим замечаниям и подсказкам. Но в итоге представленный топикастером скрипт оказался полурабочим костылем (и то, только после ваших правок) и написаным кем то явно на "от"""бись" или просто в образовательных целях.
Начиная переписку я не знал что этот костыль не будет отвечать моим требованиям и под мои хотелки придется писать фактически новый и более сложный скрипт. Этот скрипт не настолько мне важен (но был бы весьма кстати), чтобы его написание целенаправленно заказывать, тем более что из-за моего возможно не полного понимание некоторых скрипто-логик, я скорее всего сразу не смог бы дать полностью исчерпывающее и законченное ТЗ.
Так что если у вас имеется спортивный интерес и время то давайте не спеша по возможности доведем его до рабочего состояния с подтягиванием максимума атрибутов указанных в leases.
Каким никаким спросом эта тема пользуется, видел похожие вопросы на форумах - но не видел рабочих решений.
ПС2: Я даже не представляю на сколько готовый скрипт будет грузить систему. Вдруг он окажется очень тяжелым и не целесообразен к использованию...
:local a;
:foreach l in=[/ip dhcp-server lease find server=all] do={
:set a [/ip dhcp-server lease get $l address];
:if ([/ip arp print count-only where address=$a] = 0) do={
/ip dhcp-server lease remove $l;
}
};
В собранном итоговом скрипте, ессесно, не надо дублировать ":local".
Кстати, можно для таких leases создать отдельный сервер, чтобы понятнее было. На том же порту, просто указать ему в Relay какой-нибудь несуществующий адрес.
- Вы имеете в виду что графы в leases (Active Host Name, Bridge Port, Status) только для чтения и скрипт в низ не сможет поместить какую либо информацию?
- "В собранном итоговом скрипте, ессесно, не надо дублировать ":local"." - для меня эта фраза не очевидна.
Я повторюсь что не понимаю скрипты и собирать из кусков один не могу. Сделаю по незнанию лишний пробел - скрипт не сработает
Все хосты видеонаблюдения находятся на двух интерфейсах роутера в отдельном Bridge-Сам в отдельной подсети и DHCP-Server для них отдельный
filmoto писал(а): ↑29 дек 2023, 10:50
- Вы имеете в виду что графы в leases (Active Host Name, Bridge Port, Status) только для чтения и скрипт в низ не сможет поместить какую либо информацию?
filmoto писал(а): ↑29 дек 2023, 10:50
- "В собранном итоговом скрипте, ессесно, не надо дублировать ":local"." - для меня эта фраза не очевидна.
Я повторюсь что не понимаю скрипты и собирать из кусков один не могу. Сделаю по незнанию лишний пробел - скрипт не сработает
Тут абсолютно независимые куски, так что просто один за другим их располагайте. А объявление переменных (:local) просто в самом начале сделайте по одному разу для каждой переменной.
filmoto писал(а): ↑29 дек 2023, 10:50
Все хосты видеонаблюдения находятся на двух интерфейсах роутера в отдельном Bridge-Сам в отдельной подсети и DHCP-Server для них отдельный
Ну, тут уж на вкус и цвет... Вам из ARP надо тянуть все записи или только на этом Bridge-Сам? Если только - то в команду /ip arp find достаточно добавить фильтр по интерфейсу
"Да, вот все свойства, которые можно задать:" - эти свойства хоста мне и так станут доступны когда хост появится в leases
- Вам сложно разместить скрипт целиком? Ощущение что скрипт пишу Я, а вы мне напоминаете как это сделать...
Для меня ваши фразы:
"А объявление переменных (:local) просто в самом начале сделайте по одному разу для каждой переменной." и
"то в команду /ip arp find достаточно добавить фильтр по интерфейсу"
не очевидны и по восприятию ни чем не отличается от этой -
"Синусоидальность дидукционного индуктора некоэмутируется с хромофорной эффузией аксирогентно-адиквантного фотонного триангулятора"
"Ну, тут уж на вкус и цвет..." - Вы мне сами предложили, я вам ответил что это уже реализовано и описал как.
Да, нужно тянуть только с Bridge-Cam
filmoto писал(а): ↑30 дек 2023, 09:43
"Да, вот все свойства, которые можно задать:" - эти свойства хоста мне и так станут доступны когда хост появится в leases
Если их не заполнить - то они будут пустыми. Либо я не понял, что вы имеете в виду. Я лишь сказал, что всякие Host Name вы заполнить самостоятельно НЕ можете.
filmoto писал(а): ↑30 дек 2023, 09:43
- Вам сложно разместить скрипт целиком? Ощущение что скрипт пишу Я, а вы мне напоминаете как это сделать...
Ну, вообще я так изначально и думал, что я лишь помогаю вам написать скрипт в своё свободное время Если у вас копирование запрещено - то вы так и скажите, тогда я помогу вам с копированием.
filmoto писал(а): ↑30 дек 2023, 09:43
Для меня ваши фразы:
"А объявление переменных (:local) просто в самом начале сделайте по одному разу для каждой переменной." и
"то в команду /ip arp find достаточно добавить фильтр по интерфейсу"
не очевидны и по восприятию ни чем не отличается от этой -
"Синусоидальность дидукционного индуктора некоэмутируется с хромофорной эффузией аксирогентно-адиквантного фотонного триангулятора"
Для меня обе фразы в целом понятны, хотя ваш пример и напоминает изначальный скрипт из этой темы как минимум по степени корявости и некорректности Если даже с пониманием объявления переменных у вас проблемы - возможно, вам проще нанять кого-то, кто вам подготовит решение "под ключ", раз вы не хотите разбираться даже в базовых вещах.
filmoto писал(а): ↑30 дек 2023, 09:43
Да, нужно тянуть только с Bridge-Cam