В тази статия ще опиша стъпка по стъпка процеса на инсталиране на тестовия сървър на прекрасния проект до пълната му работоспособност и ще покажа практически техники за работа с mikrotik: конфигуриране чрез параметри, изпълнение на скриптове, обновление, инсталиране на допълнителни модули и т.н.
Целта на статията е да подтикне колегите да се откажат от управлението на мрежови устройства чрез ужасни нагаждания и костилчета, представляващи саморъчно написани скриптове, Dude, Ansible и други. И по този повод, да предизвикаме фейерверки и масово ликование на площада.
0. Избор
Защо freeacs, а не genie-acs, споменат в , като по-жив?
Поради факта, че за genie-acs с mikrotik има публикации от испанци. Ето техните и от миналогодишния MUM. Автошаржи на слайдовете — това е страхотно, но бих искал да се отдалеча от концепцията за написване на скриптове, за стартиране на скриптове, за стартиране на скриптове…
1. Инсталиране на freeacs
Ще инсталираме в Centos7, а тъй като устройствата предават достатъчно много данни и ACS активно работи с базата данни — няма да пестим ресурси. За комфортна работа ще отделим 2 ядра CPU, 4GB RAM и 16GB бързо хранилище ssd raid10. Аз ще инсталирам freeacs в lxc-контейнер на Proxmox VE, а вие можете да работите с който и да е удобен за вас инструмент.
Не забравяйте да настроите правилното време на машината с ACS.
Системата ще бъде тестова, така че няма да усложнявам и просто ще използвам любезно предоставения инсталационен скрипт, както е.
wget https://raw.githubusercontent.com/freeacs/freeacs/master/scripts/install_centos.sh
chmod +x install_centos.sh
./install_centos.shСлед като работата на скрипта приключи — веднага ще можете да влезете в уеб интерфейса по ip адреса на машината, с идентификационни данни admin/freeacs

Ето такъв приятен минималистичен интерфейс, и колко страхотно и бързо се получи всичко
2. Първоначална настройка на freeacs
Основната единица управление за ACS е юнит или CPE (Оборудване на клиентската страна). Най-важното, от което се нуждаем за управление на юнитите, е техният Unit Type, т.е. модел на оборудването, който определя комбинацията от настраиваеми параметри на юнита и неговото ПО. Но понеже не знаем как правилно да добавим нов Unit Type, най-добре е да попитаме самия юнит, като включим Discovery Mode.
В продукция такъв режим е категорично забранен, но ние трябва бързо да пуснем машината и да разгледаме възможностите на системата. Всички основни настройки се съхраняват в /opt/freeacs-*. Затова отваряме
vi /opt/freeacs-tr069/config/application-config.conf , намираме
discovery.mode = falseи го променяме на
discovery.mode = trueОсвен това, е желателно да увеличим максималните размери на файловете, с които работят nginx и mysql. За mysql добавяме в /etc/my.cnf реда
max_allowed_packet=32M, а за nginx, в /etc/nginx/nginx.conf добавяме
client_max_body_size 32m;в секция http. В противен случай можем да работим с фърмуери не повече от 1М.
Рестартираме и сме готови да работим с устройствата.
А в ролята на устройство (CPE) ще имаме малкия работливец .
Преди тестовото свързване, е желателно ръчно да настроите CPE до минималната работна конфигурация, така че параметрите, които искате да конфигурирате в бъдеще, да не са празни. За рутера минимално можете да включите dhcp-клиент на ether1, да инсталирате пакета tr-069client и да зададете пароли.
3. Свързваме Mikrotik
Всички устройства е желателно да се свързват, използвайки валиден серийен номер като потребителско име. Тогава в логовете всичко ще е ясно. Някои съветват да се използва WAN MAC — не вярвайте. Някои използват обща двойка логин/парола — избягвайте ги.
Отваряме лог tr-069 за мониторинг на 'преговорите'
tail -f /var/log/freeacs-tr069/tr069-conversation.logОтваряме winbox, менюто TR-069.
ACS URL: http://10.110.0.109/tr069/prov (заменете с вашия IP)
Потребителско име: 9249094C26CB (копираме серийната стойност от system>routerboard)
Парола: 123456 (не е необходима за discovery, но е добре да бъде на разположение)
Периодичният интервал за информираност не го променяме. Тази настройка ще я издадем чрез нашия ACS
По-долу са настройките за дистанционно инициализиране на връзката, но не успях на момента да накарам mikrotik да работи с това. Въпреки това с телефоните remote request работи 'извън кутията'. Трябва да се разследва.

