Доброго всем дня! Возник интересный вопрос, можно ли на микротике отфильтровать как-то устройства по мак-адресам при выдаче IP адреса в DHCP. Ну либо хотя бы добавить их в один Address List тоже по маку. Обьясню зачем это: чтобы узнавать по маку тип устройства и добавлять его в свой адрес лист со своими правилами. Например, у нас на микрософтовском DHCP это реализовано политиками: если мак совпадает с маской или со списком маков, то адрес выдается из определенной подсети. Таким образом, все IP-телефоны у нас получают адреса из 15 подсети, а также все свои настройки шлюза, tftp, ntp и т.д. И если воткнуть в сеть новый IP-телефон Ealink, например, для которых прописана маска маков, он автоматом получит свой 15-й адрес. Не нужно ничего резервировать вручную.
предполагал что скриптами, подтолкните в нужном направлении ... фильтрацию по макам нашел только в фильтрах бриджа, но там можно только запретить или разрешить маки как я понял
ну смотрите в опция dhcp сервера есть возможность исполнять скрипт при назначении аренды. Далее пишем скрипт который будет искать эту новую аренду, смотреть его MAC и сравнивать с "базой данных" MAC и назначать ему нужные параметры в зависимости от MAC. Только это не тривиальная задачка. Если сделаете поделитесь )?
Спасибо за толчок в нужном направлении, уже кое-что набросал, погуглив вечером. Выделить отдельный пул совсем нетривиальная задача, а вот добавить в адрес-лист уже нашел как можно. А для правил файервола этого достаточно вполне. Вопрос по скрипту: можно как-то в скрипт добавлять переменные из внешнего файла? Вот, скажем, тут мы выбираем маки, начинающиеся на 00 :if ($macaddress~"00:*") do={ можно подставить вместо значения строчку из файла, ну точнее, добавить цикл и добавлять строчки из файла по-одной? Таким образом можно создать файл со списком маков или масок маков и сравнивая с ними добавлять в адрес-лист адреса. Вообще, посоветуйте ресурс где разжеван скриптовый язык микротика попонятнее чем на вики.
Это язык LUA, ищите описание по нему. "Вопрос по скрипту: можно как-то в скрипт добавлять переменные из внешнего файла?" Так сразу не подскажу, вот пример утилтки /tool fetch она забирает все китайские айпишники с сервиса www.iwik.org и записывает в файл CN. Может чем поможет. /tool fetch url=http://www.iwik.org/ipcountry/mikrotik/CN /import file-name=CN
Спасибо, сам себе отвечу по языку скриптов, вот ссылка на первоисточник, там все довольно понятно https://www.mikrotik.com/testdocs/ros/2.9/system/scripting.php Скрипт, добавляющий по маске маков в адрес лист уже получился, осталось запихнуть маки списком в файл и парсить его, как доделаю, отпишусь.
Странная реализация... Разные подсети надо располагать в разных VLANах. инче у вас все устройства находятся в одном широковещательном домене, что не очень хорошо для производительности и безопасности сети
Деление на VLANы было отвергнуто по принципиальным соображениям, да и я эти решения у нас в компании не принимаю. Есть мелкие офисы - они в отдельных VLANах сидят, а основные офисы в одном широковещательном домене, SIP телефонию отделяли, но постепенно она туда же сползается Но это оффтопик. По теме: скрипт я все-таки написал. Надо было кассы андроидные по отдельному правилу в интернет пускать. Началось с простой конструкции: foreach i in=[/ip dhcp-server lease find] do={ :local macaddress [/ip dhcp-server lease get $i mac-address] :if ($macaddress~"9C:28:40:*") do={ :local ipaddr [/ip dhcp-server lease get $i address] /ip firewall address-list add address=$ipaddr list=Kassa_ timeout=600 } } На таймаут можно не смотреть, это для тестов. Скрипт можно запихнуть в DHCP в момент выдачи аренды. Но было интересно сделать парсинг файла. Этот скрипт для запуска в шедулере, для DHCP его можно сильно упростить. Код: # Script from Welk for getting mac-addresses from file MAC.txt and adding devices with this MAC in address list # File name must begin from "MAC" and finish to "txt" # recordings of mac-adresses in file can recognise regular expressions, # last string must be empty, codepage must be UTF-8 without BOM :local filemac [/file find name~"MAC*.*txt"] :local EndString 0; :local line ""; :local StartString 0; :local content [/file get $filemac contents] :local contlen [:len $content] :local Quant 0 ; :log warning "Script for add MAC address to address list started!" ; /ip firewall address-list remove [find list=Mac_Filtered] :do { :set EndString [:find $content "\r\n" $StartString ] ; :set line [:pick $content $StartString $EndString] ; :local lenline [:len $line] :if ($lenline > 0) do={ :foreach i in=[/ip dhcp-server lease find] do={ :local macaddress [/ip dhcp-server lease get $i mac-address] :if ($macaddress~$line) do={ :set Quant ( $Quant + 1 ) ; :local ipaddr [/ip dhcp-server lease get $i address] /ip firewall address-list add address=$ipaddr list=Mac_Filtered timeout=120 ; } } } :set StartString ( $EndString + 2 ) ; } while ( $StartString < ($contlen-2) ) ; :log warning "Script for add MAC address to address list finished!" ; :log warning "Added in Access List IP addresses:" :log warning $Quant ;