Обновление Cisco WLC 2504 с версии 8.1.102.0 до 8.5.171.0

8.5.171.0 — последняя поддерживаемая данным контроллером версия оси.

Напрямую перейти с 8.1 на 8.5 нельзя, нужно сначала обновиться до 8.3, а потом до 8.5.

Путь обновления в моем случае:
8.1.102.0 -> 8.3.150.0 -> 8.5.171.0

Чтобы обновиться до версии 8.3, нужно сначала проверить, чтобы был установлен FUS 2.0 (для 8.3 в принципе подойдет и 1.9 версия, но если уж обновлять FUS, то сразу можно прыгнуть на 2.0).
FUS — Fuild Upgrade Software — специальный AES пакет, который подготавливает обновление различных system-related компонентов.

(Cisco Controller) >show sysinfo

Manufacturer’s Name………………………… Cisco Systems Inc.
Product Name………………………………. Cisco Controller
Product Version……………………………. 8.1.102.0
Bootloader Version…………………………. 1.0.20
Field Recovery Image Version………………… 7.6.101.1
Firmware Version…………………………… PIC 20.0

Если в выводе Bootloader Version меньше, чем 1.0.20, сначала обновляем FUS.
AIR-CT2500-K9-2-0-0-0-FUS.aes — это файл FUS 2.0

FUS заливается на контроллер так же, как и остальной «код»: Меню COMMANDS — Download file — а дальше уже выбираете, какой метод вам по душе.

FUS обновляется долго, порядка 30-40 минут с несколькими перезагрузками контроллера. В процессе обновления обязательно обеспечить бесперебойное питание на контроллер.

Мне FUS обновлять не пришлось.

AIR-CT2500-K9-8-3-150-0.aes — файл оси 8.3
AIR-CT2500-K9-8-5-171-0.aes — файл оси 8.5

Для заливки новой версии оси сначала пробую http метод, как самый легкий (файл 8.3 лежит то у меня на ПК, осталось залить), но попытка не удалась. Хоть возможность данного метода и заявлена в веб-интерфейсе, но он не срабатывает (по крайней мере на версии 8.1.102.0), вываливается с ошибкой:

WLC HTTP Transfer failure while storing in flash

это бага Cisco Bug: CSCuu40428.

На community.cisco.com нашелся ответ — используйте TFTP.

Через TFTP все прекрасно залилось и распаковалось. После нужно бутнуть контроллер, перезагруается он минуты 4.
Но wi-fi еще не работает, так как теперь вступают в работу точки, которые тянут с контроллера новую версию оси и обновляются.
Это тоже занимает некоторое непродолжительное время (смотря сколько у вас точек).

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

Все работает.

Cisco: Переключение между двумя провайдерами

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

ISP1: Gi9 299.9.9.9/24 gw:299.9.9.1
ISP2: Gi8 288.8.8.8/24 gw:288.8.8.1

LAN: 192.168.0.0/24

Настраиваем интерфейсы WAN:

interface GigabitEthernet9
description -= ISP1 =-
ip address 299.9.9.9 255.255.255.0
ip nat outside

interface GigabitEthernet8
description -= ISP2 =-
ip address 288.8.8.8 255.255.255.0
ip nat outside

Настраиваем интерфейс LAN:

interface Vlan1
description -= LAN =-
ip address 192.168.0.1 255.255.255.0
ip nat inside

Настраиваем acl для NAT:

ip access-list extended NAT_LAN
permit ip 192.168.0.0 0.0.0.255 any

Настраиваем route-map для NAT для двух провайдеров:

route-map NAT_ISP1 permit 10
match ip address NAT_LAN
match interface GigabitEthernet9

route-map NAT_ISP2 permit 10
match ip address NAT_LAN
match interface GigabitEthernet8

Настраиваем NAT:

ip nat inside source route-map NAT_ISP1 interface GigabitEthernet9 overload
ip nat inside source route-map NAT_ISP2 interface GigabitEthernet8 overload

Настраиваем ip sla для мониторинга доступности шлюза основного провайдера (ISP1):

ip sla 1
icmp-echo 299.9.9.1 source-ip 299.9.9.9
ip sla schedule 1 life forever start-time now

Настраиваем отслеживание состояния ip sla 1 для привязки его в дальнейшем к статическому маршруту:

track 1 ip sla 1

Прописываем 2 default route:

ip route 0.0.0.0 0.0.0.0 299.9.9.1 name DEFAULT-ISP1-MAIN track 1
ip route 0.0.0.0 0.0.0.0 288.8.8.1 10 name DEFAULT-ISP2-BACKUP

