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)
Username: 9249094C26CB (капіюем серыйнік з system>routerboard)
Password: 123456 (для discovery не патрэбен, але каб быў)
Periodic inform interval мы не мяняем. Гэтую настройку мы выдадзім праз наш ACS

Ніжэй ідуць наладкі для выдаленай ініцыялізацыі злучэння, але з наскоку прымусіць mikrotik з гэтым працаваць я не змог. Хоць з тэлефонамі remote request працуе "са скрынкі". Трэба будзе разбірацца.

TR-069 у Mikrotik. Выпрабоўваем Freeacs у якасці сервера аўтаканфігурацыі для RouterOS

Пасля націску кнопкі Apply - у тэрмінале пойдзе абмен дадзенымі, а ў вэб-інтэрфейсе Freeacs можна будзе ўбачыць наш роўтар з аўтаматычна створаным Unit Type "hAPaclite".

TR-069 у Mikrotik. Выпрабоўваем Freeacs у якасці сервера аўтаканфігурацыі для RouterOS

Роўтар падлучаны. Можна зазірнуць у аўтаматычна створаны Unit Type. Адкрываем Easy Provisioning > Unit Type > Unit Type Overview > hAPaclite. Чаго тамака толькі няма! Цэлых 928 параметраў (я падгледзеў у shell). Шмат гэта ці мала - разбярэмся потым, а пакуль проста бегла паглядзім. Вось што значыць Unit Type. Гэта спіс падтрымліваемых параметраў з ключамі, але без значэнняў. Значэнні задаюцца ва ўзроўнях ніжэй - Профілях і Юнітах.

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

Прыйшла пара спампаваць кіраўніцтва па вэб-інтэрфейсе Гэта кіраўніцтва 2011 года - як бутля добрага, вытрыманага віна. Давайце яго адкрыем і пакінем падыхаць.

А самі, у вэб-інтэрфейсе клікнем на аловак побач з нашым юнітам і пяройдзем у рэжым канфігурацыі юніта. Выглядае гэта так:

TR-069 у Mikrotik. Выпрабоўваем Freeacs у якасці сервера аўтаканфігурацыі для RouterOS

Каротка разбяром што ёсць цікавага на гэтай старонцы:

Блок Unit configuration

  • Profile: Гэта профіль усярэдзіне Unit Type. Іерархія такая: UnitType > Profile > Unit. Гэта значыць, мы можам завесці, напрыклад, профілі. hAPaclite > hotspot и hAPaclite > branch, але ў межах мадэлі прылады

Блок Provisioning з кнопкамі
Падказкі намякаюць, што ўсе кнопкі ў блоку Provisioning могуць маментальна ўжываць канфігурацыю праз ConnectionRequestURL. Але, як я казаў вышэй, гэта не працуе, таму пасля націску кнопак трэба будзе перазапусціць tr-069 кліент на mikrotik для ручнога старту provision.

  • Freq/Spread: Колькі разоў на тыдзень дастаўляць канфігурацыю ± %, каб знізіць нагрузку на сервер і каналы сувязі. Па дэфолце каштуе 7/20, г.зн. кожны дзень ± 20% і падказка як гэта за секундах. Пакуль няма сэнсу змяняць частату дастаўкі, т.я. будзе лішні шум у логах і не заўсёды чаканае ўжыванне налад

Блок Provisioning history (last 48 hours)

  • З выгляду гісторыя, як гісторыя, але клікнуўшы па загалоўку - пападаеш у зручную прыладу пошуку па бд, з regexp і плюшкамі

Блок Parameters

Самы вялікі і важны блок, дзе, уласна, задаюцца і чытаюцца параметры для дадзенага юніта. Цяпер мы бачым толькі найважнейшыя сістэмныя параметры, без якіх праца ACS з юнітам немагчымая. Але мы-то памятаем, што ў нас у Unit Type іх 928. Давайце паглядзім усе значэнні, і вырашым з чым гэта ўсё ядуць у мікраціку.

4.1 Чытэльны параметры

У блоку Provisioning націскаем кнопку Read all. У блоку - чырвоны надпіс. Справа з'явіцца слупок CPE (current) value. У сістэмных параметрах ProvisioningMode змяніўся на READALL.

TR-069 у Mikrotik. Выпрабоўваем Freeacs у якасці сервера аўтаканфігурацыі для RouterOS

І… нічога не адбудзецца, акрамя паведамлення ў System.X_FREEACS-COM.IM.Message Kick failed at....

Перазапусціце TR-069 client або перазагрузіце роўтар, і працягвайце абнаўляйце старонку браўзэра, пакуль не атрымаеце справа параметры ў жыццярадасных шэрых прастакутніках
Калі хто захацеў глынуць старога вытрыманага - гэты рэжым у мануале апісаны, як 10.2/XNUMX Inspection mode. Уключаецца і працуе крыху не так, але сутнасць апісана цалкам

TR-069 у Mikrotik. Выпрабоўваем Freeacs у якасці сервера аўтаканфігурацыі для RouterOS

Рэжым READALL сам выключыцца праз 15 хвілін, а мы паспрабуем разабрацца што ж тут ёсць карыснага, і што можна падправіць "на лёце", пакуль мы ў гэтым рэжыме.

Можна змяніць IP-адрасы, уключаць/адключаць інтэрфейсы, правілы фаервала, якія з каментарамі (інакш поўны бардак), вай-фай і так па дробязі.

Гэта значыць, разумна канфігураваць 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

Ініцыюем provision і глядзім на 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, няхай гэта будзе роўтэр філіяла, хотспот або капсман. Нам такі высокі ўзровень пакуль не патрэбен, таму, перш, чым працаваць са скрыптамі і файламі - варта стварыць профіль. Можна гэта сабе назваць, як "пасада" прылады.

