TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

В тази статия ще опиша стъпка по стъпка процеса на инсталиране на тестов сървър за прекрасния проект Freeacs до напълно работоспособно състояние и ще покажа практическите техники за работа с mikrotik: конфигурация чрез параметри, изпълнение на скриптове, актуализация, инсталация на допълнителни модули и т.н.

Целта на статията е да подтикне колегите да се откажат от управлението на мрежови устройства с помощта на ужасни и неефективни инструменти, като самописани скриптове, Dude, Ansible и др. И по този повод да предизвикаме фойерверки и масово възторг на площадите.

0. Избор

Защо freeacs, а не genie-acs, споменат в mikrotik-wiki, като по-живен?
Защото за genie-acs с mikrotik има публикации на испанци. Ето техните pdf и видео от миналогодишното 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

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS
Ето какъв приятен минималистичен интерфейс, и как всичко се получи бързо и удобно

2. Първоначална настройка на freeacs

Основната единица за управление на ACS е юнит или CPE (Customer Premises Equipment). А най-важното, което ни трябва за управление на юнитите, е техният 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) ще имаме малкия работник hAP AC lite.

Преди тестовото свързване, е добре ръчно да настроите 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 работи „от кутията“. Трябва да се разучава.

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

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

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

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

4. Конфигурираме Mikrotik

Дойде време да свалим ръководството по уеб интерфейса Това е ръководство от 2011 година — като бутилка хубаво, старо вино. Нека да го отворим и оставим да поеме въздух.

А ние, в уеб интерфейса, ще кликнем на моливчето до нашия юнит и ще преминем в режим на конфигурация на юнита. Изглежда ето така:

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

Накратко ще разгледаме какво е интересно на тази страничка:

Блок Конфигурация на юнит

  • Профил: Това е профил в рамките на Типа юнит. Иерархията е такава: UnitType > Профил > Юнит. Тоест, можем да създадем, например, профили hAPaclite > hotspot и hAPaclite > branch, но в рамките на модела на устройството

Блок Програмно осигуряване с бутони
Подсказките показват, че всички бутони в блока Програмно осигуряване могат мигновено да прилагат конфигурацията чрез ConnectionRequestURL. Но, както казах по-горе, това не работи, затова след натискане на бутоните ще трябва да рестартирате tr-069 клиента на mikrotik за ръчно стартиране на осигуряването.

  • Freq/Spread: Колко пъти в седмицата да се доставя конфигурацията ± %, за да се намали натоварването на сървъра и комуникационните канали. По подразбиране е зададено 7/20, т.е. всеки ден ± 20% и подсказка как това е в секунди. В момента няма смисъл да променяме честотата на доставките, тъй като ще има излишен шум в логовете и не винаги очаквано прилагане на настройките

Блок История на програмното осигуряване (последните 48 часа)

  • На вид история, като история, но кликвайки върху заглавието — попадаш в удобен инструмент за търсене по БД, с regexp и екстри

Блок Параметри

Най-голямият и важен блок, където всъщност се задават и четат параметрите за този юнит. Сега виждаме само най-важните системни параметри, без които работата на ACS с юнита е невъзможна. Но ние помним, че в Типа юнит те са — 928. Нека погледнем всички стойности и да решим с какво това всичко се яде при микротик.

4.1 Четене на параметри

В блока Програмно осигуряване натискаме бутона Прочети всички. В блока — червен надпис. Отдясно ще се появи колона CPE (текуща) стойност. В системните параметри ProvisioningMode се смени на READALL.

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

И… няма да се случи нищо, освен съобщение в System.X_FREEACS-COM.IM.Message Кикът неуспешно на....

Рестартирайте TR-069 клиента или рестартирайте рутера и продължавайте да обновявате страничката на браузера, докато не получите отдясно параметри в жизнерадостни сиви правоъгълници
Ако някой пожелае да опита малко старо изискано — този режим е описан в ръководството като 10.2 Режим на инспекция. Включва се и работи малко по различен начин, но същността е представена напълно

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

Режимът 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.

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

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

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

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

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

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

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

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.

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

Но това, което се отваря в момента, принадлежи на Unit Type, т.е. глобално на всички рутери hAP ac lite, независимо дали е рутер на клон, хотспот или capman. Такова високо ниво не ни е необходимо в момента, затова, преди да работим със скриптове и файлове - трябва да създадем профил. Може да го наречем „позиция“ на устройството.

Нека направим нашето детенце времеви сървър. Достойна позиция с отделен пакет софтуер и малък набор от параметри. Отиваме на Easy Provisioning > Profile > Create Profile и създаваме в Unit Type:hAPaclite профил timeserver. Нямаше параметри в дефолтния профил, така че няма какво да копираме. Копирайте параметрите от: «не копирайте…»

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

Тук в момента няма никакви параметри, но ще можем да зададем тези, които по-късно искаме да виждаме на нашите сървъри за време, създадени от hAPaclite. Например, общите адреси на NTP сървъри.
Преходяме към конфигурацията на юнита и го преместим в профила timeserver

Най-накрая отиваме в Files & Scripts, да правим скриптове, и тук ни чакат страхотни удобства.

