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

20.07.2009

Работа с tacacs'ом

Tacacs - AAA-сервер. Используется для авторизации пользователей и разграничения прав доступа. На операционной системе FreeBSD достаточно просто устанавливается из портов. К сожалению, в некоторых репозиториях линуксов его больше нет.
После установки необходимо изучить скрипт запуска. Станет понятно, что в /etc/rc.conf следует добавить строку
tac_plus_enable="YES"

Далее необходимо написать конфигурационный файл /usr/local/etc/tac_plus.conf
Я решил, что пароль enable будет браться из tacacs, а так же пользователи с максимальным уровнем привилегий 15 (в cisco ios) будут заведены там же. Для начала следует зашифровать DES'ом пароли. Это можно сделать имеющейся в составе сервера утилитой tac_pwd.
#tac_pwd
Password to be encrypted: mypassword
EEC7t7Q9w8Ggs

Разумеется, для разных пользователей должны быть разные пароли, но в примере я буду использовать только один.
user =  $enable$ {
login = des EEC7t7Q9w8Ggs
}

user = admin {
login = des EEC7t7Q9w8Ggs
service = exec {
default attribute = permit
priv-lvl = 15
}
}

user = operator {
login = des EEC7t7Q9w8Ggs
service = exec {
default attribute = permit
priv-lvl = 1
}
}

Очевидно, что на оборудовании тоже необходимо сделать изменения. Пусть это будет коммутатор.
tacacs-server host 10.0.0.254

aaa new-model
aaa authentication login default group tacacs+ local
aaa authentication enable default group tacacs+ enable none
aaa authorization exec default group tacacs+ local
aaa accounting exec default start-stop group tacacs+
aaa accounting commands 15 default start-stop group tacacs+
aaa accounting network default start-stop group tacacs+
aaa accounting connection default start-stop group tacacs+
aaa accounting system default start-stop group tacacs+

Проверка. Вводятся пароли, указаные в tacacs'е
$ telnet 10.0.0.250
Trying 10.0.0.250...
Connected to 10.0.0.250.
Escape character is '^]'.


User Access Verification

Username: admin
Password:

Switch#
..
$ telnet 10.0.0.250
Trying 10.0.0.250...
Connected to 10.0.0.250.
Escape character is '^]'.


User Access Verification

Username: operator
Password:

Switch>en
Password:
Switch#

В конфигурационный файл следует добавить строку с указанием файла, в который будет сохраняться аккаунтинговая инофрмация. В моем случае, настройки по-умолчанию не подходят, так как не использую Syslog, через который осуществляет логирование событий процесс tac_plus. Итак:
accounting file = /log/tac.acct

Проверка логирования.
Mon Jul 20 14:23:56 2009    10.0.0.250    admin    tty1    10.10.10.11    start    task_id=12    timezone=UTC    service=shell
Mon Jul 20 14:24:21 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=12 timezone=UTC service=shell priv-lvl=15 cmd=show running-config
Mon Jul 20 14:25:36 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=13 timezone=UTC service=shell priv-lvl=15 cmd=ping 10.0.0.250
Mon Jul 20 14:26:38 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=14 timezone=UTC service=shell priv-lvl=15 cmd=configure terminal
Mon Jul 20 14:26:40 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=15 timezone=UTC service=shell priv-lvl=15 cmd=interface FastEthernet 2/0/10
Mon Jul 20 14:26:41 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=16 timezone=UTC service=shell priv-lvl=15 cmd=shutdown
Mon Jul 20 14:26:43 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=17 timezone=UTC service=shell priv-lvl=15 cmd=no shutdown
Mon Jul 20 14:26:52 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=18 timezone=UTC service=shell priv-lvl=15 cmd=hostname SWitch-1
Mon Jul 20 14:27:24 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=12 timezone=UTC service=shell disc-cause=9 disc-cause-ext=2 pre-session-time=6 elapsed_time=208

Таким образом, логируется:
  • подключение
  • отключение
  • команды, выполненые в конфигурационом режиме
  • команды, выполненные в командном(?) режиме
Последнее невозможно выполнить через archive, но об это далее.

Хочу отметить несколько важных вещей.
1. Можно enable хранить/менять в tacacs'e
aaa authentication enable default group tacacs+ enable none

Пока оборудование будет подключено к сети - пароль будет браться с сервера, а не с конфигурационного файла. Для того, чтобы использовать цисковский enable необходимо выключить tacacs или отключить оборудование от сети.
2. Можно задать уровень, на котором будут отсылаться пакеты с командами.
aaa accounting commands 15 default start-stop group tacacs+

3. Можно создать группы пользователей, которым можно разрешить доступ только на определенное оборудование.

