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 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
При цьому, для скриптів, на відміну від ПЗ, можна завантажити готовий файл, так і просто написати/відредагувати його в полі Content. Спробуємо написати прямо там.

А щоб одразу було видно результат - додамо роутеру 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