Основной маршрут по умолчанию — через ISP1 — только если шлюз ISP1 доступен. Если шлюз ISP1 недоступен (что мониторится посредством ip sla), этот маршрут по умолчанию пропадает с таблицы маршрутизации и включается резервный маршрут по умолчанию через ISP2.
Резервный маршрут по умолчанию — через ISP2 — имеет метрику 10 и включается в работу только лишь когда пропадает основной маршрут по умолчанию.
Когда основной шлюз ISP1 становится снова доступен, маршрут по умолчанию переключается обратно на него.

syslogd: Прием логов с удаленных хостов

Syslogd запускаю на FreeBSD 11.3

Допустим, есть сервер с адресом 10.10.10.10, на котором запущен и работает демон syslogd. Есть некий роутер cisco с адресом 192.168.15.2, с которого мы хотим получать логи на сервер.

Для этого:
1) убеждаемся, что фаервол на сервере разрешает обращения к себе на порту udp 514 (дефолтный порт syslogd)
2) Редактируем конфигурационный файл /etc/syslog.conf

[root@noc /]# cd /etc
[root@noc /etc]# cp syslog.conf syslog.conf.backup
[root@noc /etc]# ee syslog.conf

Добавляем в конец файла следующую конструкцию:

!*
+192.168.15.2
*.* /var/log/192.168.15.2.log
+*

!* — разделитель
+ — указываем ip-адрес удаленного хоста, с которого будут приходить логи.
*.* — принимаем все типы сообщений (all facilities, all levels)
+* — конец секции описания хоста
/var/log/192.168.15.2.log — путь к лог-файлу для данного удаленного хоста

3) Редактируем /etc/rc.conf, добавляем строку:

syslogd_flags="-a 192.168.15.2:* -b 10.10.10.10 -n -C"

здесь указываем флаги запуска.

-a — указываем ip-адрес хоста, с которого будем принимать логи.
Можно указать целую сеть,например -a 192.168.15.0/24:*
Флаг -a можно использовать несколько раз.
По умолчанию, syslogd принимает сообщения с src-порта 514, но зачастую оборудование в качестве порта-источника использует рандомный порт. Чтобы syslog принимал сообщения с рандомных портов, необходимо добавить маску :* после указания ip-адреса или сети.

«Почему не приходят логи с удаленного хоста cisco?» — выше ответ, добавьте :*

-b bind address (необязательно задавать)

— создавать log-файл, если его нет (создается с правами 0600)

-n — не резолвить ip в dns-имена

«Почему сообщения от удаленного хоста не пишутся в нужный log-файл?»:

Если не задать в rc.conf опцию -n, то syslogd будет резолвить ip-адрес в dns, используя PTR-запись на dns-сервере.
Нам это не нужно, так как во-первых: зачем нам лишние запросы в днс, во-вторых: чтобы syslogd правильно распарсил сообщения с нужного ip и положил в отдельный файл, нужно чтобы syslogd видел в сообщениях именно ip, а не PTR вида home-192-168-2-15.some-isp.com.

debug syslogd

-d — дебаг — полезная опция на этапе отладки. Если что-то не едет, добавляем этот флаг в syslogd_flags и смотрим сообщения в консоли.
При нормальной работе опцию отключаем.

Не забывайте после внесения изменений рестартовать syslogd:

[root@noc /]# service syslogd restart

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

Вот что увидим в консоли при включенном дебаге, если не укажем :* после ip-адреса — port mismatch:

received sa_len = 16
cvthname(2) len = 16
cvthname(192.168.15.2)
of validation rule: 1
validate: dgram from IP 192.168.15.2, port 59635, name home-192-168-2-15.some-isp.com;
rejected in rule 1 due to port mismatch.

А если не отключим резолв ip в днс, то лог будет писаться в /var/log/messages, а не в /var/log/192.168.15.2.log:

received sa_len = 16
cvthname(2)len = 16
cvthname(192.168.15.2)
# of validation rule: 1
validate: dgram from IP 192.168.15.2, port 59635, name home-192-168-2-15.some-isp.com;
accepted in rule 1.
logmsg: pri 275, flags 0, from home-192-168-2-15.some-isp.com, msg r-generator: 000301: May 28 12:26:10 EET: %SYS-5-CONFIG_I: Configured from console by admin on vty0 (10.5.5.5)
Logging to FILE /var/log/messages

VMware: Перенос виртуальной машины в пределах хоста

Power Off

Remove from inventory

Host — Confoguration — Storage

datastore1 — Browse datastore…

Выбираем папку с виртуальной машиной — Move a file from this datastore…

Выбираем datastore2 — Move

Ждем, пока скопируется.

Если в Browse Datastore изменения не отобразились — нажимаем Refresh.

Заходим в скопированную директорию в Browse Datastore, ищем файл имя_виртуалки.vmx — правой кнопкой — add to inventory.

