Поиск по этому блогу

27.03.2009

Мониторинг сессий на cisco

Очень интересно знать, сколько пользователей на данный момент работают на оборудовании. Сделать это можно включив snmp-server.
snmp-server community public RO
snmp-server community private RW

Для получения значения необходимо знать т.н. OID'ы, которые определяются производителем или использовать MIB'ы.

Так с сервера доступа Cisco AS5350 можно получить данные о состоянии цифровых модемов и тем самым судить о загрузке модемного пула:
cmSystemInstalledModem      1.3.6.1.4.1.9.9.47.1.1.1.0
cmSystemModemsInUse 1.3.6.1.4.1.9.9.47.1.1.6.0
cmSystemModemsAvailable 1.3.6.1.4.1.9.9.47.1.1.7.0
cmSystemModemsUnavailable 1.3.6.1.4.1.9.9.47.1.1.8.0
cmSystemModemsOffline 1.3.6.1.4.1.9.9.47.1.1.9.0
cmSystemModemsDead 1.3.6.1.4.1.9.9.47.1.1.10.0

Можно запрашивать информацию, чтобы обработать далее по номеру доступа. Нужно будет подсчитать каким-нибудь скриптом количество строк на каждый номер, если номеров доступа несколько
cpmActiveLocalPhoneNumber 1.3.6.1.4.1.9.10.19.1.3.1.1.13

Количество PPPoE-сессий
cPppoeSystemCurrSessions 1.3.6.1.4.1.9.9.194.1.1.1

Количество PPtP-сессий
cvpdnSystemSessionTotal  1.3.6.1.4.1.9.10.24.1.1.4.1.3

Чтобы завершать сессии по протоколу snmp необходимо включить на серверах доступа
aaa session-mib disconnect

И использовать MIB: CISCO-AAA-SESSION-MIB. Вот шаблон, на основе которого можно написать нужный shell-скрипт:
export MIBS=+CISCO-AAA-SESSION-MIB
#список активных пользователей
snmpwalk -v2c -c public $hostname casnUserId
snmpwalk -v2c -c public $hostname casnUserId.$session_id
# вывод .. = "login"
# сброс сессии. используется community на запись
snmpset -v2c -c private $hostname casnDisconnect.$session_id i 1
# вывод .. = INTEGER: true(1)

Опции в конфигурационном файле mrtg

Теперь я использую другие методы для отображения данных и данный материал просто очередная заметка. Пакет MRTG - простой и легко настраиваемый мониторинг трафика на портах, загрузки процессоров, памяти и пр. Можно подсовывать данные из скриптов. Помимо OID'ов, которые необходимо знать, чтобы мониторить нечто отличное от интерфейсов, понадобится правильно указать опции в конфигурационном файле MRTG.



Если не надо масштабировать графики
Unscaled[_]: dwmy

Для интерфейсов
Options[_]: nobanner, unknaszero, pngdate, avgpeak, bits 
WithPeak[_]: wmy
XSize[_]: 600
YLegend[_]: Bits per Second
ShortLegend[_]: b/s
Legend1[_]: Incoming Traffic in Bits per Second
Legend2[_]: Outgoing Traffic in Bits per Second
Legend3[_]: Maximal 5 Minute Incoming Traffic
Legend4[_]: Maximal 5 Minute Outgoing Traffic
LegendI[_]:  In:
LegendO[_]:  Out:

В случае, если данные должны отображаться в мега-,кило-,байтах, то нужна опция
kilo[_]: 1024

На всякий случай напоминаю, что в килобите - одна тысяча бит, а не 1024. Соответственно, мегабит - один миллион бит. Часто путают что 1мбит = 1024*1024 бит.

Для процентов 0-100
MaxBytes[_]: 100
AbsMax[_]: 100
Options[_]: nobanner, unknaszero, pngdate, absolute, gauge, nopercent, integer
WithPeak[_]: wmy
YSize[_]: 100
XSize[_]: 600
YLegend[_]: CPU load, %
ShortLegend[_]: %
LegendI[_]:
LegendO[_]:  Load: 
Legend2[_]: CPU load, %

Для мониторинга памяти
Options[_]: nobanner, unknaszero, pngdate, gauge, nopercent 
YSize[_]: 100
XSize[_]: 600
YLegend[_]: Bytes
ShortLegend[_]:Bytes
Legend1[_]: Free
Legend2[_]: Used
Legend3[_]: Max value per interval on graph
Legend4[_]: .
LegendI[_]: Free
LegendO[_]: Used

