Просмотр Исходного

{code}
configure terminal

!!! включаем, что subscriber ы должны авторизовываться
subscriber authorization enable

!!! включаем, что можно по радиус реплай передать несколько сервисов в ответ на логи пароль.
subscriber service multiple-accept

!!! выключаем отдельный аккаунтинг подключеных сервисов
!!! нам достаточно только аккаунтинга пользователя
no subscriber service session-accounting

!!! включаем нетфлоу отправку
ip flow-export version 5
ip flow-cache timeout active 20
ip flow-cache timeout inactive 30

ip flow-export source {{to_billing_int}}
ip flow-export destination {{billing_ip}} 9996

!!! создаем радиус группу для авторизации по ip subscriber
no aaa group server radius CRB_AAAGS_IPOE
aaa group server radius CRB_AAAGS_IPOE
server-private {{billing_ip}} auth-port 1812 acct-port 1813 timeout 3 retransmit 2 key {{radius_secret}}
ip radius source-interface {{to_billing_int}}
deadtime 1

!!! тут идет магия, но при других наборах параметров работать не будет
aaa authentication login AAA_LIST_IPOE group CRB_AAAGS_IPOE
aaa authorization network AAA_LIST_IPOE group CRB_AAAGS_IPOE
!!! эта строчка выглядит не логично, но она Верная
aaa authorization subscriber-service AAA_LIST_IPOE local group CRB_AAAGS_IPOE
!!! и эта строка нужна
aaa authorization subscriber-service default local

!!! включаем accounting для листа AAA_LIST_IPOE
aaa accounting network AAA_LIST_IPOE
action-type start-stop
group CRB_AAAGS_IPOE
!
!!! ждать назначения ip адреса
aaa accounting delay-start all

!!! делаем рандом сдвиги, чтоб при ресете не было пиковых одновременных аккаунтингов
aaa accounting jitter maximum 10

!!! период accounting в минутах
aaa accounting update periodic 20

!!! влкючаем обратный радиус для приема coa
no aaa server radius dynamic-author
aaa server radius dynamic-author
client {{billing_ip}} server-key {{coa_psw}}
port {{coa_port}}
auth-type any

!!! общий сессион ID для пользователя и его сервисов
aaa session-id common

!!! разрешаем управлять по радиусу интерфейсами, в теории нужно только для ppp доступа и здесь не нужно
aaa policy interface-config allow-subinterface

!!! создаем полиси контрол для перехвата первого пакета и авторизации абонетов
no policy-map type control CTRL_IPOE
class-map type control match-all CTRL_TIMER_UNAUTH
!!! если пользователь авторизован ранее с ошибкой, то ничего не делаем(return), пока не кончится таймер TIMER_UNAUTH
match authen-status unauthenticated
match timer TIMER_UNAUTH

!!! если пользователь авторизован и не закончился таймер TIMER_AUTH, то return
class-map type control match-all CTRL_TIMER_AUTH
match authen-status authenticated
match timer TIMER_AUTH

!!! если кончился таймер, то отключаем сервисы
policy-map type control CTRL_IPOE
class type control always event timed-policy-expiry
1 service disconnect

!!! если стопнули радиус сессию, то отключаем сервисы
class type control always event account-logoff
1 service disconnect

!!! если радиус не отвечает, даем инет со скоростью 512кбит на 10 минут
class type control always event radius-timeout
10 set-timer TIMER_UNAUTH 10
20 service-policy type service name FWPOL_DEFAULT

!!! если это первый пакет, то пробуем авторизоваться
class type control always event session-start
10 set-timer TIMER_AUTH 10080
!!! если авторизовались, то будет неявный return
20 authorize aaa list AAA_LIST_IPOE password servicemode identifier source-ip-address
!!! если reject, то вешаем таймер на 5 минут и перенаправляем на страницу редиректа админом
30 set-timer TIMER_UNAUTH 5
40 service-policy type service name FWPOL_BLOCKED_TRUSTED
50 service-policy type service name FWPOL_BLOCKED_REDIRECT

!!! на все интерфейсы из списка abon_ints вешаем обязательную авторизацию по первому пакету через контрол CTRL_IPOE по ip-address
@@@ for abon_int in abon_ints
interface {{abon_int}}
ip flow ingress
ip flow egress
ip nat inside
service-policy type control CTRL_IPOE
ip subscriber routed
initiator unclassified ip-address
@@@ endfor

end
exit
{code}