вторник, 6 июня 2023 г.

Транзит трафика в Cisco ACI между 2-я L3Out (в одном VRF, но с разным типом маршрутизации.)

 Возникла необходимость пропустить трафик (организовать маршрутизацию) между 2-я L3Out (один с OSPF, другой Static), которые находятся  в одном VRF, но на разных LEAF. Формально  ничего не должно мешать, но при создании контракта в L3Out c OSPF не анонсировался маршрут другого (статического L3Out). Возможно надо было просто включить Route Control Enforcement: "Import":

но в этом L3out уже анонсировались сотни маршрутов и работали сотни сервисов разных арендаторов и десятки ExtEPG (сетей со своими контрактами). И если этот пункт не был отмечен изначально, то сейчас его включать было рискованно для непрерывности трафика.

Необходимая для транзита сеть в ExtEPG в L3Out Static (LEAF_1):




Вариантом (недокументированным?) оказалось создать в L3Out (с OSPF, LEAF_2)  новый ExtEPG-дубликат с сетью  другого ExtEPG из L3Out (Static) (которая должна была бы импортироваться в L3Out с OSPF), но включить только один пункт (!) Export Route Control Subnet:


После этого маршрут из static L3Out появляется на внешнем маршрутизаторе, который связан по  OSPF  (OSPF L3Out). При добавлении контакта трафик начинает ходить.






понедельник, 15 мая 2023 г.

Подсчет в Cisco ACI кол-ва пустых EPG

При автоматизации ACI, каждому EPG раздается пул сетей, из большого диапазона (например /16), и в итоге приходит момент когда диапазон /16 тоже кончается. Переписывать код API потребуется в  крайнем случае, если не удастся удалить пустые  EPG и освободить их сети, чтобы они вернулись в пул IPAM.

Чтобы понять сколько Endpoint в каждом EPG (в пустом 0), можно проверить в web интерфейсе APIC:


Но когда EPG большое количество, то проще запустить скрипт в CLI интерфейсе APIC:

Вывод количества Endpoint в каждом EPG в диапазоне, например: 10.156/16:

 moquery -c fvSubnet | grep subnet- | grep uni/ | grep  10.156. | awk -F "/" '{print "S " substr($4,5), system("moquery -c fvCEp | grep -v BA:31:22 | grep -c "substr($4,5))}' >  /tmp/endpoints


цифры (1,4,1,3) над "S" это кол-во endpoint в EPG (по названию, в след. строке), заодно вырезаем из подсчета паразитный мак (у меня такой хх:31:22), из-за  хоста в Promiscuous  mode, если такой есть в системе.

Избавиться в cli APIC от кода выполнения AWK (0 или 1, стоит в конце названия EPG) не удалось, поэтому добавляем нормализующий знак "S" (спереди) чтобы создать  дополнительную колонку (для exсel), после чего сдвигаем всю эту колонку вниз на одну строку позицию (строку), сортируем и удаляем все строки  с "S". Интересно, что код ошибки AWK "1" точно совпадает EPG в котором 0 endpoint, но лучше ориентироваться на первую колонку, хотя вторую колонку , с кодом ошибки AWK тоже можно использовать как показатель: код 1, означает 0 endpoint в EPG.


Чтобы  точно понять, что EPG "заброшены" и никому давно не нужны, то можно собрать и даты создания EPG.

 Вывод времени создания EPG:

 moquery -c fvSubnet | grep subnet- | grep uni/ | grep  10.156. | awk -F "/" '{print "SSSSS " substr($4,5), system("moquery -c fvSubnet | grep "substr($4,5)"/ -A3 | grep modTs")}' > /tmp/timecreation


Тут нормализующими символами будут "SSSSS", равные по кол-ву знаков  параметру modTs (время создания EPG). Аналогично сдвигаем дату создания на одну позицию вниз, сортируем по названию EPG и совмещаем в excel таблицы рядом, согласно столбцов с названиями EPG. проверям что совпадает от начала до конца. Затем выборочно проверяем, что всё совпадает в web интерфейсе APIC и самые старые, пустые EPG удаляем средствами автоматизации, чтобы вернуть IPAM освободившиеся сети. 

Файлы в каталоге /tmp/  автоматически удаляются каждую ночь, поэтому скрипт надо запускать с утра, т.к. его отработка может занять несколько часов, если EPG несколько тысяч, и потом обработать эти файлы в excel.



понедельник, 9 января 2023 г.

Создание произвольных метрик в Zabbix агенте и их мониторинг задержек TCP соединений

 Для измерения задержек подключения к серверам и создания графа сетевого взаимодействия имеются продукты типа Cisco AppDynamics. Но в моей ситуации имеется только предустановленный zabbix agent и curl. 

