Блог

Редактировал(а) Антон Волков 2024/11/18 00:41

дек. 20 2024

Резервное копирование конфигураций оборудования средствами Netbox

Установка плагина

Для работы данного плагина у нас должен стоять napalm и плагин netbox-napalm-plugin, инструкция по настройка которого описывается в предыдущей статье.

Для резервного копирования конфигураций в netbox версии 4 и выше, существует плагин netbox-config-backup (GitHub - DanSheps/netbox-config-backup: A configuration backup system using napalm). 

Перед установкой плагина необходимо установить git (если он еще у нас не стоит) для создания локального репозитория где будут храниться конфиги.

# pkg install git

И создать репозиторий

$ mkdir /usr/local/share/netbox/condiff
$ cd /usr/local/share/netbox/condiff
$ git init

Поскольку я делал это на FreeBSD перед установкой плагина советую сделать симлинк git в каталог /usr/bin из каталога /usr/local/bin/git иначе плагин может не встать.

# ln -s /usr/local/bin/git /usr/bin

Устанавливаем плагин из репозиториев или локально.

--- Активируем виртуальное окружение --
$ . /usr/local/share/netbox/venv/bin/activate
--- Ставим плагин ---
(venv)$ pip install netbox-config-backup
--- или ставим локально ---
python -m pip install path/to/Plugin
--- Добавляем плагин в зависимости Netbox что бы при обновлении он не слетел ---
(venv)$ echo netbox-config-backup >> /usr/local/share/netbox/requirements.txt

 Теперь открываем configuration.py по пути /usr/local/share/netbox/netbox/ и добавляем в раздел PLUGIN и PLUGINS_CONFIG следующие строки.

PLUGINS = ["netbox_config_backup"]

