По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Друг, если ты еще ни разу не пользовался утилитой sngrep, то эта статья точно для тебя! Если кратко, то sngrep позволяет отображать потоки SIP – вызова (sip flow) прямо в консоли твоего сервера. Утилита покажет SIP – обмен сообщениями в удобной и читаемой форме. Скажем так: sngrep это tcpdump (или wireshark под Linux), но только для VoIP :)
/p>
Установка на CentOS
Рассмотрим быструю установку утилиты на операционной системе CentOS. Первым делом добавим irontec репозиторий. Для этого, создадим файл с именем sngrep.repo в директории /etc/yum.repos.d:
touch /etc/yum.repos.d/sngrep.repo
Добавляем в файл следующие строки:
[irontec]
name=Irontec RPMs repository
baseurl=http://packages.irontec.com/centos/$releasever/$basearch/
Затем импортируем публичный ключ от irontec:
rpm --import http://packages.irontec.com/public.key
Все готово к установке. Даем следующие команды:
yum update
yum install sngrep
По окончанию установки, в командной строке дайте команду sngrep. Теперь давайте разберемся с функционалом и тем как пользоваться утилитой.
Использование sngrep
Как только вы попадете в меню управления утилитой, перед вами будет отражен список VoIP пакетов, которые обрабатывает Ваш сервер:
Нажав на Enter вы сможете более детально изучить каждое сообщение. Нажав F5, вы сможете удалить текущие сообщения. Для передвижения между сообщениями используйте стрелки на клавиатуре.
При детализации звонка, можно нажать F2/F3 для получения SDR/RTP информации. Для выхода и возврата в предыдущее меню нажмите Esc. Если кратко, следующие опции доступны в базовом интерфейса sngrep:
F1 - открыть функциональный помощник;
F2 - сохранить собранный дамп в указанный файл;
F3 - отфильтровать данные по указанной строке;
F4 - показать выбранный расширенный call – flow (схема звонка, с указанием всех этапов его инициации);
F5 - удалить собранный дамп;
F6 - показать выбранный дамп в текстовом формате (без визуализации стрелочками, только сухие SIP – сообщения);
F7 - показать опции фильтрации (фильтровать можно по полю From/To, по источнику и назначению звонка, а так же по различным данным из информационного сегмента поля полезной нагрузки, то есть не из заголовка). Помимо прочего, есть возможность отмечать типы сообщения, такие как REGISTER, INVITE, OPTIONS и прочие;
F8 - показать настройки, среди который подсветка синтаксиса, фон и прочие;
F10 - настройка отображаемых параметров (такие как From/TO, индекс, метод и прочие);
Esc - выйти из sngrep/в предыдущее меню;
Enter -посмотреть call-flow выбранного пакета;
Space (пробел) - выделить нужный сегмент;
i/I - фильтрация только по сообщения типа INVITE;
p - поставить на паузу сбор пакетов;
В этой серии статей мы рассмотрим поиск и устранение неисправностей NAT (трансляции сетевых адресов) / PAT (трансляции адресов портов), DHCP и FHRP (протоколы избыточности при первом переходе).
NAT/PAT может быть проблемным, и не потому, что настройка несколько сложна (хотя и в этом тоже могут быть проблемы). Но в основном потому, что мы можем столкнуться с проблемами маршрутизации, так как мы периодически меняем IP-адреса. Во второй части этой серии мы рассмотрим наиболее распространенные проблемы DHCP и, наконец, закончим серию статей некоторыми проблемами FHRP.
Урок 1
В этом сценарии у нас есть 3 устройства. Маршрутизатор с левой стороны называется "Хост", и он представляет компьютер из нашей локальной сети. Предполагается, что устройство с правой стороны - это какой-то веб-сервер - это то, что мы пытаемся найти в Интернете. В середине мы видим наш маршрутизатор, который настроен для NAT и/или PAT.
Пользователи из нашей локальной сети жалуются на то, что они ничего не могут найти в Интернете. Они подтвердили, что их IP-адрес и шлюз по умолчанию в порядке. Давайте изучим маршрутизатор NAT:
Хорошая идея, чтобы проверить, может ли маршрутизатор NAT достичь веб-сервера, попробовав простой пинг. Если это не работает, вы, по крайней мере, знаете, что у вас есть проблемы с маршрутизацией или, что веб-сервер не работает (или, возможно, просто блокирует ICMP-трафик).
Поскольку это веб-сервер, лучше попробовать подключиться к TCP-порту 80. Вы видите, что это работает, так что маршрутизация между маршрутизатором NAT и веб-сервером + подключение к TCP-порту не является проблемой.
Мы можем использовать команду show ip nat translations, чтобы увидеть, происходит ли что-нибудь. Мы видим, что NAT-маршрутизатор что-то транслирует, но если вы посмотрите внимательно, то увидите, что это выглядит не совсем правильно. Внешние локальные и глобальные IP-адреса ссылаются ко внутреннему IP-адресу. Давайте посмотрим на конфигурацию ...
show ip nat statistics - хорошая команда для проверки вашей конфигурации. Вы можете видеть, что внутренние и внешние интерфейсы поменялись местами. FastEthernet 0/0 должен быть inside, а FastEthernet 1/0 должен быть outside.
NAT(config)#interface fastEthernet 0/0
NAT(config-if)#ip nat inside
NAT(config)#interface fastEthernet 1/0
NAT(config-if)#ip nat outside
Введем команды, которые позволяют исправить настройки, чтобы у нас были правильные внутренние и внешние интерфейсы.
Трафик с хоста на веб-сервер теперь работает!
Вот как должна выглядеть таблица трансляции NAT. Внутренний локальный IP-адрес - наш внутренний хост. Внутренний глобальный IP-адрес - это то, что мы настроили на внешней стороне нашего маршрутизатора NAT (FastEthernet 1/0). Внешний локальный и глобальный IP-адрес - наш веб-сервер ... проблема решена!
Итог урока: убедитесь, что у вас имеются правильные внутренние и внешние интерфейсы.
Урок 2
Та же топология, другая проблема! Опять пользователи нашей локальной сети жалуются, что они не могут связаться с веб-сервером. Давайте проверим наш маршрутизатор NAT:
NAT#show ip nat translations
Сначала мы проверим, транслирует ли маршрутизатор что-либо. Как видите, тихо ничего не происходит!
Мы убедились, что внутренний и внешний интерфейсы были настроены правильно. Однако никаких трансляций не происходит. Внутренний источник был определен с помощью списка доступа 1. Давайте поближе рассмотрим этот ACL:
Ааа, смотрите ... кажется, кто-то испортил ACL! Устраним эту неполадку:
NAT(config)#no access-list 1
NAT(config)#access-list 1 permit 192.168.12.0 0.0.0.255
Мы создадим ACL так, чтобы он соответствовал 192.168.12.0/24.
Теперь мы можем связаться с веб-сервером с нашего хоста.
Мы видим Hits, если просмотреть NAT statistics.
И я вижу трансляцию ... проблема решена!
Итог урока: убедитесь, что вы используете правильный список доступа, соответствующий вашим внутренним хостам.
Теперь почитатей продожение статьи про устранение неисправностей с DHCP.
Ansible один из двух (наряду с SaltStack) наиболее популярных программных комплексов третьей волны, которые позволяют удалённо управлять конфигурациями. Тем не менее, в сегменте сетевого оборудования лидирует наш сегодняшний герой (если о ПО можно так сказать). В первую очередь это вызвано тем, что Ansible не поставит перед пользователем задачи устанавливать агент на хостинги, требующие от него управления. Тем паче ежели Ваш аппарат взаимодействует с ними через CLI, то Ansible это то, что доктор прописал.
Одним выстрелом три "электронных зайца"
Вообще, прежде чем знакомить уважаемых читателей со сценарием работы в данном программном комплексе, позвольте перечислить несколько его достоинств:
Ansible позволяет параллельно подключать по SSH к устройствам (пользователь может сам определить их число).
Ansible может передавать задачи на подключённые машины.
Ansible способен разбивать машины, входящих в систему, на подгруппы и передавать специальных задачи для каждой подгруппы.
Конечно, указаны не все достоинства Ansible. Просто в данных 3 пунктах, как мне кажется, отражена основная суть работы в данной среде. Выполняя эти три задачи, система автоматически освобождает Вас от головной боли по делегированию задач и функций в компании. Время деньги, как говорится.
Сценарии
Ну и переходим к основному блюду нашего материала - сценариям (playbook). Они состоят из двух частей набора команд для выполнения (play) и конкретных команд (task). Они выполняются друг за другом.
Все записи данных осуществляются с помощью YAMLа. К несомненным плюсам его использования следует отнести то, что он гораздо лучше воспринимается людьми, нежели тот же самый JSON. Ежели Вы больше привыкли Вы к Python, то тут у Вас не возникнет проблем с адаптацией, так как синтаксис у них схожий.
А вот так происходит процесс написания сценария (комментарии даны построчно к выводу):
Имя сценария обязательный элемент для любого сценария;
Сценарий применяется к машинам в подгруппе cisco-routers;
Выключение режима сбора событий в конкретной машине (если не выключить данный режим, то система потратит много времени на решение ненужных задач);
В разделе task указывается список команд для каждого конкретного случая;
После чего происходит выполнение команды:
PLAY [Run show commands on routers] ***************************************************
TASK [run sh ip int br] ***************************************************************
changed: [192.168.100.1]
changed: [192.168.100.3]
changed: [192.168.100.2]
TASK [run sh ip route] ****************************************************************
changed: [192.168.100.1]
changed: [192.168.100.3]
changed: [192.168.100.2]
PLAY [Run show commands on switches] **************************************************
TASK [run sh int status] **************************************************************
changed: [192.168.100.100]
TASK [run sh vlans] *******************************************************************
changed: [192.168.100.100]
PLAY RECAP ****************************************************************************
192.168.100.1 : ok=2 changed=2 unreachable=0 failed=0
192.168.100.100 : ok=2 changed=2 unreachable=0 failed=0
192.168.100.2 : ok=2 changed=2 unreachable=0 failed=0
192.168.100.3 : ok=2 changed=2 unreachable=0 failed=0
И запускаем проверку выполнения команд:
SSH password:
PLAY [Run show commands on routers] ***************************************************
TASK [run s hip int br] ***************************************************************
Changed: [192.168.100.1] => {“changed”: true, “rc”: 0, “stderr”: “Shared connection
To 192.168.100.1 closed.
”, “stdout”: “
Interface IP-Address
OK? Method Status Protocol
Ethernet0/0 192.
168.100.1 YES NVRAM up up
Ethernet0/1
192.168.200.1 YES NVRAM up up
Loopback0
10.1.1.1 YES manual up up
”, “stdout_lines
“: [“”, “Interface IP-Address OK? Method Status
Protocol”, “Ethernet0/0 192.168.100.1 YES NVRAM up
up “, “Ethernet0/1 192.168.200.1 YES NVRAM up
up “, “Loopaback0 10.1.1.1 YES manual up
up “]}
А что внутри?
А теперь поговорим о начинке сценария. Основу составляют переменные. Это могут быть данные о машине, выводы команд, а также их можно вводить вручную.
Главное не забывать правила написания имён. Их всего два:
имена всегда должны состоять из букв, цифр и нижнего подчёркивания;
имена всегда должны начинаться с буквы.
Переменные могут быть определены разными способами:
Инвентарным файлом
[cisco-routers]
192.168.100.1
192.168.100.2
192.168.100.3
[cisco-switches]
192.168.100.100
[cisco-routers:vars]
ntp_server=192.168.255.100
log_server=10.255.100.1
PLAYBOOKом
-name: Run show commands on router:
hosts: cisco-routers
gather_facts: false
vars:
ntp_server: 192.168.255.100
log_server: 10.255.100.1
tasks:
-name: run sh ip int br
raw: s hip int br | ex unass
-name: run s hip route
raw: sh ip route
Специальными файлами, созданными для групп:
[cisco-routers]
192.168.100.1
192.168.100.2
192.168.100.3
[cisco-switches]
192.168.100.100
Или группами каталогов
|– group_vars _
| |– all.yml |
| |–cisco-routers.yml | Каталог с переменными для групп устройств
| |–cisco-switches.yml _|
|
|–host vars _
| |–192.168.100.1 |
| |–192.168.100.2 |
| |–192.168.100.3 | Каталог с переменными для устройств
| |–192.168.100.100 _|
|
|–myhosts | Инвертарный файл
Команда register позволяет сохранять результаты выполнений модулей в переменные. После чего переменная может быть использована в шаблонах, принятиях решений о выполнении заданного сценария.
---
- name: Run show commands on routers
hosts: cisco-routers
gather_facts: false
tasks:
-name: run s hip int br
raw: s hip int br | ex unass
register: sh_ip_int_br_result
---
debug отображает информацию в стандартном потоке вывода в виде произвольной строки, переменной или фактах о машине.
---
- name: Run show commands on routers
hosts: cisco-routers
gather_facts: false
tasks:
-name: run s hip int br
raw: sh ip int br | ex unass
register: sh_ip_int_br_result
-name: Debug registered var
debug: var=sh_ip_int_br_result.stdout_lines
После чего результатом работы станет следующее:
SSH password:
PLAY [Run show commands on routers] ***************************************************
TASK [run sh ip int br] ***************************************************************
changed: [192.168.100.1]
changed: [192.168.100.2]
changed: [192.168.100.3]
TASK [Debug registered var] ***********************************************************
ok: [192.168.100.1] => {
“sh_ip_int_br_result.stdout_lines”: [
“”,
“Interface IP-Address OK? Method Status Protocol”,
“Ethernet0/0 192.168.100.1 YES NVRAM up up “,
“Ethernet0/1 192.168.200.1 YES NVRAM up up “,
“Loopback0 10.1.1.1 YES manual up up “
]
}
ok: [192.168.100.2] => {
“sh_ip_int_br_result.stdout_lines”: [
“”,
“Interface IP-Address OK? Method Status Protocol”,
“Ethernet0/0 192.168.100.1 YES NVRAM up up “,
“Ethernet0/2 192.168.200.1 YES NVRAM administratively down down “,
“Loopback0 10.1.1.1 YES manual up up “
]
}
ok: [192.168.100.3] => {
“sh_ip_int_br_result.stdout_lines”: [
“”,
“Interface IP-Address OK? Method Status Protocol”,
“Ethernet0/0 192.168.100.3 YES NVRAM up up “,
“Ethernet0/2 192.168.200.1 YES NVRAM administratively down down “,
“Loopback0 10.1.1.1 YES manual up up “,
“Loopback10 10.255.3.3 YES manual up up “
]
}
PLAY RECAP ****************************************************************************
192.168.100.1 : ok=2 changed=1 unreachable=0 failed=0
192.168.100.2 : ok=2 changed=1 unreachable=0 failed=0
192.168.100.3 : ok=2 changed=1 unreachable=0 failed=0
Вместо заключения
Можно ещё долго приводить примеры работы в системе, но ещё один факт так сказать "вишенка на торте". К плюсам Ansible следует отнести и то, что заданную команду система может выполнять практически до бесконечности. Пока не наступит требуемый результат трансформации не прекратятся. Пользователю можно не беспокоиться - программа сама всё сделает за Вас, а Вы можете заниматься другими делами.