26.03.2009

Управление устройствами через COM-порт, используя AUX маршуртизатора

Есть устройства, которыми можно управлять только через com-порт.
Если взять штатный цисковский консольный кабель rj45-db9 (голубой), то можно настраивать сервера с консолью DB9 через AUX порт маршрутизатора. Использование штатного кабеля rj45-DB25 (черный), можно использовать для управления телефонными станциями. Если станция подключается потоком E1 к маршрутизатору и статистику с нее снимать не нужно, то для ее управления обойтись можно AUX-портом маршрутизатора и кабелем.



Настройки AUX порта следующие:
line aux 0
refuse-message ^C
The line is busy
^C
session-limit 1
modem InOut
no exec
transport preferred telnet
transport input all
telnet break-on-ip
databits 7
parity space
stopbits 1

Узнать порт линии:
router#show line
Tty Typ Tx/Rx A Modem Roty AccO AccI Uses Noise Overruns Int
65 AUX 9600/9600 - inout - - 10 1 0 0/0 -

к 65+2000 получим telnet xx.xx.xx.xx 2065, где хх - адрес маршрутизатора.
router#show line
Tty Line Typ Tx/Rx A Modem Roty AccO AccI Uses Noise Overruns Int
0 0 CTY - - - - - 0 0 0/0 -
* 1 1 AUX 9600/9600 - inout - - 14 16 0 505061/0 -

Значит порт 2001

К недостаткам данного метода следует отнести то, что к com-порту допускается только одно подключение в единицу времени. Некорректное завершение telnet-сессии и придется подключаться на маршрутизатор и сбрасывать линию. К сожалению, у меня не получилось сбрасывать ее автоматически. Вот пример активной сессии:
router#show users
Line User Host(s) Idle Location
1 aux 0 incoming 00:00:01 xx.xx.xx.xx


Пробовал такие таймауты:
session-timeout 5
exec-timeout 5 0
absolute-timeout 60

Сброс линии:
router#clear line aux 0

Кабель можно изготовить самостоятельно. Распайка кабеля на DB25M и соответствие контактов на RJ45:
2 3
3 6
4 1
5 8
7 4,5 синюю пару на 7 ногу.
8 7
20 2

25.03.2009

Политики на подинтерфейсах


CBWFQ : Not supported on subinterfaces возникает при попытке повесить политику, содержащую классы на подинтерфейс. Например:
router(config-subif)#service-policy output myservice
CBWFQ : Not supported on subinterfaces
Где политика myservice выглядит следующим образом:
policy-map myservice
class Voip
priority 128
class class-default
fair-queue



Чтобы реализовать подобное ограничение необходимо создать дополнительную политику, где обязательно указывается/ограничивается полоса пропускания:

policy-map 512k
class class-default
shape average 512000
service-policy myservice
router(config-subif)#no service-policy output myservice
router(config-subif)#service-policy output 512k
router(config-subif)#
Если IOS поддерживает иерархические политики Hierarchical Queueing Framework, то можно добавить еще одну вложенность политик. У меня работало на IOS 12.4T и платформах Cisco 2800, 3800. Не работало на 3745 с IOS 12.2 , кажется. Вот пример:
class-map match-all SouthNetwork
match access-group name SouthNetwork
class-map match-all Video
match access-group name Video
class-map match-all WestNetwork
match access-group name WestNetwork
class-map match-all EastNetwork
match access-group name EastNetwork
!
!
policy-map East
class Video
priority 1024
class class-default
fair-queue

policy-map West
class Video
priority 190
class class-default
fair-queue

policy-map South
class Video
priority 400
class class-default
fair-queue

policy-map uplink
class EastNetwork
shape average 4000000
service-policy East
class WestNetwork
shape average 1000000
service-policy West
class SouthNetwork
shape average 512000
service-policy South
class class-default
fair-queue

policy-map 10M
class class-default
shape average 10000000
service-policy uplink

24.03.2009

Примеры использования radius-сервера FreeRadius

В примерах будут рассматриваться только текстовые конфигурационные файлы. Очень часто необходимо создать небольшое количество учетных записей устанавливать/настраивать/сопровождать базу данных никакого смысла нет.

