ISG, схема со стартом сессии и ее авторизацией по IP, выдача адресов на основе option82

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
м (Конфигурация BGBilling'а)
 
(7 промежуточных версий не показаны.)
Строка 27: Строка 27:
*Получение IP адреса абонентом и получение им доступа в сеть (этакий аналог "онлайна") разделены (хотя и зависимы друг от друга). В результате - в мониторе модуля Inet видим две сессии на договор: по одной понимаем, что абонент получил IP адрес, по другой - что он пользуется сетью (при правильно подобранном Idle-Timeout). Если в мониторе всего одна (dhcp) сессия - значит абонент успешно прошел авторизацию (т.е. сидит в разрешенном порту), но интернет ему в данный момент не нужен (или трафик не доходит до BRAS'а). Это очень удобно для аналитики. ISG session-restart также проходит без проблем, потому как ISG сессия авторизуется по source-IP, который у абонента уже есть (при авторизации ISG сессии непосредственно по option82 пришлось бы заново запрашивать IP, чтобы на BRAS попал dhcp запрос). В результате - на циске можно спокойно сбрасывать сессию, будучи уверенным что при первом же пакете она тут же поднимется. Очень удобно при всяком траблшутинге. IMHO.
*Получение IP адреса абонентом и получение им доступа в сеть (этакий аналог "онлайна") разделены (хотя и зависимы друг от друга). В результате - в мониторе модуля Inet видим две сессии на договор: по одной понимаем, что абонент получил IP адрес, по другой - что он пользуется сетью (при правильно подобранном Idle-Timeout). Если в мониторе всего одна (dhcp) сессия - значит абонент успешно прошел авторизацию (т.е. сидит в разрешенном порту), но интернет ему в данный момент не нужен (или трафик не доходит до BRAS'а). Это очень удобно для аналитики. ISG session-restart также проходит без проблем, потому как ISG сессия авторизуется по source-IP, который у абонента уже есть (при авторизации ISG сессии непосредственно по option82 пришлось бы заново запрашивать IP, чтобы на BRAS попал dhcp запрос). В результате - на циске можно спокойно сбрасывать сессию, будучи уверенным что при первом же пакете она тут же поднимется. Очень удобно при всяком траблшутинге. IMHO.
*При отрицательном балансе ISG сессия сбрасывается и создается новая (unauth) сессия с таймером и локальными сервисами, ограничивающими абоненту доступ. Эта сессия каждые N минут переавторизуется на BGBilling'е в надежде, что абонент уже пополнил баланс. И - если баланс выправился - стартует как обычно (с сервисами из биллинга, в соответствие с тарифом). Это не совсем true way для ISG. Правильно - не сбрасывая сессию, снять с нее (через CoA) текущие тарифные ISG сервисы и назначить другие (ограничивающие доступ), а при пополнении баланса - наоборот. BGBilling так может. Почему я сделал по другому? Потому что удобно на циске видеть абонентов с отрицательным балансом (их сессии - unauth) и удобно отслеживать повторные радиус запросы на авторизацию. Это опять же очень удобно для быстрой аналитики и при траблшутинге (почему это у этого абонента ничего не работает? а вот и логи...). Опять же IMHO.
*При отрицательном балансе ISG сессия сбрасывается и создается новая (unauth) сессия с таймером и локальными сервисами, ограничивающими абоненту доступ. Эта сессия каждые N минут переавторизуется на BGBilling'е в надежде, что абонент уже пополнил баланс. И - если баланс выправился - стартует как обычно (с сервисами из биллинга, в соответствие с тарифом). Это не совсем true way для ISG. Правильно - не сбрасывая сессию, снять с нее (через CoA) текущие тарифные ISG сервисы и назначить другие (ограничивающие доступ), а при пополнении баланса - наоборот. BGBilling так может. Почему я сделал по другому? Потому что удобно на циске видеть абонентов с отрицательным балансом (их сессии - unauth) и удобно отслеживать повторные радиус запросы на авторизацию. Это опять же очень удобно для быстрой аналитики и при траблшутинге (почему это у этого абонента ничего не работает? а вот и логи...). Опять же IMHO.
 +
*IP-адрес для абонента можно назначать статический и/или динамический.
-
== Конфигурация сети ==
+
'''Решение'''
-
Конфигурация свича уровня доступа:
+
#[[ISG, схема со стартом сессии и ее авторизацией по IP, выдача адресов на основе option82 (Конфигурация сети)]]
-
<source lang="bash">
+
#[[ISG, схема со стартом сессии и ее авторизацией по IP, выдача адресов на основе option82 (Конфигурация BGBilling'а)]]
-
spanning-tree mode mst
+
-
spanning-tree extend system-id
+
-
!
+
-
spanning-tree mst configuration
+
-
name Region-A
+
-
instance 1 vlan 1-4094
+
-
!
+
-
ip dhcp snooping vlan 1201-1248
+
-
ip dhcp snooping
+
-
!
+
-
interface FastEthernet0/1
+
-
description Abonent-1
+
-
switchport access vlan 1201
+
-
switchport mode access
+
-
switchport nonegotiate
+
-
switchport port-security
+
-
storm-control broadcast level pps 10k
+
-
storm-control multicast level pps 10k
+
-
storm-control unicast level pps 10k
+
-
storm-control action shutdown
+
-
no cdp enable
+
-
spanning-tree portfast
+
-
spanning-tree bpduguard enable
+
-
spanning-tree guard root
+
-
ip verify source
+
-
!
+
-
interface FastEthernet0/2
+
-
description Abonent-2
+
-
switchport access vlan 1202
+
-
switchport mode access
+
-
switchport nonegotiate
+
-
switchport port-security
+
-
storm-control broadcast level pps 10k
+
-
storm-control multicast level pps 10k
+
-
storm-control unicast level pps 10k
+
-
storm-control action shutdown
+
-
no cdp enable
+
-
spanning-tree portfast
+
-
spanning-tree bpduguard enable
+
-
spanning-tree guard root
+
-
ip verify source
+
-
!
+
-
...
+
-
!
+
-
interface FastEthernet0/48
+
-
description Abonent-48
+
-
switchport access vlan 1248
+
-
switchport mode access
+
-
switchport nonegotiate
+
-
switchport port-security
+
-
storm-control broadcast level pps 10k
+
-
storm-control multicast level pps 10k
+
-
storm-control unicast level pps 10k
+
-
storm-control action shutdown
+
-
no cdp enable
+
-
spanning-tree portfast
+
-
spanning-tree bpduguard enable
+
-
spanning-tree guard root
+
-
ip verify source
+
-
!
+
-
interface GigabitEthernet0/1
+
-
description Another-Catalyst-in-Chain
+
-
switchport trunk encapsulation dot1q
+
-
switchport trunk native vlan 50
+
-
switchport mode trunk
+
-
ip dhcp snooping trust
+
-
!
+
-
interface GigabitEthernet0/2
+
-
description Another-Catalyst-in-Chain
+
-
switchport trunk encapsulation dot1q
+
-
switchport trunk native vlan 50
+
-
switchport mode trunk
+
-
ip dhcp snooping trust
+
-
!
+
-
interface Vlan51
+
-
description Management
+
-
ip address ***
+
-
!
+
-
ip route 0.0.0.0 0.0.0.0 ***
+
-
</source>
+
-
Задача этого свича:
+
-
#физически терминировать кабель абонента,
+
-
#поместить его траффик в отдельный влан,
+
-
#в dhcp запросы - вставить option82.
+
-
 
+
-
Так как количество вланов в сети очень велико - для Spanning-Tree используется протокол MST. Внутри каждого MST региона (в данном случае - Region-A) должен быть один свич аггрегации, до которого должен иметь возможность пробросить все свои вланы каждый свич уровня доступа. <br />
+
-
Интерфейс Vlan51 и route 0.0.0.0 нужны только лишь для удаленного доступа к свичу.
+
-
 
+
-
Конфигурация свича уровня аггрегации:
+
-
<source lang="bash">
+
-
ip dhcp relay information policy keep
+
-
ip dhcp relay information trust-all
+
-
!
+
-
ip vrf domonet
+
-
rd 1000:1000
+
-
!
+
-
spanning-tree mode mst
+
-
spanning-tree extend system-id
+
-
!
+
-
spanning-tree mst configuration
+
-
name Region-A
+
-
instance 1 vlan 1-4094
+
-
!
+
-
spanning-tree mst 0-1 priority 0
+
-
!
+
-
interface Loopback52
+
-
description Domonet users at Region-A
+
-
ip vrf forwarding domonet
+
-
ip address 109.*.48.254 255.255.255.0
+
-
!
+
-
interface GigabitEthernet0/1
+
-
description Link-toward-Core
+
-
switchport trunk encapsulation dot1q
+
-
switchport trunk native vlan 50
+
-
switchport trunk allowed vlan 51,52
+
-
switchport mode trunk
+
-
switchport nonegotiate
+
-
spanning-tree bpdufilter enable
+
-
ip dhcp snooping trust
+
-
!
+
-
interface GigabitEthernet0/2
+
-
description Link-to-Access-Layer-Catalysts
+
-
switchport trunk encapsulation dot1q
+
-
switchport trunk native vlan 50
+
-
switchport mode trunk
+
-
ip dhcp snooping trust
+
-
!
+
-
interface Vlan51
+
-
description Management
+
-
ip address ***
+
-
!
+
-
interface Vlan52
+
-
description Traffic
+
-
ip vrf forwarding domonet
+
-
ip address 10.111.1.1 255.255.255.0
+
-
ip authentication mode eigrp 90 md5
+
-
ip authentication key-chain eigrp 90 eigrp-key
+
-
!
+
-
interface Vlan1101
+
-
description SW1-PORT1
+
-
ip vrf forwarding domonet
+
-
ip unnumbered Loopback52
+
-
ip helper-address 10.199.1.23
+
-
!
+
-
interface Vlan1102
+
-
description SW1-PORT2
+
-
ip vrf forwarding domonet
+
-
ip unnumbered Loopback52
+
-
ip helper-address 10.199.1.23
+
-
!
+
-
...
+
-
!
+
-
interface Vlan1148
+
-
description SW1-PORT48
+
-
ip vrf forwarding domonet
+
-
ip unnumbered Loopback52
+
-
ip helper-address 10.199.1.23
+
-
!
+
-
interface Vlan1201
+
-
description SW2-PORT1
+
-
ip vrf forwarding domonet
+
-
ip unnumbered Loopback52
+
-
ip helper-address 10.199.1.23
+
-
!
+
-
...
+
-
!
+
-
interface Vlan1248
+
-
description SW2-PORT48
+
-
ip vrf forwarding domonet
+
-
ip unnumbered Loopback52
+
-
ip helper-address 10.199.1.23
+
-
!
+
-
router eigrp 90
+
-
!
+
-
address-family ipv4 vrf domonet
+
-
  network 0.0.0.0
+
-
  distance eigrp 90 90
+
-
  passive-interface default
+
-
  no passive-interface Vlan52
+
-
  autonomous-system 90
+
-
exit-address-family
+
-
 
+
-
ip route ***
+
-
</source>
+
-
Задача этого каталиста:
+
-
#стерминировать по L3 (на соответствующих SVI) абонентские вланы всех (внутри его MST региона) свичей  уровня доступа,
+
-
#перехватить broadcast запросы к DHCP серверу и перенаправить их (по unicast) внутри VRF "domonet" на сервер BGBilling'а (10.199.1.23), сохранив option82 нетронутым. ''Биллинг находит договор пользователя по option82 и создает сессию, отвечая: либо - IP адресом, прописанным в данном договоре, либо - свободным IP, в соответствующем пуле.''
+
-
#получив от DHCP сервера BGBilling'а ответ = IP адрес, передать его абоненту, одновременно создавая /32 маршрут (внутри VRF) для этого IP адреса через SVI интерфейс абонента.
+
-
 
+
-
 
+
-
В итоге, абонент, прозрачно пройдя авторизацию по номеру порта, получает L3 доступ к сети провайдера (правда только внутри vrf "domonet"). <br />
+
-
Один ньюанс - IP адрес, выданный абоненту, должен быть из диапазона адресов интерфейса Loopback52. Сам же IP = 109.*.48.254 будет служить маршрутом по-умолчанию для абонента. <br />
+
-
Интерфейс Vlan51 и route 0.0.0.0 также нужны только лишь для удаленного доступа к свичу из global роутинга.
+
-
 
+
-
''Тут нужно сделать небольшое отступление - VRF в моем случае был нужен только потому, что проект разворачивался поверх уже существующей сети (с уже работаюшими сервисами и соответствующим роутингом) и нужно было ни в коем случае не затронуть имеющуюся архитектуру и логику роутинга. VRF максимально удобен в этом случае. Для сети строящейся с нуля можно было бы сделать все в одной таблице маршрутизации.''
+
-
 
+
-
Далее, в ядре сети траффик, идущий от абонентов внутри vrf, нужно пропустить (по L3) через BRAS в глобальную таблицу маршрутизации. Это можно сделать несколькими способами - PBR, route leaking, static routing... Главное - чтобы из global роутинга IP адреса абонентов были видны через BRAS и, наоборот, внешний мир изнутри vrf "domonet" был виден через BRAS. В результате, абонент имеет полный доступ в Интернет, но - транзитом (по L3) через BRAS. <br />
+
-
Осталось навесить на BRAS настройки ISG, чтобы этот доступ привести в зависимость от баланса договора и его тарифа в BGBilling'е.
+
-
 
+
-
Настройки BRAS'а:
+
-
<source lang="bash">
+
-
aaa group server radius ipoe-radius
+
-
server-private 109.*.1.23 auth-port 1812 acct-port 1813 non-standard key ***
+
-
ip radius source-interface Loopback0
+
-
!
+
-
aaa group server radius ipoe-services-radius
+
-
server-private 109.*.1.23 auth-port 1811 acct-port 1813 non-standard key ***
+
-
ip radius source-interface Loopback0
+
-
!
+
-
aaa authentication login ipoe-isg-aaa group ipoe-radius
+
-
aaa authorization network ipoe-isg-aaa group ipoe-radius
+
-
aaa accounting network ipoe-isg-aaa start-stop group ipoe-radius
+
-
!
+
-
aaa authorization subscriber-service default local group ipoe-services-radius
+
-
!
+
-
aaa accounting delay-start
+
-
aaa accounting update periodic 2
+
-
aaa nas port extended
+
-
!
+
-
aaa server radius dynamic-author
+
-
client 109.*.1.23 server-key ***
+
-
ignore session-key
+
-
ignore server-key
+
-
!
+
-
redirect server-group NO-MONEY
+
-
server ip 109.*.1.16 port 80
+
-
!
+
-
class-map type traffic match-any LOCAL-TRAFFIC
+
-
match access-group output 2110
+
-
!
+
-
class-map type traffic match-any OPENGARDEN-TRAFFIC
+
-
match access-group input 155
+
-
match access-group output 156
+
-
!
+
-
class-map type traffic match-any ALL-TRAFFIC
+
-
match access-group input 101
+
-
match access-group output 102
+
-
!
+
-
class-map type traffic match-any TRAFFIC-FOR-REDIRECT
+
-
match access-group input name traffic-for-redirect
+
-
!
+
-
class-map type control match-all ISG-IP-UNAUTH
+
-
match timer UNAUTH-TIMER
+
-
match authen-status unauthenticated
+
-
!
+
-
policy-map type service L4REDIRECT
+
-
20 class type traffic TRAFFIC-FOR-REDIRECT
+
-
  redirect to group NO-MONEY
+
-
!
+
-
policy-map type service OPENGARDEN
+
-
40 class type traffic OPENGARDEN-TRAFFIC
+
-
  accounting aaa list ipoe-isg-aaa
+
-
  police input 1024000
+
-
  police output 1024000
+
-
!
+
-
class type traffic default in-out
+
-
  drop
+
-
!
+
-
policy-map type service ISG-LOCAL
+
-
100 class type traffic LOCAL-TRAFFIC
+
-
  accounting aaa list ipoe-isg-aaa
+
-
  police input 102400000
+
-
  police output 102400000
+
-
!       
+
-
policy-map type control IPoE-ISG
+
-
class type control ISG-IP-UNAUTH event timed-policy-expiry
+
-
  1 service disconnect
+
-
!       
+
-
class type control always event session-start
+
-
  10 authorize aaa list ipoe-isg-aaa password cisco identifier source-ip-address
+
-
  20 set-timer UNAUTH-TIMER 1
+
-
  30 service-policy type service name L4REDIRECT
+
-
  40 service-policy type service name OPENGARDEN
+
-
!       
+
-
class type control always event service-stop
+
-
  1 service-policy type service unapply identifier service-name
+
-
  10 log-session-state
+
-
!       
+
-
class type control always event session-restart
+
-
  10 authorize aaa list ipoe-isg-aaa password cisco identifier source-ip-address
+
-
  20 set-timer UNAUTH-TIMER 1
+
-
  30 service-policy type service name L4REDIRECT
+
-
  40 service-policy type service name OPENGARDEN
+
-
!
+
-
interface Loopback0
+
-
ip address 10.100.198.31 255.255.255.255
+
-
!
+
-
interface GigabitEthernet0/0/2.1001
+
-
encapsulation dot1Q 1001
+
-
ip address 10.200.98.31 255.255.255.0
+
-
service-policy type control IPoE-ISG
+
-
ip subscriber routed
+
-
  initiator unclassified ip-address
+
-
</source>
+
-
 
+
-
ISG настроен следующим образом:<br />
+
-
*как только IP траффик абонента (который уже получил IP адрес от DHCP сервера BGBilling'а, авторизовавшись по номеру порта) приходит на BRAS, тот создает для него новую ISG сессию и пытается ее авторизовать на радиусе BGBilling'а, используя в качестве логина - source IP адрес. Биллинг просматривает активные сессии договоров и, конечно же, находит ту самую сессию, которую он сам же создал, выдавая этому абоненту IP адрес. По этой сессии биллинг находит договор и:
+
-
**в случае положительного баланса - отвечает ACCESS-ACCEPT, плюс cisco-SSG-Account-Info параметры, которые берет из тарифа договора. Одновременно BGBilling создает (вторую уже) активную сессию для договора.
+
-
**в случае отрицательного баланса - отвечает ACCESS-REJECT'ом.
+
-
*Если BRAS получает ACCESS-REJECT, то он идет дальше по ''class type control always event session-start'' и привязывает к ISG сессии сервисы L4REDIRECT и OPENGARDEN (локально описанные в конфиге циски: ''policy-map type service OPENGARDEN'' и ''policy-map type service OPENGARDEN''), в которых доступ ограничен только к локальным ресурсам, на скорости 1 Mbps, а весь http траффик редиректится на страничку, информирующую абонента об отсутствии денег на счету. Также стартует таймер UNAUTH-TIMER длительностью в одну минуту, по истечению которой BRAS заново пытается авторизовать ISG сессию в BGBilling'е.
+
-
*Если BRAS получает ACCESS-ACCEPT, то он прекращает выполнение ''class type control always event session-start'' и берет из параметров cisco-SSG-Account-Info информацию о том, какие ISG сервисы нужно привязать к ISG сессии, затем ищет их описание локально в своей конфигурации. Не найдя их, BRAS для каждого сервиса посылает радиус запрос на второй радиус-сервер BGBilling'а (''aaa authorization subscriber-service default local group ipoe-services-radius''), используя в качестве логина - имя ISG сервиса. В биллинге для этого случая заводится отдельный договор, в котором прописываются все необходимые сервисы, в результате чего - BGBilling отвечает на эти запросы ACCESS-ACCEPT'ом с телом ISG сервиса:
+
-
<source lang="bash">
+
-
Packet type: Access-Accept
+
-
Identifier: 134
+
-
Authenticator: {88 A2 CE 7E 66 BF 3E 9C 4C C0 CD 12 C1 0F C1 3C}
+
-
Attributes:
+
-
  Acct-Interim-Interval=60
+
-
  cisco-avpair=subscriber:accounting-list=ipoe-isg-aaa
+
-
  cisco-avpair=ip:traffic-class=in access-group 101 priority 201
+
-
  cisco-avpair=ip:traffic-class=out access-group 102 priority 201
+
-
  cisco-SSG-Service-Info=QU;5120000;384000;768000;D;5120000;960000;1920000
+
-
</source>
+
-
BRAS использует эту конфигурацию и привязывает нужные ISG сервисы к сессии абонента.
+
-
 
+
-
Если баланс договора становится отрицательным уже после старта сессии, BGBilling находит соответствующую активную ISG сессию (которая была создана второй) договора и отправляет на BRAS CoA запрос, сбрасывая ее.<br />
+
-
 
+
-
Нужно учесть еще два ньюанса:
+
-
#даже при отрицательном балансе договора, DHCP-сервер BGBilling'а должен продолжать выдавать абоненту IP адрес.
+
-
#DHCP-сервер BGBilling'а должен находится '''до''' ISG (с точки зрения абонента), внутри VRF "domonet". Для этого можно на сервер завести отдельный влан (для прямого доступа к VRF), не забывая про роутинг, так как DHCP-сервер будет отвечать на GIADDR свича аггрегации (в данном случае - 109.*.48.254). DHCP ответ на этот адрес должен идти через соответствующий влан.
+
-
 
+
-
 
+
-
== Конфигурация BGBilling'а ==
+
-
 
+
-
Устанавливаем модуль inet_5.2_1118.zip, создаем его в редакторе модулей и услуг, добавляем услуги.<br />
+
-
Затем, создаем Опции (имена ISG сервисов), типы трафика и тарифный план (в нем прописываем стоимости типов трафика и подключаем Опции, т.е. ISG сервисы):
+
-
{|
+
-
| [[Файл:ISG-INET-0001.jpg|200px|thumb|left|Модуль, услуги]]
+
-
| [[Файл:ISG-INET-0002.jpg|200px|thumb|left|Опции (ISG сервисы)]]
+
-
| [[Файл:ISG-INET-0003.jpg|200px|thumb|left|Типы трафика]]
+
-
| [[Файл:ISG-INET-0024.jpg|200px|thumb|left|Тарифный план: стоимость трафика и подключение опций (ISG сервисов)]]
+
-
|}
+
-
 
+
-
Описываем откуда брать информацию о количестве каждого из типов трафика (можно конечно использовать netflow, но я ограничился Acct-Input-Octets и Acct-Output-Octets из radius аккаунтинга, так как тарифов по траффику у меня нет и эта информация нужна всего лишь для статистики):
+
-
{|
+
-
| [[Файл:ISG-INET-0004.jpg|200px|thumb|left|Привяка типов трафика: Local Upstream]]
+
-
| [[Файл:ISG-INET-0005.jpg|200px|thumb|left|Привяка типов трафика: Local Downstream]]
+
-
| [[Файл:ISG-INET-0006.jpg|200px|thumb|left|Привяка типов трафика: Internet Upstream]]
+
-
| [[Файл:ISG-INET-0007.jpg|200px|thumb|left|Привяка типов трафика: Internet Downstream]]
+
-
|}
+
-
Далее, создаем пул IP адресов - они должны быть из диапазона адресов интерфейса Loopback52 (на свиче уровня аггрегации), а default gateway должен быть адрес интерфейса Loopback52.<br />
+
-
Создаем сервис INTERNET, который будем подключать к договору в биллинге (не путать с ISG сервисом, назначаемым на ISG сессию абонента на циске), чтобы собственно предоставить ему (договору) доступ в интернет через модуль Inet.
+
-
{|
+
-
| [[Файл:ISG-INET-0008.jpg|200px|thumb|left|IP-ресурсы]]  
+
-
| [[Файл:ISG-INET-0009.jpg|200px|thumb|left|Сервис INTERNET]]
+
-
|}
+
-
Создаем сущность ''коммутатор'', привязываем к ней атрибут ''адрес'' (позже пригодится для указания местоположения свичей доступа, чтобы потом хоть как-то ориентироваться что-где):
+
-
{|
+
-
| [[Файл:ISG-INET-0016.jpg|200px|thumb|left|Сущности]]
+
-
| [[Файл:ISG-INET-0023.jpg|200px|thumb|left|Атрибуты]]
+
-
|}
+
-
Создаем типы устройств:
+
-
#абстрактный тип Access+Accounting, являющийся верхушкой иерархии всех типов устройств, объединяя их все (в нем прописываются настройки общие для всех типов устройств)
+
-
#тип ASR ISG, описывающий BRAS'ы
+
-
#тип SW-1, описывающий свичи уровня аггрегации (они же dhcp релеи)
+
-
#тип Switch, описывающий свичи уровня доступа (те, которые вставляют option82), привязываем к нему сущность ''коммутатор''.
+
-
{|
+
-
|-
+
-
| [[Файл:ISG-INET-0011.jpg|200px|thumb|left|Типы устройств]]
+
-
| [[Файл:ISG-INET-0012.jpg|200px|thumb|left|Типы устройств: Access+Accounting (абстрактный тип, верхушка иерархии типов)]]
+
-
|-
+
-
| [[Файл:ISG-INET-0013.jpg|200px|thumb|left|Типы устройств: ASR ISG (BRAS)]]
+
-
| [[Файл:ISG-INET-0014.jpg|200px|thumb|left|Типы устройств: SW-1 (уровень аггрегации)]]
+
-
| [[Файл:ISG-INET-0015.jpg|200px|thumb|left|Типы устройств: Switch (уровень доступа)]]
+
-
|}
+
-
и привязываем сервис INTERNET к всем этим типам (через абстрактный Access+Accounting):
+
-
{|
+
-
| [[Файл:ISG-INET-0010.jpg|200px|thumb|left|Сервис INTERNET, типы устройств]]
+
-
|}
+
-
Создаем сами устройства (соответствующих типов):
+
-
{|
+
-
|-
+
-
| [[Файл:ISG-INET-0017.jpg|200px|thumb|left|Устройства]]
+
-
| [[Файл:ISG-INET-0018.jpg|200px|thumb|left|Устройства: Access+Accounting (абстрактное устройство, верхушка иерархии устройств)]]
+
-
|-
+
-
| [[Файл:ISG-INET-0019.jpg|200px|thumb|left|Устройства: R31_ASR1002 (BRAS)]]
+
-
| [[Файл:ISG-INET-0020.jpg|200px|thumb|left|Устройства: (каталист уровня аггрегации)]]
+
-
| [[Файл:ISG-INET-0021.jpg|200px|thumb|left|Устройства: (каталист уровня доступа)]]
+
-
|}
+
-
Для свичей доступа указываем местоположение (используя сущность и атрибут ''адрес''):
+
-
{|
+
-
| [[Файл:ISG-INET-0022.jpg|200px|thumb|left|Устройства: (каталист уровня доступа, атрибуты)]]
+
-
|}
+
-
Теперь осталось привязать сервис INTERNET (выбрав нужный свич уровня доступа и указав правильный номер порта) к договору:
+
-
{|
+
-
| [[Файл:ISG-INET-0025.jpg|200px|thumb|left|Договор, сервисы (постоянный IP)]]
+
-
| [[Файл:ISG-INET-0026.jpg|200px|thumb|left|Договор, сервисы (случайный IP)]]
+
-
|}
+
-
И не забыть про тариф, так как именно через него (помимо определения стоимостей) назначаются ISG сессии (Опции):
+
-
{|
+
-
| [[Файл:ISG-INET-0029.jpg|200px|thumb|left|Договор, тарифный план (назначение Опций, т.е. ISG сервисов)]]
+
-
|}
+
-
Вот результат:
+
-
{|
+
-
| [[Файл:ISG-INET-0027.jpg|200px|thumb|left|Монитор (активные сессии договора)]]
+
-
| [[Файл:ISG-INET-0028.jpg|200px|thumb|left|Отчет (по-сервисный аккаунтинг)]]
+
-
|}
+
-
 
+
-
 
+
-
Полный конфиг типа устройств Access+Acounting
+
-
<source lang="bash">
+
-
access.group=1
+
-
 
+
-
#типы устройств - Nas-ов
+
-
#radius.deviceTypeIds=3,4
+
-
#типы устройств, являющиеся dhcp relay
+
-
#dhcp.relay.deviceTypeIds=
+
-
#привязка по ip
+
-
radius.key.deviceTypeIds=3
+
-
 
+
-
#количество потоков на worker'а
+
-
accounting.worker.1.thread.count=1
+
-
#тарификатор:
+
-
#минимальная сумма трафика, при которой тарифицировать соединение
+
-
accounting.worker.1.tariffication.1.minDeltaAmount=0
+
-
#пауза между заданиями тарификации
+
-
accounting.worker.1.tariffication.1.delay=1
+
-
#максимальное количество тарифицируемых соединений за задание
+
-
accounting.worker.1.tariffication.1.batchSize=100
+
-
#трекер (обработка сессий без наработки):
+
-
#пауза между заданиями трекинга
+
-
accounting.worker.1.tracking.1.delay=2
+
-
#максимальное количество проверенных соединений за задание
+
-
accounting.worker.1.tracking.1.batchSize=100
+
-
+
-
#количество потоков на worker'а
+
-
accounting.worker.2.thread.count=1
+
-
#сброс в базу трафиков и наработки
+
-
#минимальная наработка, при которой сбрасывать соединения в базу
+
-
accounting.worker.2.flushing.1.minDeltaAccount=0
+
-
#пауза между заданиями сброса в базу
+
-
accounting.worker.2.flushing.1.delay=2
+
-
#максимальное количество сброшенных соединений в базу за задание
+
-
accounting.worker.2.flushing.1.batchSize=500
+
-
 
+
-
#количество потоков на worker'а
+
-
accounting.worker.3.thread.count=1
+
-
#завершатель соединений
+
-
#пауза между заданиями
+
-
accounting.worker.3.finishing.1.delay=2
+
-
#максимальное количество сброшенных соединений в базу за задание
+
-
accounting.worker.3.finishing.1.batchSize=500
+
-
+
-
connection.start.fromAccept=1
+
-
#таймаут перевода соединения в статус suspended при остутствии радиус пакетов
+
-
connection.suspend.timeout=900
+
-
#таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout)
+
-
connection.close.timeout=1300
+
-
#таймаут перевода соединения в статус suspended при остутствии радиус пакетов (для сессий с ограниченным доступом)
+
-
connection.disable.suspend.timeout=900
+
-
#таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout, для сессий с ограниченным доступом)
+
-
connection.disable.close.timeout=1300
+
-
#Radius-STOP
+
-
connection.finish.timeout=5
+
-
 
+
-
session.split.onTariffOption=1
+
-
session.split.onDeviceState=1
+
-
</source>
+
-
 
+
-
Полный конфиг типа устройств ASR ISG:
+
-
<source lang="bash">
+
-
# Версия SNMP (по умолчанию 1)
+
-
snmp.version=2
+
-
# SNMP OID, из которого ивлекается значение uptime (1.3.6.1.2.1.1.3.0)
+
-
snmp.uptimeOid=1.3.6.1.2.1.1.3.0
+
-
 
+
-
# По умолчанию для Inet каждое устройство является netflow-агентом,
+
-
# для оптимизации указываем, что у нас только один netflow-агент
+
-
flow.agent.type=netflow
+
-
flow.agent.link={@deviceId}:-1
+
-
 
+
-
# Поиск устройства по giaddr и remoteId - 1,
+
-
# поиск устройства только по giaddr, агентское устройство ищется отдельно, после preprocessDhcpRequest - 2,
+
-
dhcp.deviceSearchMode=1
+
-
 
+
-
# убираем заголовок-длину
+
-
dhcp.option82.removeHeader=2
+
-
# позиция agentRemoteId
+
-
dhcp.option82.agentRemoteId.position=0
+
-
 
+
-
# Поиск сервиса Inet по
+
-
dhcp.servSearchMode=1
+
-
 
+
-
# выдавать тот же IP адрес, что при открытом доступе
+
-
dhcp.disable.mode=1
+
-
 
+
-
# Отключаем проверку пароля
+
-
radius.password.verification=0
+
-
 
+
-
# Берем адрес из Access-Request
+
-
radius.address.fromRequest=1
+
-
 
+
-
# Код атрибута, из которого извлекать acctSessionId родительской сессии (по умолчанию - из cisco-avpair)
+
-
#radius.parentAcctSessionId.type=1
+
-
# префикс в значении атрибута перед acctSessionId родительской сессии
+
-
#radius.parentAcctSessionId.prefix=parent-session-id=
+
-
# код атрибута, из которого извлекать имя сервиса ISG (по умолчанию cisco-SSG-Service-Info)
+
-
#radius.serviceName.type=251
+
-
# префикс в значении атрибута перед именем сервиса ISG (если есть)
+
-
#radius.serviceName.prefix=
+
-
 
+
-
# Атрибуты, выдаваемые в Access-Accept
+
-
radius.realm.default.attributes=Acct-Interim-Interval=60;Idle-Timeout=1300;cisco-avpair=subscriber:accounting-list=ipoe-isg-aaa
+
-
 
+
-
# Радиус атрибуты, выдаваемые при авторизации для сервисов
+
-
radius.inetOption.2.attributes=cisco-SSG-Account-Info=AISG-5MBPS
+
-
radius.inetOption.3.attributes=cisco-SSG-Account-Info=AISG-10MBPS
+
-
radius.inetOption.4.attributes=cisco-SSG-Account-Info=AISG-LOCAL
+
-
 
+
-
# Категории ip адресов из ресурсов, из которых будут выдаваться адреса ("пул", указывается во вкладке "IP ресурсы")
+
-
radius.realm.default.ipCategories=1
+
-
 
+
-
# Коды ошибок, при которых вместо reject выдавать accept с заданными атрибутами
+
-
#(пользователю выдается серый адрес и устанавливается HTTP-редирект)
+
-
#radius.disable.accessCodes=1,2,3,4,10,11,12,46
+
-
# атрибуты, выдаваемые при rejectToAccept
+
-
radius.disable.attributes=Acct-Interim-Interval=60;cisco-avpair=subscriber:accounting-list=ipoe-isg-aaa;cisco-SSG-Account-Info=AL4REDIRECT;cisco-SSG-Account-Info=AOPENGARDEN
+
-
#radius.realm.reject.attributes=Acct-Interim-Interval=60;IP-Interface-Name=IP-Interface-Name=ISG-IP-UNAUTH;cisco-SSG-Account-Info=ALOCAL_L4R
+
-
#категории ip адресов из ресурсов, из которых будут выдаваться адреса для отключенных ("пул", указывается во вкладке "IP ресурсы")
+
-
radius.disable.ipCategories=2
+
-
+
-
# Параметры активации сервисов
+
-
# длина паузы, если возникла ошибка
+
-
#sa.error.pause=60
+
-
# количество заданий за раз
+
-
#sa.batch.size=20
+
-
# время (сек) ожидания завершения всех заданий (при асинхронной работе)
+
-
#sa.batch.wait=5
+
-
# пауза (сек) после обработки заданий
+
-
#sa.batch.pause=0
+
-
# время (сек) ожидания новой задачи перед вызовом disconnect.
+
-
#sa.batch.waitNext=5
+
-
#режим отправки CoA. 1 - команды 0xc и 0xb в одном пакете для каждого сервиса, 2 - атрибуты subscriber:command= в раздельных пакетах для каждого сервиса
+
-
sa.radius.connection.coa.mode=2
+
-
# при отключении посылать команду account-logoff
+
-
sa.radius.connection.close.mode=3
+
-
# не посылать команды на отключение сервисов
+
-
#sa.radius.connection.close.disableServices=1
+
-
# чтобы, если деньги закончились, не закрывал сервисы, а закрывал сразу сессию ISG целиком - 0, иначе - 1
+
-
sa.radius.connection.withoutBreak=0
+
-
# если dhcp lease time большой, а при положительном балансе доступ нужно дать (даже если адрес сейчас выдан серый), нужно установить 1
+
-
#sa.radius.connection.coa.onEnable=0
+
-
# откуда при отправке CoA брать атрибуты опций (по умолчанию - те же атрибуты, что выдаются при удачной авторизации)
+
-
#sa.radius.option.attributesPrefix=
+
-
sa.radius.connection.attributes=Acct-Session-Id,User-Name,Framed-IP-Address
+
-
radius.connection.attributes=Acct-Session-Id,User-Name,Framed-IP-Address
+
-
# атрибуты CoA запроса для прекращения доступа (используется при sa.radius.connection.withoutBreak=1)
+
-
#sa.radius.disable.attributes=
+
-
# фиксированные атрибуты, добавляемые в запрос перед отправкой CoA
+
-
#sa.radius.coa.attributes=
+
-
# добавлять ли при отправке CoA атрибуты реалма (для default - из radius.realm.default.attributes)
+
-
#sa.radius.realm.addAttributes=0
+
-
# фиксированные атрибуты, добавляемые в запрос перед отправкой PoD
+
-
#sa.radius.pod.attributes=
+
-
sa.radius.connection.close.removeFromKeyMap=0
+
-
 
+
-
# Лог CoA запросов
+
-
sa.radius.log=1
+
-
 
+
-
#radius.disable.attributes=cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;cisco-SSG-Account-Info=ALOCAL_L4R
+
-
 
+
-
#radius.serviceName.disable=L4REDIRECT,OPENGARDEN
+
-
#sa.radius.service.disable=L4REDIRECT,OPENGARDEN
+
-
 
+
-
#Для автоматического привязывания MAC-адреса к сервису в конфигурации модуля/типа сервиса/устройства/типа устройства можно прописать
+
-
#serv.macAddress.auto=1
+
-
 
+
-
# Пауза между выполнениями команды после ошибки
+
-
manage.error.pause=5
+
-
# Пауза между получением uptime
+
-
manage.uptime.pause=360
+
-
# Пауза после ошибки, возникшей при получении uptime
+
-
manage.uptime.error.pause=360
+
-
 
+
-
# Синхронизировать ли сервисы при обнаружении перезагрузки, 0 - не синхронизировать (по умолчанию), 1 - синхронизировать
+
-
# (для обнаружения перезагрузки в типе устройства должен быть установлен обработчик управления устройством)
+
-
#sa.device.sync.onReboot=0
+
-
# Вызывать ли при синхронизации для каждого сервиса, 0 - только serviceCreate или 1 (по умолчанию) 
+
-
# сначала serviceCancel, а затем serviceCreate
+
-
#sa.device.sync.cancelBeforeCreate=1
+
-
</source>
+
-
 
+
-
Полный конфиг типа устройств SW-1:
+
-
<source lang="bash">
+
-
# Код субопции 82, содержащей VLAN, позиция и длина в субопции
+
-
dhcp.option82.vlanId.code=1
+
-
dhcp.option82.vlanId.position=0
+
-
dhcp.option82.vlanId.length=2
+
-
 
+
-
dhcp.option82.interfaceId.code=1
+
-
dhcp.option82.interfaceId.position=2
+
-
dhcp.option82.interfaceId.length=2
+
-
 
+
-
dhcp.option.leaseTime=600
+
-
 
+
-
# параметры DHCP к сети не привязанные
+
-
dhcp.option.serverIdentifier=0.0.0.0
+
-
#dhcp.option.leaseTime=600
+
-
#dhcp.option.timeServer=ntp.bgbilling.ru
+
-
# параметр DHCP "основной шлюз" для сети
+
-
#dhcp.net.option.188.191.0.0:255.255.255.0.gate=
+
-
#dhcp.net.option.188.191.1.0:255.255.255.0.gate=
+
-
#dhcp.net.option.188.191.2.0:255.255.255.0.gate=
+
-
#dhcp.net.option.188.191.3.0:255.255.255.0.gate=
+
-
 
+
-
#dhcp.option.timeOffset=43200
+
-
#dhcp.option.domainName=bgbilling.ru
+
-
</source>
+
-
 
+
-
Полный конфиг типа устройств Switch:
+
-
<source lang="bash">
+
-
</source>
+
-
 
+
-
Полный конфиг устройства Access+Acounting:
+
-
<source lang="bash">
+
-
ip.resource.categoryId=1
+
-
</source>
+
-
 
+
-
Полный конфиг устройства R31_ASR1002:
+
-
<source lang="bash">
+
-
# Хост для отправки PoD и CoA запросов (по умолчанию - хост, заданный в параметрах устройства Хост/порт)
+
-
#radius.host=<хост устройства>
+
-
# порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт)
+
-
radius.port=1700
+
-
# идентификатор - Nas-Identifier (по умолчанию - значение из поля Идентификатор параметров устройства)
+
-
#radius.identifier=<идентификатор устройства>
+
-
# используемый secret для общения по radius-протоколу (по умолчанию - значение из поля Community/secret параметров устройства)
+
-
#radius.secret=<community/sercret устройства>
+
-
sa.radius.secret=***
+
-
# Сommunity (по умолчанию из параметра устройства Сommunity/Secret)
+
-
snmp.community=***
+
-
</source>
+
-
 
+
-
Полный конфиг устройства SW-1:
+
-
<source lang="bash">
+
-
ip.resource.categoryId=1
+
-
vlan.resource.category=1
+
-
dhcp.ipCategories=1
+
-
</source>
+
-
 
+
-
Полный конфиг устройства Switch:
+
-
<source lang="bash">
+
-
</source>
+
-
 
+
-
Полный конфиг модуля Inet:
+
-
<source lang="bash">
+
-
# Активные и приостановленные статусы договора
+
-
contract.status.active.codes=0
+
-
contract.status.suspend.codes=3,4
+
-
 
+
-
# Проверка цены в тарифе: 0 - проверка отсутсвует, 1 - ошибка только? если у сессии есть трафик определенного типа,
+
-
# но для него нет цены, 2 - ошибка? если хотя бы для одного типа трафика в привязке типа сервиса нет цены (по умолчанию - 1)
+
-
#accounting.tariffication.checkPrice=1
+
-
 
+
-
# Режим активации учетного периода, если не используется скрипт на событие активации,
+
-
# 0 (по умолчанию) - активация со дня подключения (старта сессии), 1 - активация с начала месяца.
+
-
# Следует учитывать, что учетный период является второй величиной при вычислении пропорциональности
+
-
# в тарифной ветке "Диапазон трафика"
+
-
#accounting.period.activation.mode=0
+
-
 
+
-
# Нужно ли отключать сервис с типом инициации "по трафику", если тариф не найден
+
-
#serv.disableOnTariffError=0
+
-
 
+
-
#Пункты Web - меню
+
-
web.menuItem1=Отчет по сессиям Inet
+
-
web.menuItem2=Смена пароля на логины Inet
+
-
web.menuItem3=none
+
-
#web.menuItem3=Отчет по трафикам Inet
+
-
 
+
-
# Параметры автоматической генерации логина для сервиса.
+
-
# Минимальное значение логина при генерации логина
+
-
#serv.login.min=1
+
-
# Максимальное значение логина при генерации логина (т.е. если в базе присутствуют логины 1,2,3 и 10000000,
+
-
# то при генерации создастся логин 4, а не 10000001)
+
-
#serv.login.max=9999999
+
-
 
+
-
# Парамерты автоматической генерации пароля для сервиса. Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса
+
-
# (в последнем случае значения будут главнее):
+
-
# Минимальная длина пароля
+
-
serv.password.length.min=5
+
-
# Максимальная длина пароля
+
-
serv.password.length.max=16
+
-
# Разрешенные символы (используются также при генерации пароля)
+
-
serv.password.chars=1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+
-
# Описание разрешенных символов, если пользователь ввел другие
+
-
serv.password.chars.description=В пароле допустимы только цифры и латинские буквы.
+
-
# Длина для автоматически генерируемого пароля
+
-
serv.password.length.auto=6
+
-
# Используемые символы для автоматически генерируемого пароля (по умолчанию значение берется из параметра serv.password.chars)
+
-
#serv.password.chars.auto=
+
-
 
+
-
# Параметры активации карточек модуля card при использовании InetRadiusProcessor,
+
-
# данные параметры можно указать как в конфигурации модуля, так и в конфигурации устройства.
+
-
# Код модуля card
+
-
#card.moduleId=
+
-
# id услуг активации
+
-
#card.activate.serviceIds=
+
-
# Минимальное значение карточного логина используется, чтобы указать, какие числовые логины нужно искать в карточках;
+
-
# если 0, то ограничение не действует.
+
-
#card.login.min=0
+
-
# Максимальное значение карточного логина используется, чтобы указать, какие числовые логины нужно искать в карточках;
+
-
# если 0, то ограничение не действует.
+
-
#card.login.max=0
+
-
</source>
+
-
 
+
-
----
+
-
 
+
-
Конфиги взяты из работающей лабы.<br />
+
-
В типе устройств ASR ISG нужно обратить внимание на:
+
-
<source lang="bash">
+
-
# Поиск устройства по giaddr и remoteId - 1,
+
-
# поиск устройства только по giaddr, агентское устройство ищется отдельно, после preprocessDhcpRequest - 2,
+
-
dhcp.deviceSearchMode=1
+
-
 
+
-
# Поиск сервиса Inet по
+
-
dhcp.servSearchMode=1
+
-
 
+
-
# выдавать тот же IP адрес, что при открытом доступе
+
-
dhcp.disable.mode=1
+
-
 
+
-
# Берем адрес из Access-Request
+
-
radius.address.fromRequest=1
+
-
 
+
-
# Радиус атрибуты, выдаваемые при авторизации для сервисов
+
-
radius.inetOption.2.attributes=cisco-SSG-Account-Info=AISG-5MBPS
+
-
radius.inetOption.3.attributes=cisco-SSG-Account-Info=AISG-10MBPS
+
-
radius.inetOption.4.attributes=cisco-SSG-Account-Info=AISG-LOCAL
+
-
 
+
-
# чтобы, если деньги закончились, не закрывал сервисы, а закрывал сразу сессию ISG целиком - 0, иначе - 1
+
-
sa.radius.connection.withoutBreak=0
+
-
</source>
+
-
Здесь, в radius.inetOption.'''2'''.attributes=cisco-SSG-Account-Info=AISG-5MBPS цифра '''2''' - это ID соответствующей ''Опции'' (ISG-5MBPS).<br />
+
-
 
+
-
А это должно быть закомментировано:
+
-
<source lang="bash">
+
-
# Коды ошибок, при которых вместо reject выдавать accept с заданными атрибутами
+
-
#(пользователю выдается серый адрес и устанавливается HTTP-редирект)
+
-
#radius.disable.accessCodes=1,2,3,4,10,11,12,46
+
-
+
-
# не посылать команды на отключение сервисов
+
-
#sa.radius.connection.close.disableServices=1
+
-
 
+
-
#radius.disable.attributes=cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;cisco-SSG-Account-Info=ALOCAL_L4R
+
-
#radius.serviceName.disable=L4REDIRECT,OPENGARDEN
+
-
#sa.radius.service.disable=L4REDIRECT,OPENGARDEN
+
-
</source>
+
-
 
+
-
В конфиге устройства SW-1 нужно обратить внимание на:
+
-
<source lang="bash">
+
-
ip.resource.categoryId=1
+
-
dhcp.ipCategories=1
+
-
</source>
+
-
 
+
-
 
+
-
'''продолжение следует...'''
+

Текущая версия на 10:05, 1 апреля 2013

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

Оборудование

  • Уровень доступа (физическое подключение абонентов): catalyst 3550.
  • Уровень аггрегации (объединение нескольких свичей уровня доступа, плюс терминация абонентов по L3): catalyst 3550, с последующей заменой на 3560 при росте сети.
  • Ядро сети: catalyst 6509 (WS-SUP720-3BXL)
  • BRAS (ISG): ASR1002-ESP5

Задача

Подключить абонента по IPoE (без дополнительных инкапсуляций PPPoE или PPTP), выдать адрес по DHCP, авторизовать абонента по номеру порта на соответствующем каталисте уровня доступа, ограничить выход в интернет в соответствие с балансом договора.

Минусы схемы и ее реализации

  • Один IP на абонента (для подключения нескольких устройств абонент должен приобрести CPE - любой ethernet роутер с NAT'ом), потому как cisco реализация ISG создает сессию основываясь на уникальности source IP.
  • Более сложный механизм масштабирования BRAS'ов по сравнению с PPPoE.
  • Нет "локалки" по дому - весь траффик идет через ядро.

Плюсы

  • В простейшем случае (один PC) абоненту вообще не нужно ничего настраивать, достаточно вставить кабель.
  • Транспортная сеть не загромождается MAC-адресами абонентов (при цифрах больше 8-12 тысяч маков приходится переходить на значительно более дорогое железо)
  • Высокая безопасность сети и абонента (изоляция vlan-per-user, "физическая" авторизация абонента через dhcp-snooping, anti-spoofing благодаря ip source guard, динамические /32 маршруты на SVI, создаваемые только после успешной авторизации, изоляция от остальной части сети внутри VRF).
  • Отсутствие дополнительной инкапсуляции в PPP протокол, что разгружает BRAS.

Особенности реализации

  • Получение IP адреса абонентом и получение им доступа в сеть (этакий аналог "онлайна") разделены (хотя и зависимы друг от друга). В результате - в мониторе модуля Inet видим две сессии на договор: по одной понимаем, что абонент получил IP адрес, по другой - что он пользуется сетью (при правильно подобранном Idle-Timeout). Если в мониторе всего одна (dhcp) сессия - значит абонент успешно прошел авторизацию (т.е. сидит в разрешенном порту), но интернет ему в данный момент не нужен (или трафик не доходит до BRAS'а). Это очень удобно для аналитики. ISG session-restart также проходит без проблем, потому как ISG сессия авторизуется по source-IP, который у абонента уже есть (при авторизации ISG сессии непосредственно по option82 пришлось бы заново запрашивать IP, чтобы на BRAS попал dhcp запрос). В результате - на циске можно спокойно сбрасывать сессию, будучи уверенным что при первом же пакете она тут же поднимется. Очень удобно при всяком траблшутинге. IMHO.
  • При отрицательном балансе ISG сессия сбрасывается и создается новая (unauth) сессия с таймером и локальными сервисами, ограничивающими абоненту доступ. Эта сессия каждые N минут переавторизуется на BGBilling'е в надежде, что абонент уже пополнил баланс. И - если баланс выправился - стартует как обычно (с сервисами из биллинга, в соответствие с тарифом). Это не совсем true way для ISG. Правильно - не сбрасывая сессию, снять с нее (через CoA) текущие тарифные ISG сервисы и назначить другие (ограничивающие доступ), а при пополнении баланса - наоборот. BGBilling так может. Почему я сделал по другому? Потому что удобно на циске видеть абонентов с отрицательным балансом (их сессии - unauth) и удобно отслеживать повторные радиус запросы на авторизацию. Это опять же очень удобно для быстрой аналитики и при траблшутинге (почему это у этого абонента ничего не работает? а вот и логи...). Опять же IMHO.
  • IP-адрес для абонента можно назначать статический и/или динамический.

Решение

  1. ISG, схема со стартом сессии и ее авторизацией по IP, выдача адресов на основе option82 (Конфигурация сети)
  2. ISG, схема со стартом сессии и ее авторизацией по IP, выдача адресов на основе option82 (Конфигурация BGBilling'а)
Личные инструменты