Для реализации п.3 используются списки доступа в конфигурационном файле tacacs. Например:
acl = USSR {
permit =^10.112.112.112$
deny =^10.
}

group = USSR {
default service = permit
service = exec {
default attribute = permit
priv-lvl = 15
}
acl = USSR
}
user = comrade {
login = des EEC7t7Q9w8Ggs
member = USSR
}

16.07.2009

Что за.. Hierarchical Queueing Framework?

Ранее описывал пример использования иерархических очередей с применением политик. Что это такое можно прочитать здесь на доступном всем языке.
Хотелось бы еще раз повториться, но с описанием некоторой странной особенности, которую я себе никак не могу объяснить.
Имеется некий интерфейс, где скорость ограничена 10 Мбит/с
interface FastEthernet0/1/0
ip address 10.0.0.2 255.255.255.252
duplex auto
speed 10
service-policy output uplink

Политика выглядит следующим образом:
policy-map uplink
class EastNetwork
shape average 4000000
service-policy client.4Mbit
class class-default
fair-queue
policy-map client.4Mbit
class Realtime
priority percent 50
class Application
bandwidth percent 30
class V.signaling
bandwidth percent 1
class control
bandwidth percent 2
class class-default
fair-queue

Посмотрим, что получилось. Для класса Realtime должно быть выделено 50% = 2Мбит/с из имеющейся полосы в 4Мбит/с.
router#show policy-map interface fa0/1/0
FastEthernet0/1/0

Service-policy output: uplink

Class-map: EastNetwork (match-all)
17606674 packets, 8129896029 bytes
30 second offered rate 620000 bps, drop rate 0 bps
Match: access-group name EastNetwork
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/19782/0
(pkts output/bytes output) 17586891/8100697882
shape (average) cir 4000000, bc 16000, be 16000
target shape rate 4000000

Service-policy : client.4Mbit

queue stats for all priority classes:
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 7938196/1427751077

Class-map: Realtime (match-all)
7938196 packets, 1427751077 bytes
30 second offered rate 105000 bps, drop rate 0 bps
Match: protocol rtp
Priority: 50% (2000 kbps), burst bytes 50000, b/w exceed drops: 0
...

Все корректно. Теперь необходимо в политику uplink добавить еще один класс.
policy-map uplink
class EastNetwork
shape average 4000000
service-policy client.4Mbit
class WestNetwork
shape average 384000
service-policy client.384k
class class-default
fair-queue
policy-map client.386K
class Realtime
priority percent 70
class V.signaling
bandwidth percent 4
class class-default
fair-queue

Смотрим результат
router#show policy-map interface fa0/1/0
FastEthernet0/1/0

Service-policy output: uplink

Class-map: EastNetwork (match-all)
132401 packets, 34674598 bytes
30 second offered rate 275000 bps, drop rate 0 bps
Match: access-group name EastNetwork
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/71/0
(pkts output/bytes output) 132330/34567104
shape (average) cir 4000000, bc 16000, be 16000
target shape rate 4000000

Service-policy : client.4Mbit

queue stats for all priority classes:
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 81843/6056382

Class-map: Realtime (match-all)
81843 packets, 6056382 bytes
30 second offered rate 88000 bps, drop rate 0 bps
Match: protocol rtp
Priority: 50% (1666 kbps), burst bytes 41650, b/w exceed drops: 0
...

Т.е. 50% от 4000000 превратились в 1666 kbps?! Как такое может быть? Пока можно обойти эту проблему увеличив скорость на физическом интерфейсе
interface FastEthernet0/1/0
ip address 10.0.0.2 255.255.255.252
duplex auto
speed 100
service-policy output uplink

И проблема с выделяемой полосой отодвинулась на неопределенное время
...
Priority: 50% (2000 kbps)
...


Я не подбирал какие-то специальные значения для политик. Просто так получилось. Как подобная политика бы повела себя на WAN-интерфейсе, где скорость всего 2Мбит/с даже незнаю.

15.07.2009

Транки и etherchannel

Многие возможно знают про логическую агрегацию нескольких физических линков между коммутаторами. Она настраивается достаточно просто. Например:
sw-01

interface GigabitEthernet1/0/21
description to gi1/0/1 sw-02
switchport trunk encapsulation dot1q
switchport mode trunk
channel-group 1 mode active

interface GigabitEthernet1/0/22
description to gi1/0/2 sw-02
switchport trunk encapsulation dot1q
switchport mode trunk
channel-group 1 mode active

sw-02

interface GigabitEthernet1/0/1
description to gi1/0/21 sw-01
switchport trunk encapsulation dot1q
switchport mode trunk
channel-group 1 mode active