Виртуалка появится в списке.

Запускаем.

Если будет светиться восклицательный знак на иконке VM:

Открываем консоль на ВМ (Правой кнопкой — Open Console)

ESXi спрашивает, что мы сделали с VM:

I moved it — ?

I copied it — ?

Выбираем I moved it.

Виртуалка загрузилась.

SIP: Записки о протоколе

Заголовки INVITE

 

Method and RURI (Request URI) — назначение запроса, используется прокси-серверами для роутинга запроса.

Via: сообщает, куда слать ответы на данный запрос, каждый прокси-сервер добавляет свой заголовок Via. Параметр branch идентифицирует транзакцию.

To: не используется для роутинга, содержит display name и SIP URI.

From: содержит display name и SIP URI, которые идентифицируют звонящего (Caller ID). Параметр Tag добавляется телефоном.

Call-ID: глобальный уникальный идентификатор вызова

Call-ID + To Tag + From Tag: вместе идентифицируют SIP диалог — Dialog ID (tags используются in parallel forking)

CSeq: command sequence инкременрируется при каждом запросе в текущем диалоге.

Contact: прямой маршрут для связи с userA (как сконтактировать с клиентом напрямую).

 

Разница между Via и Contact

 

  • Via: говорит, куда слать ответы
  • Contact: говорит, куда слать будущие запросы

 

Описанием медиа, кодеков и т.д. занимается протокол SDP. Описание вкладывается в тело SIP запроса. Описание SDP используется при установлении RTP сессии.

Если Record Routing не вовлечен, ACK посылается напрямую пользователю, минуя прокси-сервера (я так понимаю, это Stateless режим работы прокси-сервера).

Но зачастую используются Stateful режим и прокси-сервера таки добавляют заголовок Record Route в сообщения, чтобы заставить «пользователей» слать все запросы через себя. Это дает возможность мониторить состояние сессий.

ACK — метод, не требующий ответа. ACK отсылается только на INVITE, на BYE — нет (BYE—>, <—OK, все, сессия завершена)

Конечные пользователи изучают друг друга через Contact.

 

INVITE/200 OK/ ACK  называют SIP three-way handshake.

 

Разница между SIP-транзакцией и SIP-диалогом

 

  • SIP-транзакция: запрос — промежуточные ответы (если есть) — окончательный ответ.

ACK на положительный ответ — новая транзакция.
ACK — на отрицательный ответ — принадлежит существующей INVITE-транзакции, новая транзакция не создается.

  • SIP-диалог: все общение от начала до конца, идентифицируется Dialog ID (Call-ID+From Tag+To Tag)

 

Разница между SIP-Proxy и B2BUA (PBX)

 

  • SIP-Proxy:

Маршрутизирует запросы (1 leg)
Как быстро опознать? Один и тот же Call-ID

  • B2BUA (back-to-back user agent):

Отвечает на входящий вызов (a-leg)
Инициирует исходящий вызов (b-leg)
Bridge 2 legs — соединяет 2 ноги
Как быстро опознать? Call-ID разные

Call-ID сохраняется при прохождении через прокси-сервер, но при прохождении через B2BUA у вызова 2 ноги, Call-ID у двух ног разные

 

Remote-Party-ID (RPID)  -не стандартизирован, но популярен, используется для определения CallerID.

Стандарный путь для определения CallerID, это заголовки:

P-Asserted-Identity
P-Prefered-Identity
Privacy headers

 

Режимы работы Proxy-серверов

 

  • Stateful
  • Stateless

 

Initial and Sequential Requests

 

Initial and Sequential Requests — почему важно различать? — по разному роутятся

  • Initial — отсутствует To Tag (например, запрос INVITE)
  • Sequential (In-Dialog)— есть To Tag; Same Call-ID, From Tag , To Tag (например BYE, ACK, RE-INVITE)

 

SDP Negotiation

 

  • Normal Negotiation:

INVITE with SDP offer —>
<— 200 OK with SDP answer
ACK without SDP —>

-последнее слово в согласовании за UAS

  • Late Negotiation:

INVITE without SDP —>
<— 200 OK with SDP offer
ACK with SDP answer —>

-последнее слово в согласовании за UAC

 

DTMF

 

  • inband DTMF
  • named events (RFC 2833)
  • SIP INFO

 

Debian: Проблема с локалью

Проблема:

perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Решение «на лету» с консоли (временное до перезагрузки):

root@srv:~# export LANGUAGE=en_US.UTF-8
root@srv:~# export LC_ALL=en_US.UTF-8

Решение постоянное:

root@srv:~# nano /etc/default/locale

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8