За да изпълним скрипт на юнита, трябва да изберем Тип: TR069_SCRIPT а Name и Име на целта трябва да имат разширение .alter
При това, за скриптовете, за разлика от софтуера, можем както да заредим готов файл, така и просто да го напишем/редактираме в полето Съдържание. Нека опитаме да напишем директно там.

А за да виждаме резултата веднага — добавяме VLAN на рутера на ether1

/interface vlan
add interface=ether1 name=vlan1 vlan-id=1

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

Въвеждаме, натискаме Upload и готово. Нашият скрипт vlan1.alter очаква своя час.

Какво, да тръгнем? Не. Трябва да добавим за нашия профил група. Групите не влизат в йерархията на оборудването, но са необходими за търсене на юнити в UnitType или Profile и са задължителни за изпълнение на скриптове чрез Advanced Provisioning. Обикновено, групите са свързани с локации и имат вложена структура. Нека създадем група Русия.

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

Представяте ли си, току-що намалихме търсенето от «Всички сървъри за време на света на hAPaclite» до «Всички сървъри за време на Русия на hAPaclite». Има още огромен пласт от интересни неща с групи, но нямаме време. Нека да се хванем за скриптовете.

Advanced Provisioning > Job > Create Job

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

Тъй като сме в Advanced режим, тук можем да зададем куп различни условия за начало на задача, поведение при грешки, повторения и таймаути. Препоръчвам да прочетете всичко това в ръководствата или по-късно да обсъдим при внедряването в продукция. За сега просто поставяме n1 в Правилата за спиране, за да се спре задачата, щом бъде изпълнена на нашия 1 юнит.

Запълваме необходимото и остава само да стартираме!

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

Натискаме START и чакаме. Сега бързо ще се върти броят на устройствата, убити от неразработения скрипт! Не, разбира се. Такива задачи се дават за дълго, и в това е тяхната разлика от скриптовете, Ansible и др. Юнитите сами се обръщат за задачи по график или при появата си в мрежата, ACS води отчет за кои юнити вече са получили задачи, как са завършили и записва това в параметрите на юнита. В нашата група има 1 юнит, а ако бяха 1001 — администраторът би стартирал тази задача и щеше да отиде на риболов.

Хайде. Рестартирайте рутера или перезапуснете TR-069 клиента. Всичко трябва да мине гладко и Mr.White ще получи нов vlan. Нашата задача по Stop rule ще премине в статус PAUSED. Тоест, все още може да бъде перезапусната или променена. Ако натиснете FINISH — задачата ще бъде архивирана.

4.4 Актуализираме софтуера

Това е много важен момент, тъй като фърмуера на микротика е модулен, но добавянето на модули не променя общата версия на фърмуера на устройството. Нашият ACS е нормален и не сме свикнали на такова.
В момента ще направим в стил quick&dirty и ще вградим модула NTP в общия фърмуер, но веднага щом версията на устройството бъде актуализирана — не можем да добавим още модули по същия начин.
В продукция такъв трик е по-добре да не се прилага и да се инсталират не задължителни модули за Unit Type само с помощта на скриптове.

И така, първото, което трябва да направим, е да подготвим пакетите на софтуера с нужните версии и архитектура и да ги поставим на достъпен уеб сървър. За тест ще върши всякакъв, до който нашият Mr.White може да достигне, а за продукция е по-добре да съберем автоново обновяемо огледало на необходимия софтуер, който не е опасно да изложим в web.
Важно! Никога не забравяйте да включите в актуализациите пакета с 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", който ще подадем на микротика. Нека името бъде ros.xml.

Правим по инструкциите от mikrotik-wiki:

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

Липсва Username/Password за достъп до сървъра за зареждане. Можете или да опитате да го напишете, както в точка 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, Целево име:ros.xml и Версия:6.45.6
Внимание! Версията тук трябва да бъде посочена в точно такъв формат, в какъвто се показва на устройството и се предава в параметъра System.X_FREEACS-COM.Device.SoftwareVersion.

Избираме нашия xm-файл за зареждане и е готово.

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

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

TR-069 в Mikrotik. Изпробваме Freeacs като сървър за автоматична конфигурация за RouterOS

Натискаме бутона, инициираме провизия и е готово. Тестовата програма е завършена. Сега знаем как да правим повече с Mikrotik.

5. Заключение

Когато започнах да пиша, първоначално исках да опиша свързването на IP-телефон и на неговия пример да обясня как чудесно може да бъде, когато TR-069 работи лесно и без усилия. Но след това, по време на напредването и проучването на материалите, помислих, че на когото е свързан Mikrotik — вече никакъв телефон няма да му е страшен за самостоятелно изучаване.

Всъщност Freeacs, който тествахме — вече може да се прилага в продукция, но за целта трябва да настроим сигурността, SSL, да настроим Mikrotik-ите за автоконфигурация след нулиране, да оптимизираме правилното добавяне на Unit Type, да разгледаме работа на уебсервиси и fusion shell, и още много неща. Опитвайте, изобретявайте и пишете продължение!

На всички, благодаря за вниманието! Ще се радвам на поправки и коментари!

Списък на използваните материали и полезни връзки:

Форумен пост, на който попаднах в началото на търсенията си по темата
TR-069 CPE WAN Management Protocol Amendment-6
Freeacs wiki
Параметри на TR-069 в Mikrotik и тяхното съответствие на командите в терминала

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster