пятница, 20 октября 2023 г.

Двойной NAT Сisco IOS

Для NAT с подменой source и destination IP на Cisco IOS нужно использовать функционал "ip nat enable" на интерфейсах. Например, чтобы попасть (c IP 10.0.2.158) на 22 порт устройства в "inside" сети  за "inside" интерфейсом (с source IP/net этого "inside" интерфейса  роутера),  обращаясь на виртуальный порт/IP внешнего Outside интерфейса этого роутера, NAT необходимо настроить следующим образом:

interface FastEthernet8
 description
Outside
 ip address 10.129.162.2 255.255.255.240
 ip nat enable
  !
!
interface GigabitEthernet0
 description Inside
 ip address 10.72.1.10 255.255.255.0
 ip nat enable


ip nat source static tcp 10.72.1.1 22 10.129.162.2 443 extendable

ip access-list extended nat
 permit tcp host 10.0.2.158 host 10.129.162.2 eq 443

ip nat source list nat interface GigabitEthernet0 overload

Команда на хосте 10.0.2.158 (который "видит" 10.129.162.2): 
ssh 10.129.162.2 -p 443 
приведет к открытию ssh сессии с 10.0.2.158 на 22-й порт 10.72.1.1 с source  IP: 10.72.1.10 (то есть хосту 10.72.1.1 не нужен маршрут к 10.0.2.158, а достаточно только связности внутри connected сети 10.72.1.0/24.






 



воскресенье, 27 августа 2023 г.

Двойное натирование в Cisco ASA (twice NAT)

Необходимо принять от партнера трафик в р2р линке на виртуальный наш IP (не входит р2р net) с source IP, который тоже не входит р2р сеть, после чего заменить destination и source IP (для доставки уже в своей сети, согласно существующей маршрутизации).


Делаем через ASDM

1) Прописываем маршрутизацию в нужные IP/интерфейсы для всех IP не входящих в р2р сеть (партнера и свой).

2) Заводим объекты "IP" и "сервисы" (типа Net_xxx, TCP_XXX) и настраиваем NAT. Во избежании пересечения NAT с другими, предыдущими трансляциями), максимально конкретизируем в настройках source, dest, service (TCP_port).



3) Очищаем трансляции на этих интерфейсах (обязательно!) командой (можно из ASDM) 

clear xlate interface partner

clear xlate interface inside

вторник, 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