Давайце зробім нашага малога серверам часу. Годная пасада з асобным пакетам ПЗ і невялікай колькасцю параметраў. Ідзем у Easy Provisioning > Profile > Create Profile і ствараем у Unit Type:hAPaclite профіль timeserver. Параметраў у нас у дэфолтным профілі не было, таму і капіраваць няма чаго Copy parameters from: "don't copy…"

TR-069 у Mikrotik. Выпрабоўваем Freeacs у якасці сервера аўтаканфігурацыі для RouterOS

Тут параметраў пакуль няма зусім, але можна будзе задаць тыя, што мы пазней захочам бачыць на нашых серверах часу, злепленых з hAPaclite. Напрыклад, агульныя адрасы NTP-сервераў.
Перакацім у канфігурацыю юніта, і перасоўваны яго ў профіль timeserver

Нарэшце-то ідзем у Files & Scripts, Рабіць скрыпты, і тут нас чакаюць узрушаюча зручныя плюшкі.

Для таго, каб выканаць скрыпт на юніце, нам трэба абраць Type:TR069_SCRIPT а Імя и Імя мэты павінны мець пашырэнне .alter
Пры гэтым, для скрыптоў, у адрозненне ад ПЗ, можна як загрузіць гатовы файл, так і проста напісаць/адрэдагаваць яго ў поле Змест. Давайце паспрабуем напісаць прама тамака.

А каб адразу было відаць вынік - дадамо роўтэру vlan на ether1.

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

TR-069 у Mikrotik. Выпрабоўваем Freeacs у якасці сервера аўтаканфігурацыі для RouterOS

Убіваем, націскаем Загружаць і гатова. Наш скрыпт vlan1.alter чакае сваёй гадзіны.

Ну што, пагналі? Не. Трэба яшчэ дадаць для нашага профіля групу. Групы не ўваходзяць у іерархію абсталявання, але патрэбныя для пошуку юнітаў у UnitType ці Profile і абавязковыя для выканання скрыптоў праз Advanced Provisioning. Звычайна, групы злучаны з лакацыямі, і маюць укладзеную структуру. Давайце зробім гурт Russia.

TR-069 у Mikrotik. Выпрабоўваем Freeacs у якасці сервера аўтаканфігурацыі для RouterOS

Уяўляеце мы толькі што змаглі звузіць пошук з "Усе серверы часу свету на hAPaclite" да "Усе серверы часу Расіі на hAPaclite". Там яшчэ вялізны пласт усяго цікавага з гуртамі, але нам некалі ж. Пагналі ўжо ў скрыпты.

Advanced Provisioning > Job > Create Job

TR-069 у Mikrotik. Выпрабоўваем Freeacs у якасці сервера аўтаканфігурацыі для RouterOS

Паколькі мы як-ніяк у Advanced рэжыме, то тут можна паказаць кучу розных умоў пачатку заданні, паводзін пры памылках, паўтораў і таймаўтаў. Рэкамендую гэта ўсё прачытаць у кіраўніцтвах ці пазней абмяркуем пры ўкараненні ў прадакшн. Пакуль толькі паставім n1 у Stop rules, каб заданне спынілася, як толькі выканаецца на нашым 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:

<upgrade version="1" type="links">
    <config />
    <links>
        <link>
            <url>http://192.168.0.241/routeros-mipsbe-6.45.6.npk</url>
        </link>
        <link>
            <url>http://192.168.0.241/ntp-6.45.6-mipsbe.npk</url>
        </link>
        <link>
            <url>http://192.168.0.241/tr069-client-6.45.6-mipsbe.npk</url>
        </link>
    </links>
</upgrade>

Кідаецца ў вочы недахоп Username/Password для доступу да сервера загрузкі. Можна альбо паспрабаваць упісаць гэта як у пункце A.3.2.8 пратаколу tr-069:

<link>
<url>http://192.168.0.237/routeros/stable/mipsbe/ntp-6.45.6-mipsbe.npk</url>
<Username>user</Username>
<Password>pass</Password>
</link>

Або спытаць напрамую ў афіцыялаў мікраціку, як і аб максімальнай даўжыні шляху да *.npk

Ідзем у вядомыя нам Files & Scripts, і ствараем там файл тыпу SOFTWARE з імя:ros.xml, Target Name: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

Націскаем кнопку, ініцыюем provision і гатова. Тэставая праграма завершана. Цяпер мы ўмеем рабіць з mikrotik больш.

5. заключэнне

Калі пачынаў пісаць, жадаў спачатку апісаць падлучэнне ip-тэлефона, і на яго прыкладзе растлумачыць як класна можа быць, калі tr-069 працуе лёгка і без намаганняў. Але потым, па меры прасоўвання і капання ў матэрыялах, падумаў, што таму, хто падключыў мікратык - ужо ніякі тэлефон не будзе страшны для самастойнага вывучэння.

У прынцыпе Freeacs, які мы тэставалі - ужо можна ўжываць у прадашн, але для гэтага трэба наладзіць бяспеку, SSL, трэба наладзіць мікратыкі для аўтаканфігурацыі пасля reset, трэба адладзіць карэктнае даданне Unit Type, разабраць працу webservices і fusion shell, і яшчэ шмат чаго. Спрабуйце, вынаходзьце, і пішыце працяг!

Усім, дзякуй за ўвагу! Буду рады папраўкам і каментарам!

Спіс выкарыстаных матэрыялаў і карысныя спасылкі:

Ветка форума, на якую я натыкнуўся ў пачатку пошукаў па тэме
TR-069 CPE WAN Management Protocol Amendment-6
Freeacs wiki
Параметры tr-069 у мікрацік, і іх адпаведнасць камандам тэрмінала

Крыніца: habr.com