На случай, если dpkg-reconfigure localeslocale-gen не принесли ожидаемого результата.

VMware ESXi 5.5

VMware ESXi 5.5 доступ по ssh

По умолчанию ssh в состоянии Disable, чтобы включить с консоли:

  1. <F2>
  2. вводим логин-пароль, если запрашивает, затем снова  <F2> (если не запрашивает, этот пункт пропускаем)
  3. Troubleshooting Options
  4. Enable SSH

 

VMware ESXi 5.5 установка обновлений

1. Закидываем папку с обновлениями в datastore, например, через vSphere Client:

«host» -> Configuration -> Storage -> datastore1 -> «Browse datastore…»

2. Создаем в корне директорию, например Updates, и перекидываем необходимую папку с обновлениями

3. Переводим ESXi в Maintenance Mode

vSphere Client -> Enter Maintenance Mode

4. заходим по ssh на хост

5. устанавливаем обновления (в пути ESXi550-201801002 — это директория с обновлениями)

esxcli software vib install -d /vmfs/volumes/datastore1/Updates/ESXi550-201801002/

затем

reboot

6. Выходим из  Maintenance Mode

vSphere Client -> Exit Maintenance Mode

 

AWK: Полезные команды

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

Из столбца сделать строку:

awk ‘{ printf $1 » «}’ file.txt

 

 

IPFW: Изменение правила по умолчанию без пересборки ядра

Правило по умолчанию: «запретить все, что не разрешено»:

65535 deny ip from any to any

За поведение по умолчанию отвечает системная переменная net.inet.ip.fw.default_to_accept

0 — запретить все
1 — разрешить все

Изменить переменную на лету нельзя, но можно установить ее значение в файле /boot/loader.conf

root@srv: # cat /boot/loader.conf
# SET DEFAULT IPFW’S RULE TO «ALLOW ANY TO ANY»:
net.inet.ip.fw.default_to_accept=1

Потребуется перезагрузка для применения изменений.

Cisco SPA112 и команды IVR

IVR (интерактивное голосовое меню) на АТА можно использовать для прослушивания и конфигурирования  некоторых параметров. Данные команды должны работать также на Cisco SPA 122, Linksys PAP2T, Linksys SPA2102 и, наверное, других похожих циско-линксисовских АТА.

Как начать пользоваться:

  1. Включаете шлюз в розетку
  2. Подключаете к line1 (или line2, без разницы) аналоговый телефон — телефон должен работать в тоновом режиме (это важно)
  3. Набираете на телефоне **** и слышите приветствие робоженщины  c IVR

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

# (pound) — обозначает завершение команды (ввод, энтер — по аналогии:-))

Чтобы выйти с меню, можно набрать 3948# или просто положить трубку

*(звездочка) — обозначает точку в параметрах, таких как ip-адрес, маска и т.д.

** — две звездочки, набранные  быстро подряд за полсекунды обозначают отмену введеного параметра

IVR действиеОпцияОписание
Войти в IVR меню****
Проверить метод адресации100
Установить метод адресации101DHCP: 0
Static IP: 1
PPPoE: Press 2
Проверить ip-адрес (Internet-port)110
Установить статический ip-адрес111Пример:
111# 192*168*15*2#
Проверить маску подсети120
Установить маску подсети121Пример:
121# 255*255*255*0#
Проверить ip-адрес шлюза130
Установить ip-адрес шлюза131Пример:
131# 192*168*15*1#
Проверить MAC-адрес140
Проверить версию прошивки150
Проверить Primary DNS-сервер160
Установить Primary DNS-сервер161Пример:
161# 192*168*15*100#
Проверить порт Web-интерфейса170
Разрешить или запретить доступ к веб-интерфейсу79321: Enable
0: Disable
Factory Reset of Unit
сброс всех недефолтных параметров
73738
(RESET)
Слушаем IVR, нажимаем 1 для подтверждения и * - для отмены.

После подтверждения услышим "Option successful", затем кладем трубку. АТА перезагрузится и станет девственно чист

NOTE: This action is equivalent to Pressing and holding the RESET button for 10 seconds.
Reboot of Voice System
Перезагрузка
732668
(REBOOT)
Как услышим "Option successful", кладем трубку.

NOTE: This action is equivalent to Pressing and immediately releasing the RESET button.
User Factory Reset of Unit
Сброс только пользовательских настроек
877778Слушаем IVR, нажимаем 1 для подтверждения и * - для отмены.

После подтверждения услышим "Option successful", затем кладем трубку. АТА перезагрузится

IVR чаще всего  нужен, чтобы:

  • включить веб-интерфейс
  • узнать ip-адрес
  • произвести сброс

Пример команды:

Узнать, какой на АТА ip-адрес:

**** 110#