Текстовые конфигурационные файлы FreeRadius находятся в каталоге /usr/local/etc/raddb

clients.conf - здесь описываются сервера доступа, например:
client  10.1.0.1 {
secret = VerySecrectKey
shortname = nas_one
nastype = cisco
}
client 10.2.0.1 {
secret = VerySecrectKeyAgain<
shortname = nas_two
nastype = cisco
}
users - здесь описываются учетные записи пользователей. Я помещаю все учетные записи вверху файла users. Вот самая простейшая из них:
ivan      Cleartext-Password := "ivan123"
Service-Type = Framed-User,
Framed-Protocol = PPP



Указывается логин ivan и пароль ivan123. В конкретном примере адрес будет выдан марштузизатором (NAS) из собственного пула адресов. Когда на удаленном рабочем месте создается vpn-подключение, оно становится маршрутом по-умолчанию и весь трафик направляется через него, в частности интернет. Если циска осуществляет трансляцию пула адресов в интернет и вас не смущает подобное прохождение вашего интернет-трафика, то можно ничего не делать. В противном случае понадобится в настройках подключения убрать галочку: А так же понадобится на удаленном компьютере прописать статический маршрут в локальную сеть офиса. Вот тут окажется, что необходимо при подключении выдавать постоянный ip-адрес и что это невозможно реализовать средствами Cisco IOS. Адрес возможно передать в качестве атрибута подключения от radius-сервера nas'у cisco. Сеть, выдаваемая radius'ом не должна быть в локальных пулах nas'ов, чтобы исключить дублирование адресов.
st_ip             Cleartext-Password := "ipaddr"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 10.10.10.2,
Framed-IP-Netmask = 255.255.255.255

Таким образом, пользователю st_ip всегда будет выдаваться адрес 10.10.10.2 на который он сможет прописать статический маршрут сети своего офиса 10.0.0.0 255.0.0.0 .

Если необходимо подключить дополнительно какие-нибудь устройства, например ip-телефон, то на удаленной стороне необходимо как минимум установить маршрутизатор, который сумеет установить pptp-сессию до вашего NAS через имеющееся WAN-подключение и у которого будет на LAN порту прописана небольшая сеть из вашего офиса. Трансляция с этой сети на сеть офиса 10.0.0.0 255.0.0.0 должна быть отключена. В users добавлена запись:
st_ip             Cleartext-Password := "ipaddr"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 10.10.10.2,
Framed-IP-Netmask = 255.255.255.255,
Framed-Route = "10.11.0.0/28 10.10.10.2"
При успешном подключении пользователя st_ip, на NAS появится указанный статический маршрут в таблице маршрутизации. Далее все зависит от корректной настройки удаленного оборудрования. Помню в качестве такого оборудования использовался какой-то Linksys c openwrt.

Еще с radius'ом можно делать такие вещи:
  • ограничить доступ пользователя в зависимости от адреса nas;
  • ограничить доступ пользователя к части локальной сети с помощью индивидуальных списков доступа.
Первое мне понадобилось, когда пришлось делать удаленный доступ для двух разных групп людей, которые подключались на разные интерфейсы одного NAS'а. Использование второго NAS'а было невозможно.

huntgroups - тут из адреса NAS'а можно сделать правило. Например имеющиеся в clients.conf адреса NAS'ов поместить в разные группы:
manager            NAS-IP-Address == 10.1.0.1
support NAS-IP-Address == 10.2.0.1
В users появится дополнительное обязательное правило. Обязательно в той же строке, что и login, иначе проверка проводиться не будет:
bestmanager       Cleartext-Password := "11111", Huntgroup-Name == "manager"
Service-Type = Framed-User,
Framed-Protocol = PPP

wheel_sp Cleartext-Password := "1234", Huntgroup-Name == "support"
Service-Type = Framed-User,
Framed-Protocol = PPP
Таким образом, пользователи с указанной группой могут подключаться только на свой NAS. Пользователи без группы - на любой.