След натискане на бутона Apply — в терминала ще започне обмен на данни, а в уеб интерфейса на Freeacs ще можем да видим нашия рутер с автоматично създадения тип устройство 'hAPaclite'.

Рутерът е свързан. Можем да погледнем автоматично създадения тип устройство. Отваряме Easy Provisioning > Unit Type > Unit Type Overview > hAPaclite. Какво ли няма там! Цели 928 параметри (видях в shell). Много ли е или малко — ще видим по-късно, а засега просто ще погледнем. Ето какво означава тип устройство. Това е списък на поддържаните параметри с ключове, но без стойности. Стойностите се задават на по-ниски нива — в Профилите и Юнитите.
4. Конфигурираме Mikrotik
Дойде време да изтеглим Това ръководство е от 2011 година — като бутилка добро, отлежало вино. Нека го отворим и оставим да подиша.
След това, в уеб интерфейса, щракваме на моливчето до нашия юнит и преминаваме в режим на конфигурация на юнит. Изглежда така:

Накратко ще разгледаме какво интересно има на тази страница:
Блок Конфигурация на юнит
- Профил: Това е профил в рамките на Тип юнит. Иерархията е такава:
UnitType > Профил > Юнит. Тоест, можем да създадем, например, профилиhAPaclite > hotspotиhAPaclite > branch, но в рамките на модела на устройството
Блок Provisioning с бутони
Подсказките подсказват, че всички бутони в блока Provisioning могат незабавно да приложат конфигурацията чрез ConnectionRequestURL. Но, както споменах по-горе, това не работи, затова след натискане на бутоните е необходимо да рестартирате tr-069 клиента на mikrotik за ръчно стартиране на provision.
- Freq/Spread: Колко пъти в седмицата да се доставя конфигурацията ± %, за да се намали натоварването на сървъра и комуникационните канали. По подразбиране е настроено на 7/20, т.е. всеки ден ± 20% и подсказка как е това в секунди. В момента няма смисъл да променяте честотата на доставката, тъй като ще има излишен шум в логовете и не винаги очаквани настройки.
Блок История на Provisioning (последните 48 часа)
- Историята изглежда като история, но като кликнете върху заглавието — попадате в удобен инструмент за търсене по база данни, с regexp и екстри.
Блок Параметри
Най-голямият и важен блок, където, всъщност, се задават и четат параметрите за този юнит. В момента виждаме само най-важните системни параметри, без които работата на ACS с юнита е невъзможна. Но помним, че в Тип юнит ги имаме — 928. Нека разгледаме всичките стойности и да решим с какво се хранят на mikrotik.
4.1 Четене на параметри
В блока Provisioning натискаме бутона Read all. В блока — червен надпис. Отдясно ще се появи колона CPE (текуща) стойност. В системните параметри ProvisioningMode се смени на READALL.

И... нищо няма да се случи, освен съобщение в System.X_FREEACS-COM.IM.Message Kick failed at....
Рестартирайте TR-069 клиента или рестартирайте рутера и продължавайте да обновявате страницата на браузъра, докато не получите отдясно параметрите в жизнерадостни сиви правоъгълници.
Ако някой пожелае да глътне стара запазена — този режим е описан в ръководството като 10.2 Inspection mode. Включва се и работи малко по-различно, но същността е напълно описана.

Режимът READALL сам ще се изключи след 15 минути, а ние ще опитаме да разберем какво полезно има тук и какво можем да коригираме "на лету", докато сме в този режим.
Можете да променяте IP адресите, да включвате/изключвате интерфейси, правила на фаервола с коментари (иначе ще е пълен безпорядък), Wi-Fi и други малки детайли.
Тоест, за момента не е възможно да конфигурирате Mikrotik по разумен начин само с TR-069. Но е възможно много добре да следите. Налична е статистика за интерфейсите и техния статус, свободна памет и т.н.
4.2 Доставяне на параметри
Сега нека опитаме да доставим параметри на рутера чрез TR-069, по "естествени" начини. Първата жертва ще бъде Device.DeviceInfo.X_MIKROTIK_SystemIdentity. Намираме го в параметрите на юнита All. Както виждате — той не е зададен. Това означава, че всеки юнит може сам да притежава всякакъв Identity. Достатъчно с това търпение!
Слагаме отметка в колоната create, задаваме име Mr.White и натискаме бутона Update parameters. Какво ще стане след това, вече сте се досетили. При следващата сесия на връзка с централата, рутерът трябва да промени своя Identity.