Создаем метрику для измерения задержек при создании TCP соединения с хоста на сервер (DB например). Для этого будем использовать функционал CURL и на его основе создадим пользовательские метрики в zabbix агенте (добавить в /etc/zabbix/zabbix_agentd.conf   , рестарт:  service zabbix-agent restart). 

1) Измерение времени DNS-резолвинга fqdn сервера:

UserParameter=DNS_resolve_Time,curl -w "%{time_namelookup}\n" -o /dev/null -s "http://SQLXXXXX.foo.com:1433"

вывод: 0,0X sec.

2) Измерение времени установления TCP соединения (получение SYN ACK) от сервера:

UserParameter=TCP_Syn_Received_Time,curl -w "%{time_connect}\n" -o /dev/null -s "http://SQLXXXXX.foo.com:1433"

вывод: 0,0X sec.

Сумма 2-х значений - есть время создание TCP подключения от хоста к серверу(DB) по порту 1433. В Curl можно использовать "http" для определения времени TCP соединения независимо от слушающего протокола (4-го уровня) на стороне сервера. В случае, возврата "0" от Curl, значит TCP порт не слушает или запрещен. 

Также можно отслеживать количество открытых TCP сокетов следующим параметром:

3) UserParameter=net.tcp_conn,netstat -nta | wc -l

 Настройка элемента данных в сервере Zabbix.

1) Добавляем хост любым способом (если ещё не мониторится) через интерфейс zabbix agent (TCP/10050), применяем любой подходящий шаблон.

2) После появления "последних данных" для данного хоста, необходимо отклонировать любой элемент данных, дать новое название и указать в качестве ключа параметры выделенные зеленым цветом в п.п. 1-3, выше. 


3) Для отображения общего времени соединения (dns + tcp connect) удобно создать "стекируемый" график для данного хоста и выводить именно его.

Примерный вывод обоих метрик:








понедельник, 11 апреля 2022 г.

Подсистемы управления S-terra 4.x

 В s-terra 4.x присутствует 3 подсистемы конфигурирования:

1) CLI (cisco like for global settings) - попадаем по умолчание при логине по ssh или переходим из unix  консоли командой: cs_console

2) unix shell для настройки интерфейсов, переходим из cisco like cli командой: run bash

3) FRR для настройки динамической маршрутизации. Переходим из bash командой: vtysh


FRR позволяет настроить динамическую маршрутизацию (BGP, RIP) в стиле cisco like (quagga)


команды:

установка приватного ключа и сертификата, если они были сгенерированы внешним УЦ:

(чтобы контейнер увиделся , файл должен находиться в каталоге/var/s-terra/containers/)

cert_mgr import -f /home/ххх.cer -kc file_p15://sign_ххх.p15


Проверка ipsec соединений:

sa_mgr show



среда, 26 января 2022 г.

Терра настройка отказоустойчивости на 2-х интерфейсах одного шлюза

 Попалась С-терра 2000 gate, но "cisco CLI" достаточно условный, позволяет сконфигурировать только простые (native vlan) IP адреса на существующих в cisco CLI интерфейсы, но если нужны вланы или агрегирование, то все надо делать в Linux подсистеме (DEBIAN), переходя из cisco CLI командой:

 run bash

а из bash попасть в cisco CLI можно командой:

cs_console

Задача собрать Portchannel и сконфигурировать отказоустойчивое подключение к двум коммутаторам к влану без LACP (vPC на этих коммутаторах не планируется настраивать) - Bond mode "active-backup" с одним активным интерфейсом (eth0) и пассивным backup  интерфейсом (eth1).

Настраивать всё это надо в Linux подсистеме, с немного изменённым (от Debian) способом:

1) Bond добавляется в файле:  

cscons# cat /etc/network/interfaces.d/bond0

auto bond0
iface bond0 inet static
address 10.0.0.1
netmask 255.255.255.255
mtu 1500
slaves eth0 eth1
bond_mode active-backup
bond_miimon 100
bond_primary eth0

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

cscons# cat /etc/network/interfaces

source-directory /etc/network/interfaces.d

была строка импорта каталога: source-directory /etc/network/interfaces.d

Проверить можно командами:

ifup bind0

ip address show bind0

2) Чтобы увидеть интерфейс Portchannel1 ассоциированный к bond0, в файле 
cscons# cat /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")
interface (name="GigabitEthernet0/1" pattern="eth1")
interface (name="GigabitEthernet0/2" pattern="eth2")
interface (name="GigabitEthernet0/3" pattern="eth3")
interface (name="GigabitEthernet0/4" pattern="eth4")
interface (name="GigabitEthernet0/5" pattern="eth5")
interface (name="Loopback0" pattern="loopback0")
interface (name="Port-channel1" pattern="bond0")

добавить строку соответствия (жёлтым)
затем надо ребилдить конфигурацию, чтобы cisco CLI увидел этот новый интерфейс:

