Настройка Cisco ISG на роутерах ASR100X

17 Jun 2019 - zhenyatsk

Ёмко про ISG фунциональность, которая является развитием более простой SSG фунциональности на роутерах 72хх.

Типы subscriber’ов и возможные варианты старта сессий

  1. l2-connected - vlan’ы с клиентами терминируются на роутере без промежуточных маршрутизаторов. Роутер должен выполнять роль DHCP сервера или DHCP Relay. Возможен старт сессии как по Unclassified MAC Address, так и по DHCP packet.
  2. l3-connected (routed) - vlan’ы с клиентами терминируются на промежуточном L3-устройстве (устройств может быть несколько, но важно, чтобы трафик проходил через роутер с ISG симметрично). DHCP Relay настраивается на L3-устройстве. Сессии стартуют по Unclassified IP address.

Примечание:

Для l2-connected возможен старт по Unclassified IP Address, для этого необходимо настроить на интерфейсе

ip subscriber routed
  initiator unclassified ip-address

Плюсы и минусы

У каждого из этих вариантов есть свои плюсы и минусы.

  1. Первый вариант:
    • Плюсы:
      • лучше с точки зрения контроля абонента.
    • Минусы:
      • межабонентский трафик должен проходить через роутер с ISG.
      • отсутствует штатный способ резервирования.
  2. Второй вариант:
    • Плюсы:
      • межабонентский трафик замыкается до роутера с 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:

#!/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.

Некоторые особенности платформы Cisco ASR100x:

  1. Для удобного траблшутинга ISG сервисов желательно отключать subscriber templating (требует перезагрузки).
  2. У роутера существует кэш сервисов. Для его очистки необходимо подождать некоторое время после того, как этот сервис перестанет использоваться абонентами.
  3. Если в шасси установлена комбинация ESP-20 + SIP-40, то SIP-40 работает как SIP-10. То есть можно максимум установить одну 10G SPA без переподписки.
  4. У ESP двухканальная память, но эти каналы работают независимо. Один канал работает на Non Priority трафик, а второй на Priority. Посмотреть текущее распределение трафика можно командой show platform hardware qfp active datapath utilization. Для достижения максимальной пропускной способности (особенно при множестве включенных опций), желательно поддерживать соотношение Input Non-Priority к Priority как 1:1. Обычно при достижении “потолка” появляются overrun ошибки на интерфейсах.
  5. В некоторых конфигурациях возможен Software Redundancy (то есть запуск двух инстансов IOS на одном RP). Включение этой функциональности достаточно сильно отражается на количестве свободной памяти. Выключить Software Redundancy можно выполнив redundancy mode none.
Tags: cisco isg