В данной инструкции описан процесс обновления AxelNAC 0.8.1 до версии 0.9.0, процесс проверки обновления конфигурационных файлов, а также приведен список ошибок, которые могут появиться в процессе обновления.
Если на какой-либо машине версия ядра выше 5.10.0-30, то перед обновлением версии AxelNAC необходимо обновить iptables-netflow. Для этого выполните следующие шаги:
Шаг 1. Распакуйте архив docker-anac-update.tar с помощью команды:
tar -xvf docker-anac-update.tar -C /
Шаг 2. Для установки обновления iptables-netflow разархивируйте установочный файл iptables-netflow_2.5.1.orig.tar.gz в отдельный каталог (например, dir_to_arch/ipt-netflow-2.5.1) с помощью команды:
tar -xvf iptables-netflow_2.5.1.orig.tar.gz -C /dir_to_arch/ipt-netflow-2.5.1
Шаг 3. Перейдите в каталог с разархивированными установочными файлами (например, dir_to_arch/ipt-netflow-2.5.1) и запустите установку, последовательно выполнив следующие команды:
cd /dir_to_arch/ipt-netflow-2.5.1
./configure
make all install
Шаг 4. Перезагрузите систему и запустите скрипт установки обновления AxelNAC.
Во время установки обновления могут возникнуть ошибки, которые не являются критическими и которые можно пропустить.
Служба Man DB может быть удалена на сервере.
DELETE MAN-DB
mv: cannot stat '/usr/bin/mandb': No such file or directory
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package man-db
update-alternatives: warning: forcing reinstallation of alternative /etc/mysql/mariadb.cnf because link group my.cnf is broken
update-alternatives: warning: not replacing /etc/mysql/my.cnf with a link
Selecting previously unselected package mariadb-server-10.5.
Please ignore the following error about deb-systemd-helper not finding those services.
(samba-ad-dc.service masked)
Failed to preset unit: Unit file /etc/systemd/system/samba-ad-dc.service is masked.
/usr/bin/deb-systemd-helper: error: systemctl preset failed on samba-ad-dc.service: No such file or directory
nmbd.service is a disabled or a static unit not running, not starting it.
samba-ad-dc.service is a disabled or a static unit not running, not starting it.
smbd.service is a disabled or a static unit not running, not starting it.
>> ждем....идет распаковка и загрузка docker img !!!
6e0e62c618c6: Loading layer [==================================================>] 487.6MB/487.6MB
Loaded image: tacacs-main:latest
b8ea65c52bac: Loading layer [==================================================>] 497.9MB/497.9MB
Loaded image: tacacs-ui:latest
After=anac-tacacs.service
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
iptables: No chain/target/match by that name.
iptables: No chain/target/match by that name.
Created symlink /etc/systemd/system/multi-user.target.wants/anac-tacacs.service → /etc/systemd/system/anac-tacacs.service.
A dependency job for anac-tacacs.service failed. See 'journalctl -xe' for details.
Created symlink /etc/systemd/system/multi-user.target.wants/anac-tacacs-cfg-change.service → /etc/systemd/system/anac-tacacs-cfg-change.service.
A dependency job for anac-tacacs-cfg-change.service failed. See 'journalctl -xe' for details.
Created symlink /etc/systemd/system/multi-user.target.wants/anac-tacacs-ui.service → /etc/systemd/system/anac-tacacs-ui.service.
A dependency job for anac-tacacs-ui.service failed. See 'journalctl -xe' for details.
Контейнеры TACACS+ будут видны при выводе команды docker ps, но могут не отображаться в службах AxelNAC при выполнении команды /usr/local/pf/bin/pfcmd service pf status.
В данном разделе представлены скрипты для обновления AxelNAC до версии 0.9.0:
В данном файле необходимо закомментировать все строчки, кроме последней, последняя строчка должна обязательно иметь окончание "bullseye main":
...
#deb https://deb.debian.org/debian bullseye-backports main
#deb-src https://deb.debian.org/debian bullseye-backports main
#deb http://10.31.202.12:8081/repository/anac-deb-proxy/ bullseye main contrib
#deb http://10.31.202.12:8081/repository/anac-deb-proxy-sec/ bullseye-security main contrib
deb [trusted=yes] file:/srv/anac-repo/ bullseye main
В данном файле необходимо закомментировать все строчки:
#deb http://10.31.202.12:8081/repository/anac-apt/ bullseye main
#deb http://10.31.202.12:8081/repository/anac-release/ bullseye main
При выполнении обновления будут внесены изменения в следующие файлы:
При установке обновленной версии из OVA- или ISO-сборки агент инициализации Win-Agent появится только после перезапуска кластера.
Для создания базы данных и активации работы TACACS+ выполните следующие команды:
#!bin/bash
source /srv/lib.func
add_old_tacacs
Перед началом обновления рекомендуется выполнить резервное копирование каталога conf/, чтобы, при необходимости, восстановить настройки.
Для того, чтобы выполнить обновление AxelNAC до версии 0.9.0, необходимо выполнить следующие действия:
Шаг 1. Перенесите пакет обновления и скрипт для него на все узлы кластера в раздел /srv/.
Шаг 2. Подготовьте скрипт обновления базы данных — update_db.sql и перенесите его на мастер-узел кластера.
Шаг 3. Выполните создание снапшотов текущего состояния каждого из узлов кластера, чтобы избежать потери данных кластера. Выключение каждой следующей виртуальной машины происходит только после полного восстановления предыдущей.
Снапшоты текущего состояния узлов необходимо формировать в выключенном состоянии виртуальной машины, чтобы избежать потери синхронизации базы данных при восстановлении предыдущего состояния из снапшота.
Шаг 4. Выполните на мастер-узле обновление базы данных mariadb с помощью следующей команды:
mysql -u root -p pf < db_update.sql
Шаг 5. Выведите узел из кластера.
Шаг 5.1. Отключите службу cluster_check. Для этого перейдите в раздел Конфигурация → Настройки системы → Основные настройки → Обслуживание и нажмите на переключатель слева от имени службы.
Шаг 5.2. Для отключения узла также необходимо выполнить перезапуск службы pfcron. Для этого нажмите на имя службы в левом верхнем углу страницы и в выпадающем списке выберите Перезапустить все по очереди.
Шаг 5.3. Отключите обновляемый узел от кластера, выполнив на нем следующие команды:
/usr/local/pf/bin/cluster/node <ИМЯ_ХОСТА_УЗЛА1> disable
/usr/local/pf/bin/cluster/node <ИМЯ_ХОСТА_УЗЛА2> disable
...
Шаг 5.4. Чтобы остальные узлы не пытались вернуть обновляемый узел в кластер, выполните на них следующую команду:
/usr/local/pf/bin/cluster/node <ИМЯ_ХОСТА_ОБНОВЛЯЕМОГО_УЗЛА> disable
Шаг 5.5. На обновляемом узле перезапустите службу mariadb:
systemctl restart packetfence-mariadb
Для того, чтобы убедиться, что узел был выведен из кластера, запустите на других узлах вывод журнала с помощью команды journalctl -ft mysqld, и выведите содержимое из mysql с помощью команды mysql > show status like '%wsrep_incoming%';. Если предыдущие шаги были выполнены корректно, в журнале будет отсутствовать адрес обновляемого узла.
Шаг 6. Выполните скрипт local-upgrade.sh для старта локального обновления:
cd /srv
bash local-upgrade.sh
#согласиться с установкой AxelNAC
AxelNAC version 0.9.0 will be installed? Continue [y/n]: Y
#согласиться с установкой новых файлов конфигурации
При успешном обновлении будут отображены сообщения:
AxelNAC version 0.9.0 installed successfully
dpkg: warning: downgrading freeradius-common from 3.2.1+git to 3.2.1+0011+103139+ccd36a96+ci1
(Reading database ... 162983 files and directories currently installed.)
Preparing to unpack .../freeradius-common_3.2.1+0011+103139+ccd36a96+ci1_all.deb ...
Unpacking freeradius-common (3.2.1+0011+103139+ccd36a96+ci1) over (3.2.1+git) ...
Setting up freeradius-common (3.2.1+0011+103139+ccd36a96+ci1) ...
При возникновении ошибки будет выведено сообщение с причиной ее возникновения и результатом исправления. Например, при несоответствии версий RADIUS, будет выведено следующее сообщение:
ipt_NETFLOW.ko:
Running module version sanity check.Original moduleNo original module exists within this kernelInstallationInstalling to /lib/modules/5.10.0-28-amd64/updates/dkms/depmod...DKMS: install completed.
Building initial module for 5.10.0-33-amd64
Error! Bad return status for module build on kernel: 5.10.0-33-amd64 (x86_64)
Consult /var/lib/dkms/ipt-netflow/2.5.1/build/make.log for more information.
dpkg: error processing package iptables-netflow-dkms (--configure):
installed iptables-netflow-dkms package post-installation script subprocess returned error exit status 10
dpkg: dependency problems prevent configuration of axelnac:
axelnac depends on iptables-netflow-dkms; however:
Package iptables-netflow-dkms is not configured yet.dpkg: error processing package axelnac (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
iptables-netflow-dkms
Шаг 7. Убедитесь, что пакет обновлений установился и конфигурационные файлы обновились. Процесс проверки приведен в разделе ниже.
Шаг 8. Восстановите обновляемый узел в кластере, выполнив следующие команды:
/usr/local/pf/bin/cluster/node <ИМЯ_ХОСТА_УЗЛА1> enable
/usr/local/pf/bin/cluster/node <ИМЯ_ХОСТА_УЗЛА2> enable
...
После этого активируйте обновляемый узел на всех остальных узлах с помощью команды:
/usr/local/pf/bin/cluster/node <ИМЯ_ХОСТА_ОБНОВЛЯЕМОГО_УЗЛА> enable
Шаг 9. Отключите режим обслуживания с помощью команды:
/usr/local/pf/bin/cluster/maintenance --deactivate
Рекомендуется убедиться, что узел вернулся в кластер. Для этого запустите на других узлах вывод журнала с помощью команды journalctl -ft mysqld, и выведите содержимое из mysql с помощью команды mysql > show status like '%wsrep_incoming%';. Если предыдущие шаги были выполнены корректно, в журнале будет присутствовать адрес обновляемого узла.
Шаг 10. Повторите шаги 5-10, кроме шага 8, для обновления остальных узлов. Мастер-узел обновляется последним.
Шаг 11. Выполните конфигурацию параметров базы данных в веб-интерфейсе AxelNAC. Для этого перейдите в раздел Конфигурация → Настройки системы → База данных → Расширенные и установите следующие значения для параметров:
Шаг 12. Запустите службу cluster_check, которая была отключена в шаге 5.1 и перезапустите службу pfcron с помощью команды:
/usr/local/pf/bin/pfcmd service pfcron restart
Шаг 13. Выполните перезапуск каждого узла последовательно, дождавшись пока все службы восстановятся и будут иметь корректные статусы.
Шаг 14. Проверьте, был ли сгенерирован .exe-файл Windows-агента (данный шаг обязателен также для инсталляцию с помощью OVA-образа):
root@anac-6:~# ls -la /usr/local/pf/html/captive-portal/content/ | grep agent
-rw-r--r-- 1 root root 64018 Nov 12 13:54 AxelNAC-agent.apk
-rwxr-xr-x 1 root root 13466112 Nov 12 13:55 axelnac-windows-agent.exe
Если файл агента не был создан, перейдите в директорию /srv и запустите скрипт создания Windows-агента с помощью следующих команд:
cd /srv
bash create_agent.sh
Шаг 15. Выполните синхронизацию конфигурационных файлов и файла win-agent, запустив скрипт синхронизации на узле, где был сгенерирован .exe-файл Windows-агента (данный шаг обязателен также для инсталляцию с помощью OVA-образа):
bash sync_agent.sh
Обязательно удалите скрипт обновления с клиентских устройств, так как в нем содержится ключ для пользователя и root.
Шаг 16. Перенесите скрипт для активации работы TACACS+ на все машины в каталог /srv и запустите его:
bash enable_tacacs.sh
После этого функционал TACACS+ будет доступен по адресу https://IP-адрес-AxelNAC:4443//auth/login
Обязательно удалите скрипт обновления с клиентских устройств, так как в нем содержится ключ для пользователя и root.
Шаг 17. На мастер-узле замените и внесите изменения в текущие файлы конфигурации adminroles.conf и authentication.conf. Для этого скопируйте отсутствующие блоки из резервных копий, которые были созданы в шаге 1. Затем перезапустите все службы с помощью следующих команд:
systemctl restart packetfence-config
/usr/local/pf/bin/pfcmd configreload
В данном разделе приведены команды для проверки обновления конфигурационных файлов, а также примеры вывода, по которым можно идентифицировать успешное обновление.
В списке индексов, в колонке Column_name должно присутствовать значение start_time:
mysql
use pf;
MariaDB [pf]> show indexes from locationlog;
+-------------+------------+---------------------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------+------------+---------------------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| locationlog | 0 | PRIMARY | 1 | mac | A | 0 | NULL | NULL | | BTREE | | |
| locationlog | 1 | locationlog_end_time | 1 | end_time | A | 0 | NULL | NULL | | BTREE | | |
| locationlog | 1 | locationlog_view_switchport | 1 | switch | A | 0 | NULL | NULL | | BTREE | | |
| locationlog | 1 | locationlog_view_switchport | 2 | port | A | 0 | NULL | NULL | | BTREE | | |
| locationlog | 1 | locationlog_view_switchport | 3 | vlan | A | 0 | NULL | NULL | YES | BTREE | | |
| locationlog | 1 | locationlog_ssid | 1 | ssid | A | 0 | NULL | NULL | | BTREE | | |
| locationlog | 1 | locationlog_session_id_end_time | 1 | session_id | A | 0 | NULL | NULL | YES | BTREE | | |
| locationlog | 1 | locationlog_session_id_end_time | 2 | end_time | A | 0 | NULL | NULL | | BTREE | | |
| locationlog | 1 | locationlog_switch_ip_int | 1 | switch_ip_int | A | 0 | NULL | NULL | YES | BTREE | | |
| locationlog | 1 | locationlog_start_time | 1 | start_time | A | 0 | NULL | NULL | | BTREE | | |
+-------------+------------+---------------------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
10 rows in set (0.000 sec)
mysql
use pf;
MariaDB [pf]> select * from sms_carrier;
+--------+------+-------------------+---------------------+---------------------+-----------------+--------------------+-----------+
| id | name | email_pattern | created | modified | subject_pattern | body_pattern | auth_type |
+--------+------+-------------------+---------------------+---------------------+-----------------+--------------------+-----------+
| 100056 | SMSC | send@send.smsc.ru | 2024-10-28 09:15:25 | 2024-10-29 12:26:06 | | %l%:%p%::::%s%:%m% | 0 |
+--------+------+-------------------+---------------------+---------------------+-----------------+--------------------+-----------+
1 row in set (0.000 sec)
mysql
use pf;
MariaDB [pf]> select * from pf_version;
+--------+---------+---------------------+
| id | version | created_at |
+--------+---------+---------------------+
| 786688 | 112.1 | 2024-10-28 09:15:25 |
+--------+---------+---------------------+
1 row in set (0.000 sec)
Файл должен содержать следующие значения:
#Роль спонсора
...
[Sponsor]
allowed_actions=set_role,set_access_duration
description=Role for the sponsor
allowed_node_roles=
allowed_roles=guest
allowed_access_levels=NONE
allowed_access_durations=1h
actions=USERS_READ_SPONSORED,USERS_SET_ROLE,USERS_SET_ACCESS_DURATION,USERS_UPDATE,USERS_READ,USERS_CREATE,USERS_DELETE,SECURITY_EVENTS_READ
...
Файл должен содержать следующие значения:
#Конфигурация SMSC-провайдера
...
[sms]
description=SMS-based registration
sms_carriers=100056
type=SMS
create_local_account=no
password_length=8
sms_activation_timeout=10m
dynamic_routing_module=AuthModule
local_account_logins=0
pin_code_length=6
sms_carrier_100056_pass=
sms_carrier_100056_login=
hash_passwords=bcrypt
message=PIN: $pin
local_account_expiration=0s
...
docker ps
/etc/cron.d/axelnac
/var/spool/cron/crontab/root
/etc/logrotate.d/fingerbank-collector
Для проверки выполните команду:
logrotate -f /etc/logrotate.d/fingerbank-collector
/usr/local/pf/html/captive-portal/content/axelnac-windows-agent.exe
/usr/local/pf/conf/agent_rsa_keys/windows_gpg_private.key
/usr/local/pf/conf/agent_rsa_keys/windows_gpg_private_key.passphrase
/usr/local/pf/conf/agent_rsa_keys/windows_gpg_public.key