Ограничить доступ какой-то учетной записи можно с помощью списков доступа. Сами правила могут быть переданы в атрибутах, либо могут быть указаны на NAS'е в виде ACL и тогда в атрибутах будет передаваться номер ACL. Именно номер, так как с именами иногда возникают проблемы. В частности у меня с FreeRadius'ом не заработало, а с GNU Radius таких проблем не было. Пусть на NAS'е имеется некий ACL 100:
nas#show access-lists 100
Extended IP access list 100
10 permit ip 10.10.9.0 0.0.0.255 10.50.0.0 0.0.0.255
Где 10.10.9.0/24 - динамический локальный пул на NAS'е, а 10.50.0.0 0.0.0.255 - сеть, куда нужно обеспечить доступ, а все остальное запретить. В users создаются учетные записи с дополнительным атрибутом FilterID:
showme           Cleartext-Password := "1234"
Service-Type = Framed-User,
Filter-Id = "100",
Framed-Protocol = PPP
По-умолчанию NAS применит полученный ACL на out. Чтобы он блокировал исходящий от пользователя (входящий для NAS / in) на NAS'е выполняется команда:
radius-server attribute 11 default direction in

Настройку AAA-модели на NAS'е при использовании radius'а опишу в другой статье.

19.03.2009

Как работают в стеке коммутаторы Cisco 3750

Если объяснять просто, то стекирование - получение одного коммутатора путем включения коммутаторов одной серии через специальные порты. Стекировать коммутаторы удобно по нескольким причинам:
- Легче эксплуатировать;
- Экономия Ethernet портов и трансиверов. Весь стек можно подключить одним гигабитным портом или использовать всего один оптический трансивер.




Чтобы узнать какие коммутаторы вы можете подключить к вашему 3750 достаточно выполнить команду:
switch(config)#switch 1 provision ?
nme-xd-24es-1s provision an EtherSwitch SM with 24+1G interfaces
nme-xd-24es-1s-p provision an EtherSwitch SM with 24+1G interfaces
ws-c3750-24fs provision a Catalyst 3750 switch with 24FX+2G interfaces
ws-c3750-24p provision a Catalyst 3750 switch with 24pwr+2G interfaces
ws-c3750-24ts provision a Catalyst 3750 switch with 24+2G interfaces
ws-c3750-48p provision a Catalyst 3750 switch with 48pwr+4G interfaces
ws-c3750-48ts provision a Catalyst 3750 switch with 48+4G interfaces
ws-c3750e-24pd provision a Catalyst 3750E switch with 24GPwr+2TenG interfaces
ws-c3750e-24td provision a Catalyst 3750E switch with 24G+2TenG interfaces
ws-c3750e-48pd provision a Catalyst 3750E switch with 48GPwr+2TenG interfaces
ws-c3750e-48td provision a Catalyst 3750E switch with 48G+2TenG interfaces
ws-c3750g-12s provision a Catalyst 3750 switch with 12G interfaces
ws-c3750g-12s-d provision a Catalyst 3750 switch with 12G interfaces and DC power supply
ws-c3750g-16td provision a Catalyst 3750 switch with 16G+1XENPAK interfaces
ws-c3750g-24ps provision a Catalyst 3750 switch with 24Gpwr+4G interfaces
ws-c3750g-24t provision a Catalyst 3750 switch with 24GTX interfaces
ws-c3750g-24ts provision a Catalyst 3750 switch with 24GTX+4G interfaces
ws-c3750g-24ts-1u provision a Catalyst 3750 switch with 24GTX+4G interfaces
ws-c3750g-24ws-s25/50 provision a Catalyst 3750 switch with 24Gpwr+2G interfaces + Wireless Controller
ws-c3750g-48ps provision a Catalyst 3750 switch with 48Gpwr +4G interfaces
ws-c3750g-48ts provision a Catalyst 3750 switch with 48GTX+4G interfaces

Максимальное количество коммутаторов в стеке - 9. Когда коммутаторов в шкафу 6, а так же имеются кроссовые панели и организаторы, оптический кросс, то места в шкафу не остается для батарей бесперебойного питания. Организации питания я касаться не буду.

Штатный кабель позволяет оставлять 6 юнитов между коммутаторами в шкафу. Можно растянуть до 7 юнитов, но не рекомендую. К тому же если коммутаторы окажутся разной глубины, то сделать это будет в принципе невозможно.
Имеется в продаже трехметровый стековый кабель CAB-STACK-3M. Предназначен для включение первого коммутатора в последний, согласно прилагаемой к коммутатору инструкции. Может понадобиться в случае необходимости выключить и вытащить коммутатор из середины стека. Об этом позже.

