Настройка Cisco ISG на роутерах ASR100X
17 Jun 2019 - zhenyatsk
Share on:Ёмко про ISG фунциональность, которая является развитием более простой SSG фунциональности на роутерах 72хх.
Типы subscriber’ов и возможные варианты старта сессий
- l2-connected - vlan’ы с клиентами терминируются на роутере без промежуточных маршрутизаторов.
Роутер должен выполнять роль DHCP сервера или DHCP Relay. Возможен старт сессии как по
Unclassified MAC Address
, так и поDHCP packet
. - l3-connected (routed) - vlan’ы с клиентами терминируются на промежуточном L3-устройстве (устройств может быть несколько, но важно, чтобы трафик проходил через роутер с ISG симметрично). DHCP Relay настраивается на L3-устройстве. Сессии стартуют по
Unclassified IP address
.
Примечание:
Для l2-connected возможен старт по Unclassified IP Address, для этого необходимо настроить на интерфейсе
ip subscriber routed
initiator unclassified ip-address
Плюсы и минусы
У каждого из этих вариантов есть свои плюсы и минусы.
- Первый вариант:
- Плюсы:
- лучше с точки зрения контроля абонента.
- Минусы:
- межабонентский трафик должен проходить через роутер с ISG.
- отсутствует штатный способ резервирования.
- Плюсы:
- Второй вариант:
- Плюсы:
- межабонентский трафик замыкается до роутера с ISG.
- достаточно просто организовать резервирование с помощью IGP протокола маршрутизации.
- Минусы:
- недостаточный контроль абонента и необходима доработка сторонними методами.
- Плюсы:
Базовая настройка ААА
aaa group server radius ISG-RADIUS
server name MAIN
ip radius source-interface ...
!
aaa authentication login ISG-AUTH-LIST group ISG-RADIUS
aaa authorization network ISG-AUTH-LIST group ISG-RADIUS
aaa authorization subscriber-service default local group ISG-RADIUS
aaa accounting update newinfo periodic 5
aaa accounting network ISG-ACT-LIST start-stop group ISG-RADIUS
!
radius-server attribute 44 include-in-access-req all
radius-server attribute 44 extend-with-addr
radius-server attribute 31 mac format one-byte delimiter colon
radius-server attribute 31 send nas-port-detail mac-only
radius-server attribute nas-port-id include circuit-id plus remote-id separator #
radius-server dead-criteria time 10 tries 1
radius-server retransmit 2
radius-server timeout 30
radius-server deadtime 5
radius-server vsa send cisco-nas-port
!
radius server MAIN
address ipv4 1.2.3.5 auth-port 1812 acct-port 1813
key secret
!
Примечание:
aaa authorization subscriber-service
отвечает за очередность поиска сервисов для клиента. В примере выше первоочередной будет попытка обнаружить сервис в локальной конфигурации, а после будет сформирован запрос в RADIUS.
Настройка интерфейсов для QinQ (l2-connected)
interface Loopback100
ip address 10.10.0.1 255.255.255.0
!
interface TenGigabitEthernet0/1/0.112
encapsulation dot1Q 112 second-dot1q 101-2000
ip dhcp relay information trusted
ip unnumbered Loopback100
no ip redirects
no ip unreachables
ip local-proxy-arp
arp timeout 300
service-policy type control ISG_POLICY
ip subscriber l2-connected
initiator dhcp
!
Данная конфигурация позволит произвести терминацию c-vlan 101-2000 внутри s-vlan 112.
Описание настройки control policy
Основная логика описывается в policy-map type control
. В политике описываются действия и логика работы в момент возникновения различных событий.
Пример для l3-connected
class-map type control match-all IP_UNAUTH_COND
match authen-status unauthenticated
match timer IP_UNAUTH_TIMER
!
policy-map type control ISG_POLICY
class type control IP_UNAUTH_COND event timed-policy-expiry
10 service disconnect
!
class type control always event session-start
10 service-policy type service name RDR-SRV
20 authorize aaa list ISG-AUTH password secret identifier source-ip-address
!
class type control always event access-reject
10 service-policy type service name ALL-SRV
40 set-timer IP_UNAUTH_TIMER 20
!
class type control always event radius-timeout
10 service-policy type service name ALL-SRV
40 set-timer IP_UNAUTH_TIMER 30
!
!
При обнаружении трафика с неизвестного IP (речь про l3-connected клиентов) возникает event session-start
. Внутри event происходит активация сервиса RDR-SRV
и происходит попытка авторизации, используя aaa-list ISG-AUTH
с паролем secret
. В RADIUS-запросе в поле User-Name
будет передан IP адрес subscriber’а.
Если RADIUS авторизовал (примеры ответов от RADIUS будут далее) абонента, то происходит выход из политики. Если RADIUS ответил Access-Reject
, то назначается сервис ALL-SRV
из event access-reject
и запускается таймер IP_UNAUTH_TIMER
. Если RADIUS не ответил в отведенное время и количество попыток, то срабатывает event radius-timeout
, который также назначает ALL-SRV
и запускает таймер.
По истечению таймера сессия будет сброшена и при IP трафике от абонента будет произведена попытка авторизации.
Примечание: Сервис
ALL-SRV
в конкретном примере используется для пропуска трафика пользователя в Интернет для сохранения лояльности у абонентов при проблемах с RADIUS, BSS и т.д.
На l2-connected политики могут выглядеть идентично, за исключением используемого identifier
в строке с authorize
. Это позволяет в поле User-Name
в RADIUS отправить MAC адрес или комбинацию sVLAN/cVLAN tag с нужным разделителем и т.п.
Описание настройки локальных сервисов
Сервисы могут быть заведены как локально, так и в RADIUS. Пример конфигурации локального сервиса для ограничения скорости:
ip access-list extended ALL_IN
permit ip any any
ip access-list extended ALL_OUT
permit ip any any
!
class-map type traffic match-any CLASS-INET
match access-group input name ALL_IN
match access-group output name ALL_OUT
!
policy-map type service SPEED-100
50 class type traffic CLASS-INET
police input 102400000
police output 102400000
!
!
Пример сервиса для L4-redirect:
redirect server-group PORTAL_MONEY
server ip 1.2.3.4 port 80
!
ip access-list extended ACL_RDR_IN
permit tcp any any eq www
permit tcp any any eq 443
permit tcp any any eq 8000
permit tcp any any eq 8080
!
class-map type traffic match-any RDR-CLASS
match access-group input name ACL_RDR_IN
!
policy-map type service RDR-SRV
100 class type traffic RDR-CLASS
redirect to group PORTAL_MONEY
!
class type traffic default in
drop
!
!
Для работоспособности сервиса редиректа необходимо создать сервис OpenGarden. В него также следует вносить списки платежных шлюзов или других ресурсов, которые должны быть доступны в момент, когда у пользователя отсутствует сервис, предоставляющий доступ в Интернет.
Примечание: Портал, на который осуществляется редирект, должен быть расположен за ISG относительно абонента. Если не выполнить это условие, редирект будет неработоспособен.
ip access-list extended OPENGARDEN_ACL_IN
permit ip any host 1.2.3.4
permit ip any host 8.8.8.8
!
class-map type traffic match-any OPEN-CLASS
match access-group input name OPENGARDEN_ACL_IN
!
policy-map type service OPEN-GARDEN
10 class type traffic OPEN-CLASS
!
!
Примечание:
Цифровое значение перед class type в настройках сервисов указывает приоритет. Если необходимо назначить повышенную скорость до определенных сетей, то следует создать сервис с наименьшим приоритетом. Например:
10 - IX
20 - INET
90 - OPENGARDEN
100 - REDIRECT
При прохождении пакета сначала будет проверено вхождение в ACL для сервиса IX, далее INET.
Примеры настройки OpenGarden через RADIUS доступны на других ресурсах в Интернете, но стоит помнить, что RADIUS может быть недоступен и потому сервисы OpenGarden и L4-redirect следует держать локально в конфигурации оборудования.
Примеры запросов и ответов RADIUS
Для случае l2-connected запрос с initiator unclassified mac
выглядит следующим образом:
User-Name = "000f.3dca.bc02"
User-Password = "secret"
Calling-Station-Id = "00:0f:3d:ca:bc:02"
NAS-Port-Type = Virtual
NAS-Port = 0
NAS-Port-Id = "000608b001000008#00030f2ce370"
Cisco-AVPair = "circuit-id-tag=000608b001000008"
Cisco-AVPair = "remote-id-tag=00030f2ce370"
Cisco-AVPair = "vendor-class-id-tag=MSFT 5.0"
Service-Type = Outbound-User
NAS-IP-Address = 1.2.3.4
Acct-Session-Id = "000040B9"
В ответ на запрос необходимо сформировать ответ:
User-Name = "00:0f:3d:ca:bc:02",
Cisco-Account-Info = "ASPEED-100",
Cisco-AVPair = "subscriber:accounting-list=ISG-ACT-LIST"
И опционально можно добавить:
Cisco-AVPair = "subscriber:idle-timeout-direction=inbound"
Idle-Timeout = 300
Где inbound/input - это направление трафика от абонента в сторону роутера с ISG. Это позволит завершить сессию по неактивности со стороны абонента.
Примечание: Перед названием сервиса обязательно должна находиться буква “A”. Она обозначает активировацию сервиса.
COA - Change Of Authorization
COA представляет из себя интерфейс, который позволяет произвести динамическое изменение абонентской сессии с внешнего сервера.
Первым делом необходимо на роутер с ISG добавить следующую конфигурацию:
aaa server radius dynamic-author
client 1.2.3.5 server-key secret
auth-type any
ignore session-key
ignore server-key
!
После этого с хоста 1.2.3.5 можно будет выполнять COA запросы.
Возможности COA:
- Проверить активность сессии и получить набор сервисов и другой информации. Пример кода на Perl:
#!/usr/bin/perl
use strict;
use Authen::Radius;
my $host = "ip_cisco";
my $coasecret = "secret";
my $rad = new Authen::Radius(Host => "$host:1700", Secret => $coasecret, Debug=>0);
my $type;
Authen::Radius->load_dictionary('/usr/share/freeradius/dictionary');
Authen::Radius->load_dictionary('/usr/share/freeradius/dictionary.cisco');
$rad->add_attributes({Name=>'User-Name', Value=>'00:0f:3d:ca:bc:02'});
$rad->add_attributes({Name=>'Acct-Session-Id', Value=>'00004103'}); #filter by Acct-Session-Id
#$rad->add_attributes({Name=>'Cisco-Account-Info', Value=>'S1.2.3.5'}); #filter by ip-address, subscriber in GRT
#$rad->add_attributes({Name=>'Cisco-Account-Info', Value=>'S1.2.3.5:vrf-id=INET'}); #filter by ip address, subscriber in VRF
$rad->add_attributes({Name=>'Cisco-AVPair', Value=>'subscriber:command=account-status-query'});
$rad->send_packet(COA_REQUEST) and $type = $rad->recv_packet();
print "server response type = $type\n";
for $a ($rad->get_attributes()) {
print "attr: name=$a->{'Name'} value=$a->{'Value'}\n";
}
В случае отсутствия сессии в ответ приходит COA-NACK, в случае успешного выполнения команды - COA-ACK.
- Активировать/деактивировать сервис на сессии. В примере выше следует заменить строку
$rad->add_attributes({Name=>'Cisco-AVPair', Value=>'subscriber:command=account-status-query'});
на
$rad->add_attributes({Name=>'Cisco-AVPair', Value=>'subscriber:service-name=SPEED-10M'});
$rad->add_attributes({Name=>'Cisco-AVPair', Value=>'subscriber:command=activate-service'});
Для деактивации сервиса указывать subscriber:command=deactivate-service
.
- Завершить сессию. Аналогично предыдущему пункту, за исключением
subscriber:command=account-logoff
.
Некоторые особенности платформы Cisco ASR100x:
- Для удобного траблшутинга ISG сервисов желательно отключать
subscriber templating
(требует перезагрузки). - У роутера существует кэш сервисов. Для его очистки необходимо подождать некоторое время после того, как этот сервис перестанет использоваться абонентами.
- Если в шасси установлена комбинация ESP-20 + SIP-40, то SIP-40 работает как SIP-10. То есть можно максимум установить одну 10G SPA без переподписки.
- У ESP двухканальная память, но эти каналы работают независимо. Один канал работает на Non Priority трафик, а второй на Priority. Посмотреть текущее распределение трафика можно командой
show platform hardware qfp active datapath utilization
. Для достижения максимальной пропускной способности (особенно при множестве включенных опций), желательно поддерживать соотношение Input Non-Priority к Priority как 1:1. Обычно при достижении “потолка” появляются overrun ошибки на интерфейсах. - В некоторых конфигурациях возможен Software Redundancy (то есть запуск двух инстансов IOS на одном RP). Включение этой функциональности достаточно сильно отражается на количестве свободной памяти. Выключить Software Redundancy можно выполнив
redundancy mode none
.