integr_mgr calc -f /etc/ifaliases.cf

service vpngate restart

Но cisco CLI не дает изменять IP адреса, которые были добавлены таким образом, и у меня не захотело поднимать bond0 интерфейс без какого-нибудь IP, поэтому поставил адрес 10.0.0.1/32.

3) Чтобы создать Vlan сабинтерфейсы в данном Bond0, их необходимо конфигурировать в общем файле интерфейсов и сразу с актуальными IP (дописывая между ###netifcfg-begin### и ###netifcfg-end### не допускается наличие пустых строк) в файле:
cat /etc/network/interfaces

auto bond0.1145
iface bond0.1145 inet static
mtu 1500
address 10.144.200.88
netmask 255.255.255.240
auto bond0.1146
iface bond0.1146 inet static
mtu 1500
address 10.144.200.108
netmask 255.255.255.240

после этого можно проверить:

ifup bind0.1145

ip address show bind0.1145

4) Чтобы добавить сабинтерфейсы в Cisco CLI (чтобы использовать для настройки маршрутизации, VPN и т.д.) необходим снова описать их в файле:

cscons# cat /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")
interface (name="GigabitEthernet0/1" pattern="eth1")
interface (name="GigabitEthernet0/2" pattern="eth2")
interface (name="GigabitEthernet0/3" pattern="eth3")
interface (name="GigabitEthernet0/4" pattern="eth4")
interface (name="GigabitEthernet0/5" pattern="eth5")
interface (name="Loopback0" pattern="loopback0")
interface (name="Port-channel1" pattern="bond0")
interface (name="Port-channel1.1145" pattern="bond0.1145")
interface (name="Port-channel1.1146" pattern="bond0.1146")
interface (name="default" pattern="*")

5) при необходимости Loopback интерфейса в cisco CLI, он добавляется также как bond0, в отдельном файле:

cscons# cat /etc/network/interfaces.d/loopback0

auto loopback0
iface loopback0 inet static
address 2.2.2.2
netmask 255.255.255.255
pre-up ip link del loopback0 type dummy 2>/dev/null || true
pre-up ip link add loopback0 type dummy
post-down ip link set dev loopback0 down


И затем добавляется , как описано в п.4 (зеленым).

После каждого изменения /etc/ifaliases.cf

необходимо ребилдить конфигурацию:

integr_mgr calc -f /etc/ifaliases.cf
service vpngate restart

После чего в cisco CLI будет отображаться:

#sh run
...
interface GigabitEthernet0/0
 description member PO_1_primary_Active_eth0
 no ip address
!
interface GigabitEthernet0/1
 description member PO_1_second_Standby_eth1
 no ip address
!
interface GigabitEthernet0/2
 no ip address
 shutdown
!
interface GigabitEthernet0/3
 no ip address
 shutdown
!
interface GigabitEthernet0/4
 no ip address
 shutdown
!
!
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!
interface Port-channel1
 ip address 10.0.0.1 255.255.255.255
!
interface Port-channel1.1145
 ip address 10.144.200.88 255.255.255.240
!
interface Port-channel1.1146
 ip address 10.144.200.108 255.255.255.240

Дескрипшен на интерфейсы g0/0 и g0/1 прописаны из cisco CLI.

Проверить конфигурацию Bond0 можно в Linux подсистеме:

cscons# cat /proc/net/bonding/bond0

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 (primary_reselect always)
Currently Active Slave: None
MII Status: down
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:00:00:00:00:55
Slave queue ID: 0

Slave Interface: eth1
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:00:00:00:00:56
Slave queue ID: 0

 
 





вторник, 23 ноября 2021 г.

Несколько bash комманд для почты, использования диска, отслеживания файлов

 Поиск писем,отравителей и т.д. по имени (домена/отправителя/получателя): 

bash#mf="/var/log/mail.info" && for n in `zgrep -i  zabbix-spd \$mf |  awk '{split($0,a," "); print a[6]}' | uniq` ;  do zgrep  "$n" $mf ; done 


Постоянный контроль размера файлов в каталоге:

bash#watch "ls -al /tmp/psqlodbc_zabbix126* | awk '{ print \$5 }'"

Обнуление файлов (можно по крону), от которых нельзя избавиться удалением (если их держит процесс, и при формальном удалении они продолжают занимать место на диске):

bash#for f in /tmp/psqlodbc_zabbix*.log; do echo "" > "$f"; done


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

bash#tail -F /var/log/mail.info | grep -E --line-buffered zabbix-spd\|dinoc | while read line; do echo -e "test: ${line}" | awk '{print $8}' |  xargs -I{} alert.sh {} ; done

Поиск по 2-м паттернам:

grep -E -i pattern_first\|second_pattern


понедельник, 11 октября 2021 г.