Все коммутаторы в стеке должны иметь одинаковые версии IOS. Это мое мнение и если кто-то не согласен - дело хозяйское. По крайней мере, известны случаи, когда коммутаторы не включаются друг в друга из-за разного набора фич. Поэтому достается коммутатор из коробки, подключается консоль и ноут в первый порт, например, и начинается процедура обновления IOS.
На ноутбуке имеется tftp-,ftp-сервер и файлом IOS c3750-*.tar. Раньше я был адептом исключительно .bin версий "дистибутивов", содержащих только файл ios'а. Теперь не принципиально, пусть будет там куча файлов ибо http-сервер все равно отключаю, а процесс обновления автоматизирован и отличается от обновления на маршрутизаторах.
На коммутаторе прописывается адрес из той же сети, как и адрес ноутбука 10.0.0.1
interface Fa1/0/0
no switchport
ip address 10.0.0.2 255.0.0.0

Процедура обновления IOS на коммутаторе:
switch#archive download-sw /allow-feature-upgrade /overwrite /reload ftp://10.0.0.1/c3750-[пропущено].tar
UPDATE: Есть еще заметки про обновление IOS на 3750
Обновление IOS через archive c /imageonly
Обновление IOS на стеке Cisco 3750
Обновление стека по частям

На всю процедуру подготовки коммутатора уходит около 20 минут.
Если коммутатор подключается к уже работающему стеку, то никакие настройки на нем не делаются, так как конфигурацию для него генерирует мастер стека.

Собирать стек лучше с верхнего коммутатора в шкафу. Он включается первым, берет себе индекс "1". Все интерфейсы в стеке совпадают с индексом. Если индекс "5", то и интерфейсы 5/0/x. Ну а если этот коммутатор с индексом "5" пятый сверху окажется, так это только удобнее. К работающему коммутатору-мастеру с индексом "1" последовательно подключаются и включаются остальные коммутаторы. Им присваивается индекс и согласно их модели автоматически создаются интерфейсы в конфигурации.

Состояние коммутаторов смотреть командой:
STACK#show switch
Switch/Stack Mac Address : 0015.6230.c480
H/W Current
Switch# Role Mac Address Priority Version State
----------------------------------------------------------
*1 Master 0015.6230.c480 2 0 Ready
2 Member 0021.5681.dd80 1 0 Ready
3 Member 001f.9ee1.5980 1 0 Ready
4 Member 0021.5682.2400 1 0 Ready
5 Member 001f.9ee1.5780 1 0 Ready
6 Member 0021.5682.0900 1 0 Ready

STACK#show switch neighbors
Switch # Port 1 Port 2
-------- ------ ------
1 6 2
2 1 3
3 2 4
4 3 5
5 4 None
6 None 1
Конкретно в этом случае "6" коммутатор пришлось дополнительно устанавливать между "1" и "2" и подключать его в свободный порт "1"-го. Не "фен-шуй", но что поделать. Переделывать рабочую конфигурацию в связи с изменением индекса интерфейсов было бы накладнее.
Однажды я менял предпоследний "4" 24-портовый коммутатор на 48-портовый. Не хотел выключать последний коммутатор, так как в нем помимо клиентских портов были порты до других коммутаторов. Новый коммутатор конечно же взял себе индекс "1", а не "4", как того бы мне хотелось, так как он был свободен, а оставшийся работающим последний коммутатор-мастер имел "5". Соответственно, весь конфигурационный файл, где под "1" был 24-портовый коммутатор был автоматически сгенерирован в 48-портовый и настройками портов по-умолчанию. Хорошо что настройки на старом "1" были типовые.. Пришлось переделывать:
STACK(config)#switch 1 renumber 4
Ну и сброс "4" по питанию. Есть возможность перезагрузить конкретный коммутатор в стеке:
STACK#reload slot 4
Кстати, коммутатор "помнит" свой старый индекс.

Расскажу как происходят выборы мастера. Однажды я собрал стек из трех коммутаторов и выключил средний. Верхний , так как он был включен первым, остался мастером, а нижний провел выборы и объявил себя тоже мастером в отсутствии соседей. Это видно даже наглядно, так как горит индикатор master на передней панели.
Конфигурации на обоих мастерах получаются одинаковые, в частности адрес для управления и там, и там (это намек). Включаю средний и наблюдаю картину. Происходят заново выборы и mac-адрес нижнего оказывается больше ;) . Верхний коммутатор перезагружается. Можно выставлять приоритеты:
STACK(config)#switch 1 priority ?
1-15 Switch Priority