Но това не е достатъчно. Такъв параметър като Identity е добре да имаме под ръка при търсене на нужния юнит. Натискаме името на параметъра и задаваме отметки Display(D) и Searchable (S). Ключът на параметъра се променя на RWSD (Помнете, имената и ключовете се задават на най-високо ниво на Unit Type)

Сега стойността не само се показва в общия списък за търсене, но и е налична за търсене в Support > Search > Advanced form

Инициираме provision и наблюдаваме Identity. Здравейте, Mr.White! Сега не можете сами да сменяте личността, докато работи tr-069client.

4.3 Изпълнение на скриптове
След като установихме, че без тях не може, — да ги изпълняваме.
Но преди да започнем работа с файловете — трябва да коригираме директивата public.url в файла /opt/freeacs-tr069/config/application-config.conf
Все пак, ние все още имаме тестова конфигурация, инсталирана с един скрипт. Не забравихте ли?
# --- Public url (used for download f. ex.) ---
public.url = "http://10.110.0.109"
public.url: ${?PUBLIC_URL}Рестартираме ACS и се насочваме директно към Files & Scripts.

Но това, което се отваря сега, принадлежи на Unit Type, т.е. глобално за всички рутери hAP ac lite, независимо дали става дума за рутер на клон, хотспот или капсман. Такъв висок ниво не ни е нужен за момента, така че, преди да работим със скриптове и файлове — трябва да създадем профил. Може да му дадете име, което да определя "должността" на устройството.
Нека направим нашето момче сървър на време. Достойна позиция с отделен софтуерен пакет и малко параметри. Отиваме на Easy Provisioning > Profile > Create Profile и създаваме в Unit Type:hAPaclite профила timeserver. В дефолтния профил нямаме параметри, така че няма какво да копираме. Копирайте параметри от: «не копирайте…»

Тук все още няма параметри, но можем да зададем тези, които по-късно бихме искали да виждаме на нашите сървъри, направени от hAPaclite. Например, общи адреси на NTP сървъри.
Преминаваме към конфигурацията на юнита и го преместваме в профила timeserver.
Най-накрая се насочваме към Files & Scripts, за да правим скриптове, и тук ни очакват изумително удобни функции.
За да изпълним скрипт на юнита, трябва да изберем Type:TR069_SCRIPT и Name и Целево име трябва да имат разширение .alter
При това, за скриптовете, за разлика от софтуера, можем както да качим готов файл, така и просто да го напишем/редактираме в полето Съдържание. Нека опитаме да напишем направо там.
А за да видим резултата веднага — да добавим VLAN на роутера на ether1.
/interface vlan
add interface=ether1 name=vlan1 vlan-id=1
Веждаме, натискаме Upload и готово. Нашият скрипт vlan1.alter чака своя час.
И какво ще правим? Не. Трябва да добавим група за нашия профил. Групите не влизат в йерархията на оборудването, но са необходими за търсене на юнити в UnitType или Profile и са задължителни за изпълнение на скриптове чрез Advanced Provisioning. Обикновено групите са свързани с локации и имат вложена структура. Нека направим група Русия.

Представяте ли си, че току-що успяхме да стесним търсенето от «Всички сървъри на време в света на hAPaclite» до «Всички сървъри на време в Русия на hAPaclite». Има още много интересни неща с групите, но нямаме време. Хайде да продължим към скриптовете.
Advanced Provisioning > Job > Създай работа
Тъй като сме в Advanced режим, можем да зададем много различни условия за стартиране на задачата, поведение при грешки, повторения и таймаути. Препоръчвам да прочетете всичко това в ръководствата или да го обсъдим по-късно при внедряването. Затова просто ще поставим n1 в Stop rules, така че задачата да спре, веднага щом бъде изпълнена на нашия 1 юнит.
Попълваме необходимото и остава само да стартираме!