Изменение размера раздела и перенос SWAP в UBUNTU

 Потребовалось увеличить размер тома в сервере на UBUNTU. Добавили в виртуализации дискового пространства, но всё осложнилось тем, что в конце (на последнем разделе) была размещена партиция со SWAP, которая не дает в лоб расширить нужный раздел.

root@cms-dion:/tmp# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            477M     0  477M   0% /dev
tmpfs           100M   11M   89M  11% /run
/dev/sda1        15G   14G  889M  94% /
tmpfs           497M  4,0K  497M   1% /dev/shm
tmpfs           5,0M     0  5,0M   0% /run/lock
tmpfs           497M     0  497M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000

пересканируем размер физ. диска:
root@cms-dion:/tmp# echo 1 > /sys/block/sda/device/rescan
ПРоверим:
root@cms-dion:/tmp# parted
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: ATA VMware Virtual I (scsi)
Disk /dev/sda: 34,4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system     Flags
 1      1049kB  16,2GB  16,2GB  primary   ext4            boot
 2      16,2GB  17,2GB  1022MB  extended
 5      16,2GB  17,2GB  1022MB  logical   linux-swap(v1)


Для начала проверим использование SWAP: 

root@cms-dion:/tmp# swapon -s
Filename                                Type            Size    Used    Priority
/dev/sda5                               partition       998396  105060  -1

Отключим SWAP:
root@cms-dion:/tmp# swapoff /dev/sda5
root@cms-dion:/tmp# swapon -s
root@cms-dion:/tmp#

Закоментируем в fstab:
root@cms-dion:/tmp# vi /etc/fstab
root@cms-dion:/tmp# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=51f661cb-cb80-4c03-bfdb-6a731399f8fd /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
# UUID=fe6e20b3-7ee2-444e-b8a2-e431d8065d17 none            swap    sw              0       0

Теперь удалим партицию со SWAP и раздел под него:
root@cms-dion:/tmp# parted
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: ATA VMware Virtual I (scsi)
Disk /dev/sda: 34,4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system     Flags
 1      1049kB  16,2GB  16,2GB  primary   ext4            boot
 2      16,2GB  17,2GB  1022MB  extended
 5      16,2GB  17,2GB  1022MB  logical   linux-swap(v1)

(parted) rm 5
(parted) p
Model: ATA VMware Virtual I (scsi)
Disk /dev/sda: 34,4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  16,2GB  16,2GB  primary   ext4         boot
 2      16,2GB  17,2GB  1022MB  extended

(parted) rm 2
(parted) p
Model: ATA VMware Virtual I (scsi)
Disk /dev/sda: 34,4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  16,2GB  16,2GB  primary  ext4         boot
Затем в parted продолжаем:
(parted) resizepart
Partition number? 1
Warning: Partition /dev/sda1 is being used. Are you sure you want to continue?
Yes/No? Yes
End?  [16,2GB]? 34,4GB
(parted) p
Model: ATA VMware Virtual I (scsi)
Disk /dev/sda: 34,4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  34,4GB  34,4GB  primary  ext4         boot

(parted) q

Сообщим ОС, что размеры тома изменились:
root@cms-dion:/tmp# partprobe /dev/sda
root@cms-dion:/tmp# resize2fs /dev/sda1
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/sda1 is now 8388352 (4k) blocks long.

root@cms-dion:/tmp# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            477M     0  477M   0% /dev
tmpfs           100M   11M   89M  11% /run
/dev/sda1        32G   14G   17G  44% /
tmpfs           497M  4,0K  497M   1% /dev/shm
tmpfs           5,0M     0  5,0M   0% /run/lock
tmpfs           497M     0  497M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000
root@cms-dion:/tmp#

Создадим SWAP файл уже в расширенном томе.
root@cms-dion:/tmp# fallocate -l 1G /swapfile
root@cms-dion:/tmp# ls -lh /swapfile
-rw-r--r-- 1 root root 1,0G окт 11 15:27 /swapfile
root@cms-dion:/tmp# chmod 600 /swapfile
root@cms-dion:/tmp# ls -lh /swapfile
-rw------- 1 root root 1,0G окт 11 15:27 /swapfile
root@cms-dion:/tmp# mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=8466fe69-016b-4f05-bb3b-c73cd9aca480
root@cms-dion:/tmp# swapon /swapfile
root@cms-dion:/tmp# swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            1048572 0       -1

поправим fstab:
root@cms-dion:/tmp# vi /etc/fstab
root@cms-dion:/tmp# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=51f661cb-cb80-4c03-bfdb-6a731399f8fd /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
# UUID=fe6e20b3-7ee2-444e-b8a2-e431d8065d17 none            swap    sw              0       0
/swapfile       none    swap    sw      0       0
Проверка самых больших файлов:
 du -a / | sort -n -r | head -n 50