Но вот эти лишние перезагрузки - ни к чему. Еще ни разу не получилась каша из конфига после выключения питания.

Есть схемы подключения коммутаторов, когда первый и последний соединяются CAB-STACK-3M. Лично в моем случае это неудобно, так как при подключении и отключении кабеля один из комумтаторов должен быть выключен. Представьте что мне надо снять нижний PoE коммутатор, где все порты по какой-либо причине оказались свободными и этот коммутатор необходимо перенести в другой шкаф. Нужно было бы выключать и предпоследний работающий коммутатор с данными, чтобы подключить к нему длинный кабель от первого коммутатора. Как вариант, кабель временно не подключать.

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

16.03.2009

Связь между телефонными станциями через сеть передачи данных

В зависимости от телефонной станции или имеющихся лицензий на нее, можно использовать два протокола сигнализации:
  • QSIG
  • Euro ISDN (net5 в cisco)
Первый используется в корпоративных сетях и известен своими функциями, в частности, идентификацией. Очень удобно, когда на дисплее вашего телефона помимо номера отображается ФИО звонящего сотрудника.
Второй используется для подключения к сетям общего пользования, а так же в корпоративных сетях, если по каким-то причинам вы не можете использовать QSIG.
Если один порт, например станция, настраивается для работы в режиме network, то маршрутизатор - user. И наоборот.



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

Требования к маршрутизаторам следующие:
  1. Модель из серии 2800, например, 2811. Модель из серии 3800, например, 3845. Используйте конфигуратор Cisco, чтобы составить спецификацию оборудования.
  2. Программное обеспечение маршрутизатора. Если вы воспользовались конфигуратором, то наверняка включили программное обеспечение IOS IP VOICE/SP SERVICES, которое входит в состав т.н. bundle Voice (V_K9)
  3. Если подключение производится только одним потоком, то достаточно карты VWIC2-1MFT-T1/E1 (1-Port 2nd Gen Multiflex Trunk Voice/WAN Int. Card - T1/E1)
  4. Для преобразования голоса в ip и обратно необходимы карты PVDM2 с определенным количеством цифровых процессоров DSP, выполняющих кодирование/декодирование голоса. Есть карты на 8,16,32,48,64 процессора. Если прогнозируется, что не будет больше, чем 16 одновременных звонков, то можно обойтись PVDM2-16, входящий в состав СISCO2811-V_K9. Если необходимо использовать все таймслоты на карте станции, то - PVDM2-32 минимум. Если маршрутизатор комплектуется картами с FXS/FXO портами, то каждый порт будет использовать 1 DSP из имеющихся. Неоходимо это предусматривать.
Пусть имеем маршрутизатор CISCO3845-V_K9 в следующей комплектации (серийные номера удалены):
router1#show inventory
NAME: "3845 chassis", DESCR: "3845 chassis"
PID: CISCO3845 , VID: V01 , SN: x

NAME: "c3845 Motherboard with Gigabit Ethernet on Slot 0", DESCR: "c3845 Motherboard with Gigabit Ethernet"
PID: CISCO3845-MB , VID: V06 , SN: x

NAME: "VWIC2-1MFT-T1/E1 - 1-Port RJ-48 Multiflex Trunk - T1/E1 on Slot 0 SubSlot 0", DESCR: "VWIC2-1MFT-T1/E1 - 1-Port RJ-48 Multiflex Trunk - T1/E1"
PID: VWIC2-1MFT-T1/E1 , VID: V01 , SN: x

NAME: "One-Port Fast Ethernet High Speed WAN Interface Card on Slot 0 SubSlot 1", DESCR: "One-Port Fast Ethernet High Speed WAN Interface Card"
PID: HWIC-1FE , VID: V01 , SN: x

NAME: "VWIC2-1MFT-T1/E1 - 1-Port RJ-48 Multiflex Trunk - T1/E1 on Slot 0 SubSlot 3", DESCR: "VWIC2-1MFT-T1/E1 - 1-Port RJ-48 Multiflex Trunk - T1/E1"
PID: VWIC2-1MFT-T1/E1 , VID: V01 , SN: x

