У цій статті я спробую покроково описати процес встановлення тестового сервера прекрасного проекту.
Мета статті - підштовхнути колег до відмови від управління мережевими пристроями за допомогою жахливих граблів і милиць, у вигляді самописних скриптів, Dude, Ansible та ін. І з цього приводу викликати салюти та масове тріумфування на площах.
0. вибір
Чому freeacs, а не genie-acs, згаданий у
Тому що за genie-acs з mikrotik є публікації іспанців. Ось їх
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 (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) у нас буде малюк-трудяга
Перед тестовим підключенням, бажано вручну налаштувати 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 працює "з коробки". Потрібно буде розбиратися.
Після натискання кнопки Apply — у терміналі піде обмін даними, а у веб-інтерфейсі Freeacs можна буде побачити наш роутер із автоматично створеним Unit Type «hAPaclite».
Роутер підключено. Можна заглянути до автоматично створеного Unit Type. Відкриваємо Easy Provisioning > Unit Type > Unit Type Overview > hAPaclite
. Чого там тільки нема! Цілих 928 параметрів (я підглянув у shell). Багато це чи мало — розберемося потім, а поки що просто побіжно подивимося. Ось що означає Unit Type. Це список параметрів, що підтримуються з ключами, але без значень. Значення задаються в рівнях нижче - Профілях та Юнітах.
4. Конфігуруємо Mikrotik
Настав час завантажити
А самі, у веб-інтерфейсі клікнемо на олівець поруч із нашим юнітом і перейдемо в режим конфігурації юніта. Виглядає це так:
Коротенько розберемо що є цікавого на цій сторінці:
Блок 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.
І… нічого не станеться, окрім повідомлення в System.X_FREEACS-COM.IM.Message Kick failed at...
.
Перезапустіть TR-069 client або перезавантажте роутер, і продовжуйте оновлювати сторінку браузера, доки не отримаєте праворуч параметри у життєрадісних сірих прямокутниках
Якщо хтось захотів ковтнути старого витриманого — цей режим у мануалі описаний, як 10.2 Inspection mode. Включається та працює трохи не так, але суть описана цілком
Режим READALL сам вимкнеться через 15 хвилин, а ми спробуємо розібратися що тут є корисного, і що можна підправити «на льоту», поки ми в цьому режимі.
Можна змінити IP-адреси, включати/відключати інтерфейси, правила фаєрволу, які з коментарями (інакше повний бардак), вай-фай і так по дрібниці.
Тобто, осудно конфігурувати 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. Параметрів у нас у дефолтному профілі не було, тому й копіювати нема чого Copy parameters from: «don't copy…»
Тут параметрів поки немає зовсім, але можна буде задати ті, що ми захочемо бачити на наших серверах часу, зліплених з hAPaclite. Наприклад, загальні адреси NTP-серверів.
Перехотіли в конфігурацію юніта, і переміщаємо його в профіль timeserver
Нарешті йдемо в Files & Scripts
, Скрипти, і тут нас чекають зручні плюшки.
Для того, щоб виконати скрипт на юніті, нам потрібно вибрати Type:TR069_SCRIPT а ІМ'Я и Назва цілі повинні мати розширення .alter
При цьому, для скриптів, на відміну від ПЗ, можна завантажити готовий файл, так і просто написати/відредагувати його в полі Content. Спробуємо написати прямо там.
А щоб одразу було видно результат - додамо роутеру vlan на ether1
/interface vlan
add interface=ether1 name=vlan1 vlan-id=1
Вбиваємо, натискаємо Завантажувати та готове. Наш скрипт vlan1.alter
чекає свого часу.
Ну що, погнали? Ні. Треба ще додати до нашого профілю групу. Групи не входять до ієрархії обладнання, але потрібні для пошуку юнітів у UnitType або Profile і є обов'язковими для виконання скриптів через Advanced Provisioning. Зазвичай групи пов'язані з локаціями і мають вкладену структуру. Давайте зробимо гурт Russia.
Представляєте ми щойно змогли звузити пошук з «Всі сервери часу світу на hAPaclite» до «Всі сервери часу Росії на hAPaclite». Там ще величезний пласт всього цікавого з групами, але нам ніколи. Погнали вже у скрипти.
Advanced Provisioning > Job > Create Job
Оскільки ми як-не-як в Advanced режимі, то тут можна вказати купу різних умов початку завдання, поведінки при помилках, повторів і тайм-аут. Рекомендую це все прочитати в посібниках або пізніше обговоримо при впровадженні в продакшн. Поки що поставимо n1 у Stop rules, щоб завдання зупинилося, як тільки виконається на нашому 1 юніті.
Заповнюємо необхідне і залишилося тільки запустити!
Натискаємо 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
Робимо за інструкцією з
<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-файл та готове.
Тепер у нас є безліч способів оновити пристрій. Через Wizard у головному меню, через Advanced Provisioning та завдання з типом SOFTWARE, або просто зайти в конфігурацію юніту та натиснути Upgrade. Виберемо найпростіший шлях, а то й так стаття розпухла.
Натискаємо кнопку, ініціюємо provision та готово. Тестову програму завершено. Тепер ми вміємо робити із mikrotik більше.
5. висновок
Коли починав писати, хотів спочатку описати підключення IP-телефону, і на його прикладі пояснити як класно можливо, коли tr-069 працює легко і без зусиль. Але потім, у міру просування та копання в матеріалах, подумав, що тому, хто підключив мікротик, вже ніякий телефон не буде страшний для самостійного вивчення.
У принципі Freeacs, який ми тестували - вже можна застосовувати в продаж, але для цього треба налаштувати безпеку, SSL, треба налаштувати мікротики для автоконфігурації після reset, треба налагодити коректне додавання Unit Type, розібрати роботу webservices і fusion shell, і ще багато чого. Пробуйте, вигадуйте, і пишіть продовження!
Всім дякую за увагу! Буду радий поправкам та коментарям!
Список використаних матеріалів та корисні посилання:
Джерело: habr.com