Натискаме START и чакаме. Сега лесно ще тръгне броячът на устройствата, убити от недоизработения скрипт! Не, разбира се. Такива задачи отнемат време, и това е тяхната разлика от скриптовете, Ansible и др. Юнитите сами искат задания по разписание или при появата им в мрежата, ACS води запис на кои юнити вече са получили задания и как са завършили и записва това в параметрите на юнита. В нашата група има 1 юнит, а да бяха 1001 — администраторът би стартирал задачата и щеше да отиде на риба.
Хайде. Рестартирайте рутера или перезапустете TR-069 клиента. Всичко трябва да мине гладко и Mr.White ще получи нов VLAN. Нашата задача по Stop rule ще премине в статус PAUSED. Тоест, все още може да бъде рестартирана или променена. Ако натиснете FINISH — задачата ще бъде архивирана.
4.4 Обновяване на софтуера
Това е много важен момент, тъй като фърмуерът на Mikrotik е модулен, но добавянето на модули не променя общата версия на фърмуера на устройството. Нашият ACS е нормален, и не сме свикнали на такова.
Сега ще го направим в стил quick&dirty и ще вкараме модула NTP в общия фърмуер веднага, но щом версията на устройството бъде обновена — няма да можем да добавим още модули по същия начин.
В продукция такъв трик не бива да се прилага и да се инсталират модули, които не са задължителни за типа на устройството, само чрез скриптове.
И така, първото нещо, което трябва да направим, е да подготвим пакетите на софтуера с нужните версии и архитектури и да ги сложим на достъпен уебсървър. За тест подхожда всеки, до който Mr.White може да достигне, а за продукция по-добре да съберем автообновяваща се огледална версия на нужния софтуер, която може да бъде оставена в уеб.
Важно! Никога не забравяйте да включите в обновленията пакета с tr-069client!
Както се оказа, дължината на пътя до пакетите е много важна! При опитите ми да използвам нещо като http://192.168.0.237/routeros/stable/mipsbe/routeros-mipsbe-6.45.6.npk, Mikrotik падна в циклична връзка с ресурса, връщайки в tr-069 лог повтарящи се TRANSFERCOMPLETE. И изразходвах известно количество нервни клетки, опитвайки се да разбера какво е не така. Затова, докато не изясним, ще го сложим в корена.
И така, трябва да имаме три npk файла, достъпни по http. При мен се получи следното:
http://192.168.0.241/routeros-mipsbe-6.45.6.npk
http://192.168.0.241/routeros/stable/mipsbe/ntp-6.45.6-mipsbe.npk
http://192.168.0.241/routeros/stable/mipsbe/tr069-client-6.45.6-mipsbe.npkСега това трябва да бъде оформено в XML файл с FileType="1 Firmware Upgrade Image", който ще подадем на Mikrotik. Нека името да бъде ros.xml.
Правим според инструкциите от :
http://192.168.0.241/routeros-mipsbe-6.45.6.npk
http://192.168.0.241/ntp-6.45.6-mipsbe.npk
http://192.168.0.241/tr069-client-6.45.6-mipsbe.npkЛипсва очевидно Потребителско име / Парола за достъп до сървъра за зареждане. Можете или да опитате да го запишете както в точка A.3.2.8 от протокола tr-069:
http://192.168.0.237/routeros/stable/mipsbe/ntp-6.45.6-mipsbe.npk
user
passИли попитайте директно у официалните представители на Mikrotik каква е максималната дължина на пътя до *.npk
Отиваме в известните ни Files & Scripts, и създаваме там файл тип SOFTWARE с Име:ros.xml, Target Name:ros.xml и Version:6.45.6
Внимание! Версията тук трябва да бъде посочена точно в този формат, в който се показва на устройството и се предава в параметъра System.X_FREEACS-COM.Device.SoftwareVersion.
Избираме за зареждане нашия xm-файл и готово.

Сега имаме множество начини за обновление на устройството. Через Wizard в главното меню, через Advanced Provisioning и задания с тип SOFTWARE, или просто да влезем в конфигурацията на юнита и да натиснем Upgrade. Изберем най-простия път, защото и така статията стана дълга.

Натискаме бутона, инициираме provision и готово. Тестовата програма приключи. Сега можем да правим повече с Mikrotik.
5. Заключение
Когато започнах да пиша, първоначално исках да опиша свързването на IP телефон и на неговия пример да обясня как е страхотно, когато TR-069 работи лесно и без усилия. Но след това, с напредването и копането в материалите, осъзнах, че за този, който е свързал Mikrotik — вече нито един телефон няма да му е страшен за самообучение.
Всъщност, Freeacs, който тестваме — вече може да се прилага в продукция, но за това трябва да се настрои сигурността, SSL, трябва да се настроят Mikrotik за автоматична конфигурация след reset, трябва да се отстрани коректното добавяне на Unit Type, да се разбере работата на webservices и fusion shell, и още много неща. Опитайте, изобретявайте и пишете продължение!
На всички, благодаря за вниманието! Ще се радвам на поправки и коментари!
Списък с използваните материали и полезни линкове:
Източник: habr.com