NAME: "PVDMII DSP SIMM with four DSPs on Slot 0 SubSlot 4", DESCR: "PVDMII DSP SIMM with four DSPs"
PID: PVDM2-64 , VID: V01 , SN: x

Телефонная станция подключается в порт Slot 0 Subslot 3. Она не имеет QSIG лиценции, поэтому подключение производится по Euro ISDN. К тому же станция может быть только как user.
Для начала задается режим работы карты VWIC2-1MFT-T1/E1:
card type e1 0 3

Разрешается использовать синхронизацию от этой карты:

network-clock-participate wic 3

Можно использовать ее в качестве основной, если источников несколько:

network-clock-select 1 E1 0/3/0

Определяется тип сигнализации Euro ISDN:

isdn switch-type primary-net5

После этого появится контроллер E1. Договариваемся, что в E1 не будет использоваться CRC4 и будут использоваться все имеющиеся таймслоты:
controller E1 0/3/0
framing NO-CRC4
pri-group timeslots 1-31
Автоматически создается интерфейс D-канала, в который надо внести изменения с учетом того, что маршрутизатор выполняет функции network:
interface Serial0/3/0:15
no ip address
encapsulation hdlc
isdn switch-type primary-net5
isdn protocol-emulate network
isdn incoming-voice voice
isdn send-alerting
isdn sending-complete
no cdp enable
Производится проверка подключения:

prouter1#show controllers e1
E1 0/3/0 is up.
Applique type is Channelized E1 - balanced
Cablelength is Unknown
No alarms detected.
alarm-trigger is not set
Version info Firmware: 20071011, FPGA: 13, spm_count = 0
Framing is NO-CRC4, Line Code is HDB3, Clock Source is Line.
Data in current interval (581 seconds elapsed):
0 Line Code Violations, 0 Path Code Violations
0 Slip Secs, 0 Fr Loss Secs, 0 Line Err Secs, 0 Degraded Mins
0 Errored Secs, 0 Bursty Err Secs, 0 Severely Err Secs, 0 Unavail Secs
Total Data (last 24 hours)
0 Line Code Violations, 0 Path Code Violations,
0 Slip Secs, 0 Fr Loss Secs, 0 Line Err Secs, 0 Degraded Mins,
0 Errored Secs, 0 Bursty Err Secs, 0 Severely Err Secs, 0 Unavail Secs
router1#show isdn status
Global ISDN Switchtype = primary-net5
ISDN Serial0/3/0:15 interface
******* Network side configuration *******
dsl 0, interface ISDN Switchtype = primary-net5
Layer 1 Status:
ACTIVE
Layer 2 Status:
TEI = 0, Ces = 1, SAPI = 0, State = MULTIPLE_FRAME_ESTABLISHED
Layer 3 Status:
2 Active Layer 3 Call(s)
CCB:callid=C78C, sapi=0, ces=0, B-chan=2, calltype=VOICE
CCB:callid=3335, sapi=0, ces=0, B-chan=9, calltype=VOICE
Active dsl 0 CCBs = 2
The Free Channel Mask: 0xFFFF7EFD
Number of L2 Discards = 0, L2 Session ID = 1
Total Allocated ISDN CCBs = 2
Теперь настраивается voip часть:

voice rtp send-recv
!
voice service voip
allow-connections h323 to h323
h323

Пора приступить к номерному плану. Автоматически был создан порт voice-port 0/3/0:15. Именно он будет использоваться в т.н. dial-peer - маршрутах звонков. Исходные данные:
86101XXX - номера на АТС, подключенной к маршрутизатору router1;
86102XXXX - номера на АТС, подключенной к маршрутизатору router2;
10.0.0.1 - ip-адрес на интерфейсе маршрутизатора router1, через который доступен router2;
10.0.0.2 - ip-адрес на интерфейсе маршрутизатора router2, через который доступен router1.
Номера dial-peer выбираются произвольно. Главное, чтобы были уникальными.
dial-peer voice 86101 pots
destination-pattern 86101...
progress_ind alert enable 8
direct-inward-dial
port 0/3/0:15
forward-digits all
!
dial-peer voice 86102 voip
destination-pattern 86102....
session target ipv4:10.0.0.2
dtmf-relay rtp-nte
no vad
можно добавить настройки для факсов
fax-relay ecm disable
fax rate 14400
fax nsf 000000
fax protocol t38 nse ls-redundancy 0 hs-redundancy 0 fallback cisco