PLUGINS_CONFIG = {
'netbox_config_backup': {
    'repository': '/usr/local/share/netbox/condiff',
    'committer': 'netbox commiter@example.com',
    'author': 'netbox author@example.com',
    'frequency': 3600,
},

Выполняем миграцию и перезапускаем службы

--- Выполняем миграцию ---
(venv)$ python3.11 /usr/local/share/netbox/netbox/manage.py migrate
--- перезапускаем службы ---
# service netbox restart
# service netboxrq restart

Создаем отдельную службу брокера через которую у нас будут выполняться задания резервного копирования.

#!/bin/sh

# This sample rc script starts the RQ worker background service which is
# required for Webhooks and various automation tasks.

#
# PROVIDE: netbox_ncb
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf.local or /etc/rc.conf
# to enable netbox-ncb:
#
# netbox_ncb_enable (bool):             Set to NO by default.
#                                       Set it to YES to enable netbox_ncb.

. /etc/rc.subr

name=netbox_ncb
rcvar=netbox_ncb_enable

load_rc_config $name

start_cmd="netbox_ncb_start"
start_precmd="netbox_ncb_precmd"
command="/usr/local/share/netbox/venv/bin/python3.11"
command_args="/usr/local/share/netbox/netbox/manage.py rqworker --name ncb@%i --with-scheduler netbox_config_backup.jobs"
pidfile=${netbox_ncb_pidfile:-/var/run/${name}/${name}.pid}
netbox_ncb_user=${netbox_ncb_user:-netbox}

netbox_ncb_precmd()
{
        install -d -o ${netbox_ncb_user} `dirname ${pidfile}`
}

netbox_ncb_start()
{
       echo "Starting netbox_ncb."
        /usr/sbin/daemon -cf -p ${pidfile} -u ${netbox_ncb_user} ${command} ${command_args}
}
run_rc_command "$1"

Или можем также просто попробовать выполнить:

# /usr/local/share/netbox/venv/bin/python3 /usr/local/share/netbox/netbox/manage.py rqworker --name ncb@%i --with-scheduler netbox_config_backup.jobs

После версии плагина 2.1.4 все кастомные планировщики не нужны, данную службу создавать не нужно, задания должны выполняться через стандартный netbox-rq !!!!!!!!!!!!!!

Настройка Netbox

Для создания конфигов должны соблюдаться несколько условий:

  1. Установлен и настроен netbox-napalm-plugin;
  2. заведена платформа которая прописана в настройках napalm-plugin;
  3. устройства должен быть назначен основной ip адрес и указана платформа

Если все требования соблюдены идем в меню BACKUP JOBS\ Devices и добавляем новое устройство.

1734687203707-530.png

В поле name вводим имя бэкапа, выбираем device из перечня заведенных устройств и ip адрес, который мы выбрали основным в настройках устройства.

1738062226575-179.png

Поле статус означает, что данный бэкап включен и после сохранения задачи по сбору конфигурации попадут в планировщик.

Поле Config status отвечает всего лишь за визуальное обозначение наличия сохраненного конфига для данного бэкапа.

Если мы провалимся внутрь бекапа, то можем увидеть перечень резервных копий.

1738062516462-641.pngСправа можно увидеть две кнопки, первая показывает сам сохраненный конфиг, а вторая если выделить галками два конфига - их различия.

Так же после выхода версии плагина 2.1.4 можно посмотреть статус задач резервного копирования тут:

1741273194606-876.png

окт. 30 2024

Сбор конфигураций на сетевом оборудование средствами Netbox

Установка napalm

Для просмотра конфигурации устройств в netbox есть плагин, который называется netbox-napalm-plugin, он позволяет просматривать определенную информацию запрашиваемую у коммутатора или маршрутизатора, имеющего ssh или другой api через интерфейс netbox, про этом в самом netbox ничего не хранится.

Для начала необходимо установить сам napalm, плагин netbox-napalm-plugin и в нашем случае драйвер для RouterOS - napalm-ros.

При этом данные пакеты лучше добавить в зависимости самого netbox, что бы не было проблем при обновлении в будущем.

$ cd /usr/local/share/netbox/
---Воспользуемся виртуальным окружением Netbox---
$ . venv/bin/activate
---Добавляем зависимости---
(venv)$ echo netbox-napalm-plugin >> /usr/local/share/netbox/requirements.txt
(venv)$ echo napalm-ros >> /usr/local/share/netbox/requirements.txt
---Ставим плагины---
(venv)$ pip install netbox-napalm-plugin
(venv)$ pip install napalm-ros

napalm позволяет запрашивать с оборудования структурированные данные в формате json, что в свою очередь очень удобно при использовании с сторонними API.

После установки необходимо добавить записи в конфиг /usr/local/share/netbox/netbox/netbox/configuration.py

1
2
3
4
5
6
7
8
9
10
11
PLUGINS = ["netbox_napalm_plugin"]
PLUGINS_CONFIG = {
'netbox_napalm_plugin': {
       'NAPALM_USERNAME': '<ssh_user>',
       'NAPALM_PASSWORD': '<ssh_Password>',
       'NAPALM_ARGS': {
           'api_key': '<netbox-api>',
           'ssh_port': '22',
                 }
           }
}

Для например cisco требуются сообщать secret после ввода логина и пароля, для этого мы можем указывать дополнительные аргументы в конфигурационном файле:

NAPALM_ARGS = { 'secret': NAPALM_PASSWORD, # Include any additional args here }

---Выполняем миграцию и пополняем статическое содержимое---
(venv)$ python3.11 netbox/manage.py migrate
(venv)$ python3.11 netbox/manage.py collectstatic --no-input
---Перезапускаем службы---
# service netbox restart
# service netbox_rq restart

На примере микротиков, нам надо завести на всех устройствах учетку для napalm и разрешить подключаться с netbox к api и по ssh.

Добавление и настройка устройств в Netbox

После установки плагина у нас в меню появиться новый пункт: 

1731575594944-287.png

К данному меню вернемся позже.

Для начала проверим правильно ли мы настроили устройства и можно ли запросить у них информацию через napalm.

Для этого можно выполнить команду

(venv)$ napalm --user napalm --password 'P@ssw0rd' --vendor ros --debug 172.16.1.1 call get_interfaces

Мы увидим вывод:

{
   "uptime": 7331045.0,
   "vendor": "MikroTik",
   "model": "CCR1036-8G-2S+",
   "hostname": "CORE-MSK-ITSOFT",
   "fqdn": "",
   "os_version": "6.49.13 (long-term)",
   "serial_number": "C6CC0C33A2EA",
   "interface_list": [
.......

Теперь для того, что бы napalm мог запрашивать данные с устройств, нам необходимо добавить производителя:

1731576364910-819.png

платформу, где выберем ранее добавленного производителя:

1731576239344-294.png

И тип устройства, который можно добавить из шаблона или забить руками.

Далее в появившемся меню napalm, о котором говорилось в самом начале, создаем новую запись, где выбираем нашу платформу и указываем для нее драйвер napalm, в нашем случае "ros".

1731576601376-456.png

Теперь мы можем добавить устройство.

1731659226716-847.png

Заполняем все обязательные поля и платформу, которую мы ранее добавили.

1731659456693-430.png

1731659380401-366.png

После создания устройства переходим во вкладку интерфейсы и добавляем Ip адрес интерфейсу.

1731659505279-560.png

Вбиваем адрес с префиксом маски подсети и возвращаемся обратно в редактирование устройства, где в качестве основного адреса выбираем только что добавленный адрес.

1731659616566-752.png

Сохраняем и теперь мы можем увидеть, что у нас появились новые вкладки на странице устройства.

1731659670999-207.png

1731659694059-548.png

1731659748487-229.png

Еще раз напоминаю, данные получаемые по napalm не хранятся в netbox, а каждый раз запрашиваются с устройства.

окт. 15 2024

Создание кроссового журнала в Netbox

Подготовительные работы.

Для того чтобы использовать функционал кроссового журнала, нам необходимо:

1. Создать сайты к которым у нас будет привязано оборудование.

Сайты это сущности которые по сути могут приравниваться к зданию, помещению или фактическому месту нахождения оборудования.

2. Создать записи о производителях оборудования.

Тут мы заполняем только вендора (Dell, cisco и т.д.), при этом наименование производителя, которого мы завели должно совпадать с производителем в нашем шаблоне..

3. Добавить записи с типами устройств, которые являются шаблонами для непосредственно наших устройств.

Типы устройств могут заполняться вручную или быть загружены из шаблонов (большое количество готовых шаблонов можно найти на GitHuB или в архиве ).

Для загрузки шаблона, переходим в "Типы устройств" -> "типы устройств", жмем импорт и вставляем в поле Data текст шаблона из файла yaml, нажимаем кнопку отправить.

1728979776901-694.png

4. Добавляем наше устройство:

1728980035182-849.png

Если мы выбрали тип устройства, которое добавили из шаблона, то все необходимые интерфейсы будут уже добавлены автоматически, проверить это можно на вкладке interfaces внутри записи о самом устройстве:

1728980163888-744.pngЕсли нам нахватает каких то интерфейсов, мы можем добавить их руками в этой же вкладке.

При желании мы можем назначить на интерфейс оборудования уже имеющийся IP адрес из IPAM или добавить новый, после чего в основных настройках оборудования мы можем выбрать для него основной IP адрес:

1728982001114-363.png1728982045595-515.png

Создание кабельных соединений

После того как мы добавили все необходимые устройства и интерфейсы, можно начать создавать кабельные соединения:

1728982192557-822.png

Переходим в "Подключения" -> "Кабели" и добавляем новое соединение.

1728982287808-946.pngВыбираем устройства на стороне А и Б, интерфейсы и жмем добавить.

Так же новые соединения можно добавлять прямо из вкладки inerfaces внутри самого устройства:

1728982401203-309.png

После создания нового кабельного соединения мы можем посмотреть итоговую таблицу в разделе "Интерфейсные подключения", а также во вкладке Interfaces.

Отрисовка топологии

После создания всех соединений, можно установить плагин "NetBox Topology Views

--- Активируем виртуальное окружение --
$ . /usr/local/share/netbox/venv/bin/activate
--- Создаем каталог для изображений ---
(venv)$ mkdir -p /usr/local/share/netbox/netbox/static/netbox_topology_views/img
--- Ставим плагин ---
(venv)$ pip install netbox-topology-views
--- Добавляем плагин в зависимости Netbox что бы при обновлении он не слетел ---
(venv)$ echo netbox-topology-views >> /usr/local/share/netbox/requirements.txt

Подключаем плагин в файле configuration.py 

PLUGINS = ["netbox_topology_views"]

 Настройки плагина:

PLUGINS_CONFIG = {
   'netbox_topology_views': {
       'static_image_directory': 'netbox_topology_views/img',
       'allow_coordinates_saving': True,
       'always_save_coordinates': True
    }
}

 Теперь необходимо выполнить миграцию и наполнение статического содержимого и перезапустить службы:

(venv)$ cd /usr/local/share/netbox/netbox
(venv)$ python3.11 manage.py migrate
(venv)$ python3.11 manage.py collectstatic --no-input
# service netbox restart
# service netbox_rq restart

 Теперь в интерфейсе у нас должен появиться раздел Topology views 

1728998141323-355.png

Если мы перейдем в раздел Topology и на вкладке Filter поставим "Show cables", то увидим визуализацию всех наших соединений которые мы сделали в разделе "Подключения"

1728998431871-237.png1728998458792-336.png

окт. 01 2024

Инвентаризация хостов Esxi в NetBox

Иногда в организации есть хренова тьма хостов с еще большей хреновой тьмой виртуальных машин, а при отсутствии системы управления например Vcenter или VMM запутаеться где какая ВМ проще чем кажется на первый взгляд.

Так же NetBox можно использовать в качестве "Источника истины" для добавления хостов сети в системы мониторинга на подобии Zabbix через REST API.

Данный скрипт создает сайты, устройства, платформы, интерфейсы устройств и виртуальные машины, а так же привязывает ip адреса к интерфейсам.

Установка

Ставим необходимые пакеты, скачиваем скрипт с GitHub или здесь, проваливаемся в каталог со скриптом.

# pkg install libxml2 libxslt
--- Активируем виртуальное окружение для Python (Будем использовать venv Netbox)---
$ cd /usr/local/share/netbox-scripts/
$ python3.11 -m venv venv
$ . venv/bin/activate
(venv)$ git clone https://github.com/bb-Ricardo/netbox-sync.git
(venv)$ cd netbox-sync/
(venv)$ pip install --upgrade pip
(venv)$ pip install wheel
(venv)$ pip install -r requirements.txt

Тут уже при установке зависимостей у нас может выскочить проблема с разрешением зависимостей для модуля cython, есть два варианта решения:

1 вариант
(venv)$ echo "cython<3" > /tmp/constraint.txt
(venv)$ PIP_CONSTRAINT=/tmp/constraint.txt pip install -r requirements.txt
2 вариант
(venv)$ pip install "cython<3.0.0" wheel
(venv)$ pip install "pyyaml==5.4.1" --no-build-isolation
(venv)$ pip install -r requirements.txt

vsphere-automation-sdk должен быть так же установлен для синхронизации VCenter с Netbox.

Качам отсюда для локальной установки или с GitHub

(venv)$ pip install --upgrade git+https://github.com/vmware/vsphere-automation-sdk-python.git

 Получаем token

1727849741209-465.png

Редактируем settings.ini:

[netbox]
api_token = e34994b01df8ef81a57772336d2005d699118a02
host_fqdn = netbox.example.com
port = 443
validate_tls_certs = False
  

[source/Vcenter]
enabled = True
type = vmware
host_fqdn = 172.16.1.100
port = 443
username = netbox@example.com
password = P@ssw0rd
validate_tls_certs = False
permitted_subnets = 172.16.0.0/12, 10.0.0.0/8, 192.168.0.0/16, fd00::/8, !10.23.42.0/24

Указываем адрес сервера, token, порт и отключаем проверку сертификатов.

Данный скрипт работает как с Vcenter, так и с отдельными хостами ESXI.

Запускаем скрипт

(venv)$ python3.11 net-scan.py -c settings.ini

После выполнения скрипта можно удостовериться, что у нас все добавилось.

1727803773349-617.png1727803855005-821.png

окт. 01 2024

Настройка IPAM в Netbox

При наличии большого количества подсетей зачастую требуется аудит и мониторинг адресного пространства в них, для этого прекрасно подходит такой инструмент, как IPAM.

В качестве инструмента будем использовать Netbox и nmap.

Установка

Для установки нам потребуется скачать уже готовый скрипт от пользователя @lckrspirit с gitlab.

Для удобства его можно разместить где ни будь в каталоге c NetBox.

Качаем nmap, устанавливаем зависимости:

# pkg install nmap
---Активируем виртуальное окружение (например в venv Netbox)--
$ cd/usr/local/share/netbox/
$ .venv/bin/activate
(venv)$ cd /usr/local/share/netbox/scripts
(venv)$ git clone https://gitlab.com/lckrspirit/netbox-ipam-auto-discovery.git
(venv)$ cd netbox-ipam-auto-discovery/
(venv)$ pip install python-nmap pynetbox

Так же его можно скачать тут

Заходим в NetBox в меню "Аутентификация" и получаем токен для обращения к API:

1727787682970-767.png

Генерируем токен (под суперпользователем это лучше не делать, а создать отдельного)

1727787768863-340.png

Открываем скрипт текстовым редактором и вводим адрес NetBox и сгенерированный Token

1727787967381-531.png

P.S. В netbox_url должны быть указаны адреса перечисленные в блоке "ALLOWED HOSTS" файла конфигурации Netbox configuration.py.

Запуск скрипта

Для запуска сканирования сети достаточно выполнить:

(venv)$ python3.11 netbox_scan.py 172.16.1.0/24

Теперь можно идти в меню IPAM и мы увидим отсканированные IP адреса.

1728654692264-592.png

Если мы еще добавим сеть в меню "Диапазоны IP- адресов мы сможем увидеть статистику использование адресного пространства в данном сегменте сети.

1727789872325-372.png

Скрипт сам обновляет и удаляет адреса, его можно назначить в задания cron на выполнение к примеру каждые 3 часа.

Дополнительно мы можем создать VLAN, группы и назначения, после чего связать с существующим диапазоном адресов.

Что бы мы могли видеть еще и свободные адреса, необходимо добавить префикс для нашей сети:

1728977476685-464.png

Указываем нашу сеть в поле префикс, статус, и ставим флаг, что данная сеть является пулом.

Синхронизация DNS записей.

Если в качестве DNS сервера используется роль Windows Server, то можно при помощи powershell-скрипта сопоставить найденные nmap ip адреса с записями DNS.

Пример скрипта:

<#
.SYNOPSIS
    Скрипт для синхронизации DNS записей с NetBox
.DESCRIPTION
    Получает A-записи из DNS и обновляет соответствующие IP-адреса в NetBox с DNS именами
.NOTES
    Требует модуля DnsServer для работы с DNS (устанавливается через Install-WindowsFeature RSAT-DNS-Server)
#>


#region Параметры
param (
   [string]$ConfigFile = "config.json"  # Файл конфигурации
)

# Загрузка конфигурации
try {
   if (-not (Test-Path $ConfigFile)) {
       throw "Конфигурационный файл не найден"
    }
   
   $config = Get-Content $ConfigFile | ConvertFrom-Json
   
   # Обязательные параметры
   $netboxUrl = $config.netboxUrl
   $netboxToken = $config.netboxToken
   $dnsServer = $config.dnsServer
   $dnsZone = $config.dnsZone
   
   # Проверка обязательных параметров
   if ([string]::IsNullOrEmpty($netboxUrl) -or
       [string]::IsNullOrEmpty($netboxToken) -or
       [string]::IsNullOrEmpty($dnsServer) -or
       [string]::IsNullOrEmpty($dnsZone)) {
       throw "Не все обязательные параметры указаны в конфигурации"
    }
}
catch {
   Write-Error "Ошибка загрузки конфигурации: $_"
    exit 1
}
#endregion

#region Вспомогательные функции
function Test-NetBoxConnection {
   try {
       $uri = "$netboxUrl/api/status/"
       Write-Host "Проверка подключения к NetBox..."
       
       $headers = @{
           "Authorization" = "Token $netboxToken"
           "Accept" = "application/json"
        }
       
       $response = Invoke-RestMethod -Uri $uri -Method Get -Headers $headers -TimeoutSec 5
       
       if ($response) {
           Write-Host "Подключение успешно. Версия NetBox: $($response.netbox_version)" -ForegroundColor Green
           return $true
        }
    }
   catch {
       Write-Error "Ошибка подключения к NetBox: $($_.Exception.Message)"
       return $false
    }
}

function Invoke-NetBoxRequest {
   param(
       [string]$Endpoint,
       [string]$Method = "GET",
       [object]$Body = $null
    )
   
   $uri = "$netboxUrl/api/$($Endpoint.TrimStart('/'))"
   
   try {
       $headers = @{
           "Authorization" = "Token $netboxToken"
           "Accept" = "application/json"
        }

       $params = @{
            Uri = $uri
            Method = $Method
            Headers = $headers
            TimeoutSec = 10
        }

       if ($Body -ne $null) {
           $params["ContentType"] = "application/json"
           $params["Body"] = $Body | ConvertTo-Json -Depth 3
        }

       return Invoke-RestMethod @params
    }
   catch {
       Write-Warning "Ошибка запроса к $uri : $($_.Exception.Message)"
       return $null
    }
}

function Get-NetBoxIpRecord {
   param([string]$ipAddress)
   
   $response = Invoke-NetBoxRequest "ipam/ip-addresses/?address=$ipAddress"
   if (-not $response) { return $null }

   foreach ($record in $response.results) {
       $recordIp = ($record.address -split '/')[0]
       if ($recordIp -eq $ipAddress) {
           return $record
        }
    }
   return $null
}

function Test-DnsServerConnection {
   try {
       Write-Host "Проверка подключения к DNS серверу $dnsServer..."
       $test = Get-DnsServerZone -ComputerName $dnsServer -Name $dnsZone -ErrorAction Stop
       return $true
    }
   catch {
       Write-Error "Ошибка подключения к DNS серверу: $_"
       return $false
    }
}

function Clean-DnsName {
   param([string]$name)
   
   # Удаляем лишние символы и лишние точки
   $cleanName = $name -replace '[^a-zA-Z0-9\-\.]', '' -replace '\.+', '.' -replace '^\.|\.$', ''
   return $cleanName
}
#endregion

#region Основной процесс
try {
   # Проверка подключений
   if (-not (Test-NetBoxConnection)) { exit 1 }
   if (-not (Test-DnsServerConnection)) { exit 1 }

   Write-Host "Получение DNS записей из зоны $dnsZone..."
   $dnsRecords = Get-DnsServerResourceRecord -ZoneName $dnsZone -ComputerName $dnsServer -ErrorAction Stop |
                 Where-Object { $_.RecordType -eq "A" }

   $totalRecords = $dnsRecords.Count
   $processed = 0
   $updated = 0

   foreach ($record in $dnsRecords) {
       $processed++
       $ip = $record.RecordData.IPv4Address.IPAddressToString
       $name = $record.HostName
       $cleanName = Clean-DnsName -name $name

       Write-Progress -Activity "Синхронизация с NetBox" -Status "Обработка $processed из $totalRecords" -PercentComplete ($processed/$totalRecords*100)

       $nbRecord = Get-NetBoxIpRecord -ipAddress $ip
       if (-not $nbRecord) {
           Write-Warning "IP $ip ($cleanName) не найден в NetBox"
           continue
        }

       if ([string]::IsNullOrWhiteSpace($cleanName)) {
           Write-Warning "Не удалось получить корректное DNS имя для IP $ip"
           continue
        }

       if ($nbRecord.dns_name -ne $cleanName) {
           Write-Host "Обновление: $ip ($(if ($nbRecord.dns_name) { $nbRecord.dns_name } else { 'нет имени' }) → $cleanName)"
           $result = Invoke-NetBoxRequest "ipam/ip-addresses/$($nbRecord.id)/" -Method PATCH -Body @{dns_name = $cleanName}
           if ($result) {
               $updated++
               Write-Host "Успешно обновлено" -ForegroundColor Green
            }
        }
    }

   Write-Host "Синхронизация завершена. Обработано записей: $processed, обновлено: $updated" -ForegroundColor Cyan
}
catch {
   Write-Error "Критическая ошибка: $_"
    exit 1
}
#endregion

Конфигурационный файл в формате json (должен находиться в одном каталоге со скриптом при запуске через планировщик).

{
   "netboxUrl": "https://netbox.example.com",
   "netboxToken": "1234546789qaweasdzxc456789qwe456",
   "dnsServer":example.com"
}

Данный скрипт можно закинуть в планировщик задач и запускать его по расписанию.

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -NoProfile -File `"C:\Scripts\sync-netbox-dns.ps1`""
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -DontStopOnIdleEnd -ExecutionTimeLimit (New-TimeSpan -Hours 1)
Register-ScheduledTask -TaskName "Sync NetBox DNS" -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -Description "Синхронизация A-записей DNS с NetBox"

сент. 24 2024

Настройка уведомлений о результатах выполнения планов обслуживания MSSQL

Входе настройки процедур резервного копирования баз данных в СУБД MS SQL Server присутствует необходимость отслеживания результатов выполнения планов обслуживания.

Рассмотрим два возможных варианта по уведомлению администраторов резервного копирования.

Настройка почтовых уведомлений

ВНИМАНИЕ!!! Для работы Database Mail требуется установка компонента Net Framework 3.5!!!

В MS SQL Server уже есть встроенный компонент, отвечающий за отправку почты который называется DatabaseMail, который мы можем найти в Object Explorer в каталоге Managment.

1727174326340-402.png

Тыкнув на него нам откроется мастер конфигурации:

1727174386150-365.png

Тыкаем на далее и выбираем первый пункт, в появившемся окошке жмем "YES"

1727174502484-619.png

Жмем указываем имя профиля, жмем Add и добавляем новый Mail Account, где заполняем имя аккаунта, почтовый адрес и настройки подключения к SMTP серверу.

1727174911839-116.png

Нажимаем Ок, Next и в следующем шаге назначаем нашего пользователя профилю.

1727175176170-433.png

Прощёлкиваем далее до конца и жмем закрыть.

Мы настроили компонент Database Mail, теперь необходимо добавить операторов, которым он будет слать уведомления по почте, для этого в Object Explorer переходим во вкладку SQL Server Agent и находим папку Operators, на которой щелкаем правой кнопкой и выпираем New Operator.

1727175466901-841.png

В открывшемся окне заполняем поля Name и E-mail name этого будет достаточно.

1727191514508-873.png

Теперь открываем наш Maintance Plan в котором необходимо настроить уведомления и добавляем элемент "Notify Operator Task", перетаскивая его на наш Maintace Plan

1727175843931-702.png

Теперь нам надо соединить задачу резервного копирования с задачей уведомления оператора и нажать на соединяющую их стрелку. В открывшемся окне выбрать в качестве Evaluation operation - Constraint, в качестве Value - Fail, для того что бы уведомление оператора происходило только при ошибке выполнения задания.

1727176953055-256.png

Сохраняем план обслуживания и ждем уведомлений на почту.

Настройка уведомлений через Telegram

MS SQL Server поддерживаем выполнение скриптов PowerShell через задания SQL Agent.

Отравлять уведомления в телегу будем как раз через PowerShell.

Скрипт:

$token = "35412311473:ADAM7WAcxvWEd1rYVRJev8jgC_dneLL6pxw"   # Полученный нами token 

$chat_id = "-88541191" # Тут указываем id чата
                                                                             
$name=[System.Net.Dns]::GetHostName() | Select 
$text1 = "Ошибка задания резервного копирования MSSQL "

$URI = "https://api.telegram.org/bot" + $token + "/sendMessage?chat_id=" + $chat_id + "&text=" + $text1 + "`n" + $name

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Invoke-WebRequest -URI ($URI) UseBasicParsing

Создаем задание SQL Agent:

 1727191628180-361.png

Добавляем шаг, вводим Step Name, выбираем тип задания PowerShell и вставляем наш скрипт и жмем ОК

1727191658807-862.png

Добавляем в наш план обслуживание выполнения задания 

1727178281093-555.png

1727178306659-555.png

Два раза тыкаем на задачи выполнения агента и выбираем наше задание.

1727178347921-284.png

Жмем ОК и сохраняем план обслуживания.

сент. 23 2024

Установка NetBox

Требования

 Устанавливать будем на FreeBSD 14.1, для Linux дистрибутивов шаги особо ничем не будут отличаться.

Для Netbox требуется сначала установить следующие компоненты:
PostgreSQL >= 12
Python = 3.10,3.11,3.12
Redis > 4.0
Для веб-сервера нам понадобиться Nginx.

Установка PostgreSQL

 Смотрим какие версии у нас есть в репозитории, нам нужна версия 10 или выше.

# pkg search postgresql

postgresql16-client-16.3       PostgreSQL database (client)
postgresql16-contrib-16.3      The contrib utilities from the PostgreSQL distribution
postgresql16-docs-16.3         The PostgreSQL documentation set
postgresql16-plperl-16.3       Write SQL functions for PostgreSQL using Perl5
postgresql16-plpython-16.3     Module for using Python to write SQL functions
postgresql16-pltcl-16.3        Module for using Tcl to write SQL functions
postgresql16-server-16.3       PostgreSQL is the most advanced open-source database available anywhere

 Ставим последнюю доступную версию:

# pkg install postgresql16-server

 Включаем службу и инициализируем СУБД:

# sysrc postgresql_enable="YES"
postgresql_enable:  -> YES
# service postgresql initdb

 Настраиваем pg_hba.conf

TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
host    all           all             0.0.0.0/0             scram-sha-256

Где ADDRESS - IP адрес или сеть откуда мы сможем соединиться с нашей СУБД.

METHOD - метод авторизации, в данном случае это шифрованный пароль. (md5 - хешированный пароль).

 Редактируем postgresql.conf:

listen_addresses = '*'          #  '*' - слушает на всех интерфейсах, но можно оставить и localhost;
port = 5432                         # порт оставляем по умолчанию
max_connections = 600     #  на всякий случай увеличим количество соединений (100 по умолчанию

Запускаем службу:

# service postgresql start

 Подключаемся к СУБД

# psql -U postgres

 И создаем базу, пользователя netbox и даем пользователю права на базу:

CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD 'P@ssw0rd!';
ALTER DATABASE netbox OWNER TO netbox;
GRANT CREATE ON SCHEMA public TO netbox; 

 Выходим, набирая \q.

 Далее можно проверить соединение с БД для пользователя netbox

# psql --username netbox --password --host localhost netbox

Установка Redis

 Устанавливаем пакет Redis (в разных дистрибутивах он может назваться по разному, например: redis-server) и проверяем версию, она должна быть не ниже 4.0.

# pkg install redis
# redis-server -v
Redis server v=7.2.5 sha=00000000:0 malloc=libc bits=64 build=a673021ce8a50e10

 Далее включаем службу и проверяем работоспособность сервиса.

# sysrc redis_enable="YES"
redis_enable:  -> YES
# service redis start
# redis-cli ping
PONG

Установка NetBox

 Перед установкой нам нужно доставить все зависимости, для разных дистрибутивов пакеты будут называться по разному, лучше обратиться к официальной документации

 Качаем последнюю стабильную версию с Github Releases  netbox-community/netbox (github.com) , распаковываем архив и ставим, возможно нас попросят доставить зависимости, например django.

# cd /usr/local/share
# wget https://github.com/netbox-community/netbox/archive/v4.1.1.tar.gz
# tar -xzf v4.1.1.tar.gz -C /usr/local/share/
# mv /usr/local/share/netbox-4.1.1 /usr/local/share/netbox
Или
# pkg install git
# git clone -b master --depth 1 https://github.com/netbox-community/netbox.git

 Создаем пользователя netbox и выдаем ему права на каталоги:

# adduser netbox
# chown -R netbox /usr/local/share/netbox/netbox/media/
# chown -R netbox /usr/local/share/netbox/netbox/reports/
# chown -R netbox /usr/local/share/netbox/netbox/scripts/

Доставляем зависимости (увидим какие при выполнении скрипта):

--- Активируем venv для Python например из каталога Netbox---
$ cd /usr/local/share/netbox/
$ pip install venv
$ python3.11 -m venv venv
$ . venv/bin/activate
(venv)$ pkg install py311-django50
(venv)$ pkg install py311-pip
(venv)$ pkg install rust
(venv)$ pkg install openjpeg
(venv)$ pkg install zlib-ng
(venv)$ pip install --upgrade pip setuptools wheel
(venv)$ pip install --upgrade pillow
(venv)$ cd /usr/local/share/netbox/
(venv)$ pip install -r requirements.txt

 Проваливаемся в каталог с конфигами NetBox и переименовываем пример файла конфигурации, который называется configuration.py.

(venv)$ cd /usr/local/share/netbox/netbox/netbox/
(venv)$ cp configuration_example.py configuration.py

В файле конфигурации вводим настройки соединения с базой Postgresql и Redis:

DATABASE = {
    'NAME': 'netbox',               # Database name
   'USER': 'netbox',               # PostgreSQL username
   'PASSWORD': 'P@ssw0rd!', # PostgreSQL password
   'HOST': 'localhost',            # Database server
   'PORT': '',                     # Database port (leave blank for default)
   'CONN_MAX_AGE': 300,            # Max database connection age (seconds)
}
REDIS = {
    'tasks': {
       'HOST': 'localhost',      # Redis server
       'PORT': 6379,             # Redis port
       'PASSWORD': '',           # Redis password (optional)
       'DATABASE': 0,            # Database ID
       'SSL': False,             # Use SSL (optional)
    },
   'caching': {
       'HOST': 'localhost',
       'PORT': 6379,
       'PASSWORD': '',
       'DATABASE': 1,            # Unique ID for second database
       'SSL': False,
    }
}

Указываем список имен FQDN или IP адресов с которых мы будем иметь доступ к сервису NetBox ('*' звездочка означает все доступные адреса), обычно эта запись дублирует имя и адрес хоста на котором стоит Netbox.

ALLOWED_HOSTS = ['netbox.example.com', 'localhost']

Устанавливаем SECRET_KEY, который является секретной, псевдослучайная строкой, используемой для помощи в создании новых криптографических хэшей для паролей и файлов cookie HTTP. Ключ, определенный здесь, не должен распространяться за пределами файла конфигурации. может быть изменен в любое время без влияния на сохраненные данные, однако имейте в виду, что это приведет к аннулированию всех существующих пользовательских сессий. Развертывания NetBox, состоящие из нескольких узлов, должны иметь один и тот же секретный ключ, настроенный на всех узлах.SECRET_KEY.

(venv)$ cd /usr/local/share/netbox
(venv)$ python3.11 netbox/generate_secret_key.py

 После выполнения скрипта, копируем секретный ключ в файл конфигурации configuration.py

 Далее создаем структуру базы данных и суперпользователя:

# ln -s /usr/local/bin/python3.11 /usr/local/bin/python3
(venv)$ cd /usr/local/share/netbox/netbox
(venv)$ python3.11 manage.py migrate
(venv)$ python3.11 manage.py createsuperuser
(venv)$ python3.11 manage.py collectstatic --no-input

 Для проверки того, что мы все сделали правильно пробуем запустить NetBox в тестовой режиме:

(venv)$ cd /usr/local/share/netbox/netbox
(venv)$ python3.11 manage.py runserver 0.0.0.0:8000 --insecure

Теперь мы можем зайти по адресу netbox.example.com:8000 под пользователем которого мы создали в предыдущем шаге. 

1727094875543-494.png

Настройка запуска в качестве службы

Для запуска сервиса будем использовать WSGI-сервер Gunicorn.

Ставим Gunicorn:

# pkg install py311-gunicorn

Если для дистрибутивов Linux примеры конфигурационных файлов сервисов лежать в каталоге /netbox-4.1.1/contrib/, то для freebsd скопируем текст скрипта сервиса в файл /usr/local/etc/rc.d/netbox

#!/bin/sh

# This sample rc script eliminate the need to use sysutils/py-supervisor to
# run NetBox as a system service. Only www/py-gunicorn is needed as a WSGI.
#
# Of course a working HTTP server like Apache/nginx is still required to make
# use of the gunicorn WSGI.
#

# PROVIDE: netbox
# REQUIRE: DAEMON
# KEYWORD: shutdown

# netbox_enable (bool): Set to NO by default.
#                       Set it to YES to enable netbox.
# netbox_config (str):  Default to "/usr/local/etc/${name}.conf}"
#                       Config file for gunicorn's netbox config file
# netbox_command (str): Default to "/usr/local/share/netbox/venv/bin/gunicorn"
#                       Path to gunicorn to run netbox
# netbox_bind (str):    Default to "localhost:8001"
#                       Interface and port to bind to
# netbox_workers (int): Default to "3"
#                       Number of gunicorn works
# netbox_timeout (int): Default to "120"
#                       Worker timeout for gunicorn


. /etc/rc.subr

name="netbox"
rcvar=netbox_enable
netbox_path=/usr/local/share/netbox/netbox/

load_rc_config $name

start_precmd="netbox_precmd"
command=${netbox_program:-/usr/local/share/netbox/venv/bin/gunicorn}
procname=${netbox_procname:-/usr/local/share/netbox/venv/bin/python3.11}
netbox_chdir=${netbox_path}
pidfile=${netbox_pidfile:-/var/run/${name}/${name}.pid}
netbox_user=${netbox_user:-netbox}
netbox_bind=${netbox_bind:-localhost:8001}
netbox_workers=${netbox_workers:-3}
netbox_timeout=${netbox_timeout:-120}

command_args="${netbox_args} -D \
        --log-syslog --log-syslog-prefix 
${name} \
        --log-syslog-to unix:///var/run/log#dgram \
        --disable-redirect-access-to-syslog \
        -p 
${pidfile} --pythonpath ${netbox_chdir} \
        -b 
${netbox_bind} -w ${netbox_workers} -t ${netbox_timeout} \
        netbox.wsgi"


netbox_precmd()
{
        install -d -o ${netbox_user} 'dirname ${pidfile}'
}

run_rc_command "$1"

Добавляем записи в rc.conf и разрешаем выполнение rc-скрипта

# sysrc netbox_enable="YES"
# chmod +x /usr/local/etc/rc.d/netbox

 Теперь можно запускать службу.

P.S. После запуска службы лично она у меня сразу грохалась с ошибкой создания .pid файла, для этого я создал заранее каталог для pid файла netbox и сделал пользователя netbox его владельцем

# mkdir /var/run/netbox
# chown netbox /var/run/netbox

Создание SSL сертификата

Для работы через протокол https нам потребуется сертификат, мы может сгенерировать самоподписанный сертификат на 10 лет командой:

# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/ssl/private/netbox.key \
-out /etc/ssl/certs/netbox.crt

Но в моем случае, при наличии доменного центра сертификации я сгенерирую запрос на выдачу сертификата.

Для этого необходимо создать конфигурационный файл, например netbox_openssl.cnf:

[req]
distinguished_name=req_distinguished_name
promt = no
[ req_distinguished_name ]
commonName = FQDN of server
commonName_default = APACHE-SERVER.mydom.com
countryName = Country Name (2 letter code)
countryName_default = RU
0.organizationName = Organization Name (eg, company)
0.organizationName_default = MyCompany
localityName = Locality Name (eg, city)
localityName_default = Moscow
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = MOSCOW
subjectAltName = domain name
subjectAltName_default = example.com

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = netbox.example.com
IP.1 = 172.16.1.100

Создаем закрытый ключ и запрос на сертификат:

# openssl genrsa -out netbox.example.com.key 2048
# openssl req -new -key netbox.example.com.key -config netbox_openssl.cnf -reqexts req_ext -out netbox.csr

По запросу выдаем сертификат и кидаем к нам на сервер.

Установка NGINX в качестве обратного прокси

Перед тем как ставить nginx нам надо создать каталог static если мы его еще не создали.

# ln -s /usr/local/bin/python3.11 /usr/local/bin/python3

И запускаем скрипт:

# chown -R netbox /usr/local/share/netbox-4.1.1/venv
$ sh /usr/local/share/netbox-4.1.1/upgrade.sh

Ставим nginx и включаем службу:

# pkg install nginx
# sysrc nginx_enable="YES"

Редактируем конфиг nginx где указываем location и пути до наших сертиков:

Запускаем службу и пробуем войти в netbox https://netbox.example.com

Настройка housekeeping

Для очистки старых заданий и очередей необходимо настроить housekeeping

открываем cron и вставляем туда команду:

/usr/local/bin/python3.11 /usr/local/share/netbox/netbox/manage.py housekeeping

 Или создаем  скрипт

Настройка Netbox RQ

Данная служба отвечает за выполнение заданий запускаемых из NetBox и является по сути обычным планировщиком, через который мы можем выполнять скрипты по расписанию.

Например мы сначала цепляем скрипт, а потом создаем задачу на его выполнение:

1728652313316-346.png

 

1728652385802-848.png

Для запуска службы нам по аналогии со службой netbox нужно создать файл скрипта службы:

#!/bin/sh

# This sample rc script starts the RQ worker background service which is
# required for Webhooks and various automation tasks.

#
# PROVIDE: netbox_rq
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf.local or /etc/rc.conf
# to enable netbox-rq:
#
# netbox_rq_enable (bool):              Set to NO by default.
#                                       Set it to YES to enable netbox_rq.

. /etc/rc.subr

name=netbox_rq
rcvar=netbox_rq_enable

load_rc_config $name

start_cmd="netbox_rq_start"
start_precmd="netbox_rq_precmd"
command="/usr/local/share/netbox/venv/bin/python3.11"
command_args="/usr/local/share/netbox/netbox/manage.py rqworker"
pidfile=${netbox_rq_pidfile:-/var/run/${name}/${name}.pid}
netbox_rq_user=${netbox_rq_user:-netbox}


netbox_rq_precmd()
{
        install -d -o ${netbox_rq_user} `dirname ${pidfile}`
}

netbox_rq_start()
{
       echo "Starting netbox_rq."
        /usr/sbin/daemon -cf -p ${pidfile} -u ${netbox_rq_user} ${command} ${command_args}
}

run_rc_command "$1"

Дать разрешение на выполнения файла скрипта и добавить его rc.conf:

# chmod +x /usr/loca/etc/rc.d/netbox_rq
# sysrc netbox_rq_enable="YES"
# service netbox_rq start

сент. 16 2024

Установка FTP сервера ProFTP на Feebsd 14.1

Установка proftpd

# pkg install proftpd
# sysrc proftpd_enable="YES"

Далее создаем пользователя

# adduser ftp

 Указываем в мастере группу ftp.

Настройка базовой аутентификации по пользователи и паролю

Узнаем идентификатор пользователя и группы ftp:

# cat /etc/passwd

ftp:*:1002:14:ftp:/ftp:/usr/sbin/nologin

# cat /etc/group

ftp:*:14:

Далее нам необходимо сгенерировать файл ftp.passwd и ftp.group для виртуального пользователя, для этого необходимо использовать утилиту ftpasswd,  поскольку это perl-скрипт, нам надо установить среду perl:

# pkg install perl5
# ftpasswd --passwd --file=/usr/local/etc/proftpd/ftpd.passwd --name=ftp --uid=1002 --gid=14 --home=/srv/ftp/test/ --shell=/bin/false
# ftpasswd --group --name=ftp --file=/usr/local/etc/proftpd/ftpd.group --gid=14 --member ftp

открываем конфигурационный файл /usr/loca/proftpd/etc/proftpd.conf

Запускаем сервис:

# service proftpd start

Если при запуске службы будет вылазить ошибка: unable to use world-readable AuthUserFile ‘/use/local/etc/proftpd/ftpd.passwd’: Операция не позволена,

То раздадим права доступа:

chmod 640 /use/local/etc/proftpd/ftpd.passwd

chown proftpd:root /use/local/etc/proftpd/ftpd.passwd

Настройка анонимного доступа

Тут все тоже самое только конфигурационный файл будет отличаться.

авг. 10 2024

Настройка сервера NPS на базе Windows Server 2012R2

Установка и настройка роли сервера сетевых политик.

1. Включение роли

    Нажмите кнопку Пуск, выберите пункт Выполнить и введите CompMgmtLauncher, после чего нажмите клавишу ВВОД.
    В окне Диспетчер сервера в разделе Сводка по ролям выберите Добавить роли и нажмите кнопку Далее.
    Установите флажок службы политики сети и службы доступа и дважды нажмите кнопку Далее.

nps1.JPG
   

 Установите флаг Сервер политики сети нажмите кнопку Далее, а затем нажмите кнопку Установить.

 nps2.JPG

    Если установка завершена успешно, нажмите кнопку Закрыть.

    В окне Диспетчер сервера нажмите кнопку Закрыть.

2. Настройка сервера политики сети

    Запустить консоль сервера NAP можно через диспетчер сервера.

nps3.JPG

    Либо через консоль mmc путем добавление оснастки «Сервер политики сети».
    Далее необходимо зарегистрировать сервер в Active Directory.

    Для регистрации сервера необходим доступ администратора домена либо сервер уже должен быть членом группы «RAS and IAS Servers»

nps4.JPG

3. Создание RADIUS– клиента

    Для создание нового клиента нужно щелкнуть правой клавише мыши на представлении RADIUS—клиенты, выбрать Новый документ и ввести понятное имя клиента, ip—адрес и общий секрет.

nps5.JPG

    Изначально количество символов составляет 64, но не все устройства поддерживают такой длинный секрет.
Так же для удобства можно, создать шаблон с общим секретом во вкладке Управление шаблонами.

nps6.JPG

    При создании клиента можно выбрать шаблон секрета из списка

nps7.jpg

4. Создание сетевых политик

    Первым шагом необходимо зайти в представление «Политики запросов на подключение» и в политике создан-ной по умолчанию с именем «Использовать проверку подлинности Windows для всей пользователей» изменить значение на ежедневно с 00:00—24:00.

nps8.JPG

    В представлении «Сетевые политики» нам необходимо создать новую политику.

    Вводим имя политики и жмем Далее.

nps9.jpg

nps10.JPG

    На следующей вкладке добавляем новое условие. В данном случае указываем имя группы, которой хотим предо-ставить доступ, жмем Добавить группы, выбираем группу пользователей и нажимаем ОК.
Поскольку настройки политик для каждого вендора существенно различаются добавляем еще одно условие Понятное имя клиента , куда вводим часть имени RADIUS-клиента.

nps11.JPG

Знак ? подразумевает, что наше условие будет обрабатывать запросы на подключение от всех клиентов в имени которых присутствует Arlan.

nps12.JPG

На следующей вкладке выставляем флаг Доступ разрешен и жмем Далее

nps13.JPG

    Поскольку протокол PPP не поддерживает других методов проверки подлинности во вкладке Настройка методов про-верки подлинности ставим флаг «Проверка подлинности открытым текстом (PAP, SPAP)», остальные флажки можно снять.

nps14.JPG

Нажимаем Далее и у нас появляется следующее сообщение:

nps15.JPG

Нажимаем НЕТ и Далее.

Убираем флаг «Без шифрования» и жмем ОК.

172243324429-968.png

Настройка RADIUS на клиенте.

Настройка для каждого вендора выполняется зачастую по своему, по этому постараюсь привести немногие варианты.

1. Настройка коммутаторов Allied Telesis AT8000s

На коммутаторе прописываем:
(Config)#aaa authentication login RADIUS radius enable
(Config)#aaa authentication login default radius local
(Config)#aaa accounting login radius

Для аутентификации через web:
(Config)#ip http authentication radius local
(Config)#ip https authentication radius local

Настраиваем клиент:
(Config)#radius-server host 10.1XX.XX.XX -- Ip адрес сервера RADIUS
(Config)#radius-server key ********* -- Общий секрет

Настраиваем политику сети
Полный доступ:

1722433614334-40.png

172243624177-203.png

Доступ только на чтение:

1722433657243-127.png

1722433663331-580.png

2. Настройка коммутаторов Brocade ICX

Настройка коммутатора:
(config)#aaa authentication web-server default radius local
(config)#aaa authentication enable default radius local
(config)#aaa authentication enable implicit-user
(config)#aaa authentication login default radius local
(config)#aaa authorization exec default radius
radius-server host 10.1XX.XXX.XXX -- адрес сервера RADIUS
radius-server key ****** -- Секретный ключ

Настраиваем политику сети
Полный доступ:
Добавляем новый параметр во вкладке «Параметры зависящие от поставщика», вводим код поставщика 1991, настраиваем атрибут с номером атрибута 1 и значением атрибута 0.

1722433956712-3112.png

Доступ только чтение
Добавляем новый параметр во вкладке «Параметры зависящие от поставщика», вводим код поставщика 1991, настраиваем атрибут с номером атрибута 1 и значением атрибута 5.

1722434024159-218.png

3 Настройка коммутаторов QTECH

Настройка коммутатора:
(config)#authentication line console login radius local
(config)#authentication line vty login radius local
(config)#authentication enable radius local
(config)#authorization line console exec radius local
(config)#authorization line vty exec radius local
(config)#aaa authorization config-commands
(config)#aaa-accounting enable
(config)#aaa enable
(config)#radius-server key *******
(config)#radius-server authentication host 10.XXX.XXX.XXX
(config)#radius-server accounting host 10.XXX.XXX.XXX

Настройка политики сети
Полный доступ:

1722434141894-339.png

Доступ только чтение:

1722434208797-686.png

4. Настройка коммутаторов Cisco

Настройка коммутатора:
(config) #aaa new-model
(config) #aaa authentication login default group radius local
(config) #aaa authentication enable default group radius enable
(config) #aaa authentication ppp default group radius local
(config) #aaa authorization exec default group radius local
(config) #radius-server host 10.XXX.XXX.XXX
(config) #radius-server key *********************

 Только чтение:

1722434277495-250.png

5. Настройка коммутаторов Arlan

Настройка коммутатора:
aaa authentication dot1x default radius
aaa authentication login default radius local
radius-server deadtime 0
radius-server host 10.XXX.XXX.XXX auth-port 1812 priority 0
radius-server key ************
radius-server retransmit 3
radius-server timeout 3
Настройка сетевой политики осуществляется аналогично cisco

авг. 10 2024

Настройка MPIO на Windows Server

Данная инструкция подходит для Windows Server 2012 и выше...

Включение компонента MPIO

Через PowerShell выполняем команду :

Add-WindowsFeature -Name 'Multipath-IO'

Что бы проверить установлен ли модуль, выполняем:

Get-WindowsFeature -Name 'Multipath-IO'

После установки компонента MPIO, Microsoft добавляет свой DSM (Vendor 8Product), но нам его может оказаться недостаточно, по этому добавляем дополнительный  девайс MPIO на примере IBM STORWIZE V7000 следующей командой:

New-MSDSMSupportedHw -VendorId IBM -ProductId 2145

Мы можем проверить добавилось ли устройство командой:

Get-MSDSMSupportedHw

Вывод команды: 

VendorId ProductId
-------- ---------
Vendor 8 Product       16
IBM      2145
 

 Мы видим, что наше устройство было добавлено.

В моем случае у меня установлен всего один хостовый FC адаптер, по этому настройку завершить, но если у вас подключено несколько адаптеров или имеется несколько портов на одном адаптере и все они подключены к СХД, то в итоге мы увидим один и тот же LUN в нескольких экземпляров. Что бы такого не произошло нам необходимо настроить балансировщик MSDSM.

Для проверки можем выполнить команду:

Get-MSDSMAutomaticClaimSettings

Name                         Value
----                               -----
iSCSI                          False
SAS                            False 

 Настроить его можно через утилиту mpclaim.exe:

В нашем случае просто выполним: mpclaim.exe -r -i -a ""

Параметр

 

Значение

 

Описание

 

-r

 

Restart_option

 

Автоматическая перезагрузка без запроса

 

-n

 

 

Подавление запроса на перезагрузку.

 

-i

 

Install_switch

 

Установка MPIO и добавления поддержки нескольких путей для устройства хранения

 

-u

 

 

Удаление MPIO и отмена поддержки устройства хранения

 

-d

 

<device_hwid>

 

Задает устройство, для которого нужна поддержка MPIO. Идентификаторы устройств должны быть разделены пробелом.

 

-a

 

 

Применение поддержки MPIO ко всем совместимым устройствам.

 

-c

 

 

Применение поддержки MPIO только к устройствам, совместимым с SPC-3. Этот параметр применим только при установке. При удалении MPIO (с помощью параметра -u для install_switch) переключатель -c будет восприниматься командой как переключатель -a.

 

 

<device_hwid>

 

Коды устройств, которые будут поддерживаться MPIO, в формате VendorProduct, где Vendor - это имя производителя или поставщика, а Product - это название продукта или модели. Несколько кодов должны отделяться друг от друга пробелами. Этот параметр используется только с переключателем устройства -d.

 

Примечание

После выполнения всех действий нам необходимо узнать WWN нашего адаптера, сделать это можно утилитой fcinfo и если сервер подключен через FC коммутатор, необходимо настроить zones (что бы понять как лучше сделать, необходимо читать документацию производителя оборудования, у всех рекомендации разные) или просто удалить зоны с коммутатора.

Только после этого мы можем заходить на полку и отдавать LUN хосту.