interface GigabitEthernet1/0/1
description to gi1/0/22 sw-01
switchport trunk encapsulation dot1q
switchport mode trunk
channel-group 1 mode active



При этом на каждом коммутаторе автоматически после введения команды "channel-group" создастся логический интерфейс Port-channel с тем же номером группы и вообще без настроек. Настройки на нем следует сделать идентичные портам, которые он объединяет.
interface Port-channel1
switchport trunk encapsulation dot1q
switchport mode trunk

Проверка:
sw-01#show etherchannel summary 
Flags: D - down P - bundled in port-channel
I - stand-alone s - suspended
H - Hot-standby (LACP only)
R - Layer3 S - Layer2
U - in use f - failed to allocate aggregator

M - not in use, minimum links not met
u - unsuitable for bundling
w - waiting to be aggregated
d - default port
Number of channel-groups in use: 1
Number of aggregators: 1

Group Port-channel Protocol Ports
------+-------------+-----------+-----------------------------------------------
1 Po1(SU) LACP Gi1/0/21(P) Gi1/0/22(P)


Иногда в транковых портах есть необходимость ограничить vlan'ы.
Допустим, что на sw-01 появились подобные настройки в портах Po1,Gi1/0/21,Gi1/0/22 и они идентичны:
switchport trunk allowed vlan 100

Вопрос заключается в том, как будут реагировать порты на изменение конфигурации? Какова последовательность редактирования этих трех портов? Вот пример:
sw-01(config)#interface GigabitEthernet1/0/21
sw-01(config-if)#switchport trunk allowed vlan add 101
sw-01(config-if)#^Z
sw-01#show run int gi1/0/21
Building configuration...

Current configuration : 190 bytes
!
interface GigabitEthernet1/0/21
description to gi1/0/1 sw-02
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 100,101
switchport mode trunk
channel-group 1 mode active
end

sw-01#show run int gi1/0/22
Building configuration...

Current configuration : 184 bytes
!
interface GigabitEthernet1/0/22
description to gi1/0/2 sw-02
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 100
switchport mode trunk
channel-group 1 mode active
end

sw-01#conf t
Enter configuration commands, one per line. End with CNTL/Z.
sw-01(config)#interface GigabitEthernet1/0/22
sw-01(config-if)#switchport trunk allowed vlan add 101
Connection closed by foreign host.

Что же произошло? Смотрим логи
%PARSER-5-CFGLOG_LOGGEDCMD: User:tester  logged command:interface GigabitEthernet1/0/21 
%EC-5-CANNOT_BUNDLE2: Gi1/0/21 is not compatible with Gi1/0/22 and will be suspended (vlan mask is different)
%PARSER-5-CFGLOG_LOGGEDCMD: User:tester logged command:switchport trunk allowed vlan add 101
%LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/21, changed state to down
%SYS-5-CONFIG_I: Configured from console by tester on vty0 ()
%PARSER-5-CFGLOG_LOGGEDCMD: User:tester logged command:interface GigabitEthernet1/0/22
%EC-5-CANNOT_BUNDLE2: Gi1/0/21 is not compatible with Po1 and will be suspended (vlan mask is different)
%EC-5-CANNOT_BUNDLE2: Gi1/0/21 is not compatible with Po1 and will be suspended (vlan mask is different)
%EC-5-CANNOT_BUNDLE2: Gi1/0/22 is not compatible with Po1 and will be suspended (vlan mask is different)
%PARSER-5-CFGLOG_LOGGEDCMD: User:tester logged command:switchport trunk allowed vlan add 101
%LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/22, changed state to down
%LINEPROTO-5-UPDOWN: Line protocol on Interface Port-channel1, changed state to down
%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan100, changed state to down

Худшее, что можно придумать - это настраивать транки на etherchannel'е на "удаленной" стороне. Ошибка изначально заключалась в том, что изменения следовало начать с логического интерфейса Po1. Но и тут не все так просто. Я не стану приводить далее логи и команды последующих тестов и расскажу на словах.
При добавлении vlan'а в транк на Po1 не происходит ничего. Можно спокойно добавить vlan в оставшиеся физические интерфейсы. При удалении vlan'а из Po1 происходит длительное выключение физических интерфейсов из etherchannel'а, что неудобно и неприемлимо.
Итого:
- лучше отказаться от редактирования транков в etherchannel'е.
- если отказаться нельзя - редактировать на "ближней" стороне.
- при редактировании желательно вывести логирование на экран командой terminal monitor, чтобы своевременно обнаружить неполадки.

UPDATE: В разных IOS реакция на редактирование логического интерфейса Po разная. Так в некоторых достаточно настаивать только его, а все настройки будут автоматически копироваться в конфигурацию физических интерфейсов