Следует учитывать, что в dial-peer voip, где используется session target ipv4 нельзя указать адрес источника. Источник можно указать:
  • для session target ras, когда вы настраиваете h323-шлюз и вводите соответствующие команды на интерфейсе для регистрации на гейткипере;
  • для session target sip-server, когда вы настраиваете подключение маршрутизатора к SIP-серверу.

Расписывать конфигурацию router2 подробно не стану. Отмечу, что для связи со станцией используется сигнализация QSIG, станция является network для маршрутизатора.
card type e1 0 0
!
network-clock-participate wic 0
network-clock-select 1 E1 0/0/0
!
isdn switch-type primary-qsig
!
voice rtp send-recv
!
voice service voip
qsig decode
allow-connections h323 to h323
h323
!
controller E1 0/0/0
framing NO-CRC4
pri-group timeslots 1-31
!
interface Serial0/0/0:15
no ip address
encapsulation hdlc
isdn switch-type primary-qsig
isdn incoming-voice voice
isdn send-alerting
isdn sending-complete
no cdp enable
!
dial-peer voice 86102 pots
destination-pattern 86102....
progress_ind alert enable 8
direct-inward-dial
port 0/0/0:15
forward-digits all
!
dial-peer voice 86101 voip
destination-pattern 86101...
session target ipv4:10.0.0.1
dtmf-relay rtp-nte
no vad
fax-relay ecm disable
fax rate 14400
fax nsf 000000
fax protocol t38 nse ls-redundancy 0 hs-redundancy 0 fallback cisco
Чтобы слушать привычные тоны КПВ, необходимо в voice-port настроить cptone:
voice-port 0/0/0:15
cptone RU
Когда что-то не работает, необходимо включать отладку и смотреть:

router#debug isdn q931

router#debug voice dcapi inout

Для корректной работы сервисов желательно использовать один тип сигнализации. Передача имен в данном примере была бы возможна, если бы router1 и ATC использовали QSIG, как и вторая станция.

Применение макросов

Однажды столкнулся с тем, что коммутатор Cisco Catalyst 500 Express можно настроить только через web-интерфейс и доступ к консоли, доступ по telnet'у, snmp для управления им даже не предполагается. Там на выбор предлагалось несколько макросов:
  • Cisco-desktop
  • Cisco-phone
  • Cisco-switch
  • Cisco-router
  • Cisco-wireless
С макросами удобно работать, если настраивается диапазон портов, настройки портов на разных коммутаторах одинаковые и отличаются только номером VLAN. Идея была перенесена в повседневное использование для конфигурирования коммутаторов командами через command line interface (CLI).



С имеющимися макросами, а так же с командами, из которых они состоят можно знакомиться так:
switch#show parser macro

В режиме конфигурирования составляется макрос:
macro name lan-user
switchport access vlan $access_vlan
switchport mode access
no logging event link-status
no cdp enable
spanning-tree portfast
spanning-tree bpduguard enable
@

Здесь lan-user - название макроса, а $access_vlan - переменная. В самом макросе описываются команды управления портом, как если бы вы их вводили в режиме конфигурации. При создании макроса есть подсказка заканчивать символом @.

Данный макрос создается на множестве коммутаторов сети. На switch1 пользователи находятся во VLAN 231, а на switch2 - 232 Начинаем...
switch1(config)#int range fa3/0/1 - 24
switch1(config-if-range)#macro trace lan-user $access_vlan 231
Applying command... ' switchport access vlan 231'
Applying command... ' switchport mode access'
Applying command... ' no logging event link-status'
Applying command... ' no cdp enable'
Applying command... ' spanning-tree portfast'
Applying command... ' spanning-tree bpduguard enable'
... пропущено...
switch2(config)#int range fa1/0/1 - 48
switch2(config-if-range)#macro trace lan-user $access_vlan 232
Applying command... ' switchport access vlan 232'
Applying command... ' switchport mode access'
Applying command... ' no logging event link-status'
Applying command... ' no cdp enable'
Applying command... ' spanning-tree portfast'
Applying command... ' spanning-tree bpduguard enable'
... пропущено...

В итоге работать стало проще и веселее.
interface FastEthernet1/0/1
switchport access vlan 231
switchport mode access
no logging event link-status
macro description lan-user
no cdp enable
spanning-tree portfast
spanning-tree bpduguard enable