Настройка cisco с поддеркой ISG
Материал из BiTel WiKi
(Различия между версиями)
Skyb (Обсуждение | вклад) |
Мамонт (Обсуждение | вклад) |
||
(2 промежуточные версии не показаны) | |||
Строка 1: | Строка 1: | ||
- | Вот конфигурация | + | Вот конфигурация Cisco, которая у нас работала на тестовом стенде. Авторизация происходит по dhcp opt.82 Мы выбрали так, чтобы она происходила без вписания логина и пароля на странице авторизации. То есть абонент втыкает провод, по dhcp получает IP адрес и в зависимости от того - разрешена ли ему авторизация или нет, если не разрешена, то что бы он не набрал - его будет релееть на страницу статистики. |
Поехали. | Поехали. | ||
Это первый вариант, чуть позже отформатирую статью. | Это первый вариант, чуть позже отформатирую статью. | ||
Строка 19: | Строка 19: | ||
! | ! | ||
aaa nas port extended | aaa nas port extended | ||
- | |||
- | |||
- | |||
! | ! | ||
aaa session-id unique | aaa session-id unique | ||
- | |||
! | ! | ||
ip dhcp relay information policy keep | ip dhcp relay information policy keep | ||
Строка 31: | Строка 27: | ||
no ip domain lookup | no ip domain lookup | ||
redirect server-group REDIRECT_SERVER_GROUP1 | redirect server-group REDIRECT_SERVER_GROUP1 | ||
- | server ip 10.10.10.9 port 80 | + | ! на какой сервер релеить |
- | + | server ip 10.10.10.9 port 80 | |
- | + | ||
! | ! | ||
subscriber authorization enable | subscriber authorization enable | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
! | ! | ||
policy-map type control RULE_IP_SESSION2a | policy-map type control RULE_IP_SESSION2a | ||
- | class type control always event session-start | + | class type control always event session-start |
- | 30 authorize aaa list AUTHOR_LIST1 password 123 identifier circuit-id | + | 30 authorize aaa list AUTHOR_LIST1 password 123 identifier circuit-id |
- | 40 service-policy type service name SERVICE_406_L4R | + | 40 service-policy type service name SERVICE_406_L4R |
! | ! | ||
- | class type control always event session-restart | + | class type control always event session-restart |
- | 30 authorize aaa list AUTHOR_LIST1 password 123 identifier circuit-id | + | 30 authorize aaa list AUTHOR_LIST1 password 123 identifier circuit-id |
- | 40 service-policy type service name SERVICE_406_L4R | + | 40 service-policy type service name SERVICE_406_L4R |
! | ! | ||
- | class type control always event account-logon | + | class type control always event account-logon |
- | 10 authenticate aaa list AUTHEN_LIST1 | + | 10 authenticate aaa list AUTHEN_LIST1 |
! | ! | ||
- | class type control always event service-stop | + | class type control always event service-stop |
- | 1 service-policy type service unapply identifier service-name | + | 1 service-policy type service unapply identifier service-name |
- | 10 log-session-state | + | 10 log-session-state |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
! | ! | ||
interface FastEthernet0/0 | interface FastEthernet0/0 | ||
- | no ip address | + | no ip address |
- | no ip redirects | + | no ip redirects |
- | no ip mroute-cache | + | no ip mroute-cache |
- | duplex full | + | duplex full |
- | no cdp enable | + | no cdp enable |
! | ! | ||
interface FastEthernet0/0.300 | interface FastEthernet0/0.300 | ||
- | encapsulation dot1Q 300 | + | encapsulation dot1Q 300 |
- | ip address 10.10.10.25 255.255.255.248 | + | description -- To Abonents -- |
- | ip helper-address 10.10.10.1 | + | ip address 10.10.10.25 255.255.255.248 |
- | no cdp enable | + | ip helper-address 10.10.10.1 |
- | service-policy type control RULE_IP_SESSION2a | + | no cdp enable |
- | ip subscriber routed | + | service-policy type control RULE_IP_SESSION2a |
- | initiator dhcp class-aware | + | ip subscriber routed |
+ | initiator dhcp class-aware | ||
! | ! | ||
interface FastEthernet1/0 | interface FastEthernet1/0 | ||
- | ip address 10.10.10.18 255.255.255.252 | + | ip address 10.10.10.18 255.255.255.252 |
- | no ip redirects | + | no ip redirects |
- | + | ip flow ingress | |
- | ip flow ingress | + | no ip mroute-cache |
- | no ip mroute-cache | + | duplex full |
- | duplex full | + | no cdp enable |
- | no cdp enable | + | |
! | ! | ||
! | ! | ||
ip classless | ip classless | ||
ip route 0.0.0.0 0.0.0.0 10.10.10.17 | ip route 0.0.0.0 0.0.0.0 10.10.10.17 | ||
- | |||
- | |||
- | |||
- | |||
! | ! | ||
ip radius source-interface FastEthernet1/0 | ip radius source-interface FastEthernet1/0 | ||
Строка 129: | Строка 100: | ||
radius-server vsa send authentication | radius-server vsa send authentication | ||
! | ! | ||
+ | </source> | ||
+ | |||
+ | |||
+ | Для уникальности логина авторизации можно его делать из circuitId + remote-id | ||
+ | Вот скрипт предобработки | ||
+ | <source lang="bash"> | ||
+ | import bitel.billing.server.radius.*; | ||
+ | |||
+ | prefix = "circuit-id-tag"; | ||
+ | prefixRemote = "remote-id-tag"; | ||
+ | |||
+ | length = prefix.length(); | ||
+ | lengthRemote = prefixRemote.length(); | ||
+ | |||
+ | userName = request.getStringAttribute( RadiusStandartAttributes.User_Name ); | ||
+ | circuitId = null; | ||
+ | remoteId = null; | ||
+ | |||
+ | attributes = request.getVendorAttributes( Vendors.CISCO, CiscoVendor.Cisco_AVPair ); | ||
+ | if( attributes != null ) | ||
+ | for( it = attributes.iterator(); it.hasNext(); ) | ||
+ | { | ||
+ | ra = (RadiusAttribute)it.next(); | ||
+ | value = ra.getStringValue(); | ||
+ | |||
+ | if( value.startsWith( prefix ) ) | ||
+ | { | ||
+ | circuitId = value.substring( length + 1 ); | ||
+ | } | ||
+ | else if( value.startsWith( prefixRemote ) ) | ||
+ | { | ||
+ | remoteId = value.substring( lengthRemote + 1 ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if( userName != null && circuitId != null && remoteId != null && userName.equals( circuitId ) ) | ||
+ | { | ||
+ | vlan = circuitId.substring( 4, 8 ); | ||
+ | port = circuitId.substring( 8, 12 ); | ||
+ | |||
+ | request.setStringAttribute( RadiusStandartAttributes.User_Name, vlan + ":" + port + ":" + remoteId ); | ||
+ | } | ||
+ | |||
+ | if( circuitId != null ) | ||
+ | { | ||
+ | sessionId = request.getStringAttribute( RadiusStandartAttributes.Acct_Session_Id ); | ||
+ | if( sessionId != null ) | ||
+ | { | ||
+ | request.setStringAttribute( RadiusStandartAttributes.Acct_Session_Id, sessionId + ":" + circuitId ); | ||
+ | } | ||
+ | } | ||
</source> | </source> |
Текущая версия на 05:17, 19 мая 2010
Вот конфигурация Cisco, которая у нас работала на тестовом стенде. Авторизация происходит по dhcp opt.82 Мы выбрали так, чтобы она происходила без вписания логина и пароля на странице авторизации. То есть абонент втыкает провод, по dhcp получает IP адрес и в зависимости от того - разрешена ли ему авторизация или нет, если не разрешена, то что бы он не набрал - его будет релееть на страницу статистики. Поехали. Это первый вариант, чуть позже отформатирую статью.
! aaa new-model aaa session-mib disconnect ! ! aaa group server radius SERVER_GROUP1 server 10.10.10.1 auth-port 1812 acct-port 1813 ! aaa authentication login AUTHEN_LIST1 group SERVER_GROUP1 aaa authorization network default group SERVER_GROUP1 aaa authorization subscriber-service AUTHOR_LIST1 group SERVER_GROUP1 aaa accounting delay-start all aaa accounting update periodic 5 aaa accounting network ACCNT_LIST1 start-stop group SERVER_GROUP1 ! aaa nas port extended ! aaa session-id unique ! ip dhcp relay information policy keep ip dhcp relay information trust-all ! no ip domain lookup redirect server-group REDIRECT_SERVER_GROUP1 ! на какой сервер релеить server ip 10.10.10.9 port 80 ! subscriber authorization enable ! policy-map type control RULE_IP_SESSION2a class type control always event session-start 30 authorize aaa list AUTHOR_LIST1 password 123 identifier circuit-id 40 service-policy type service name SERVICE_406_L4R ! class type control always event session-restart 30 authorize aaa list AUTHOR_LIST1 password 123 identifier circuit-id 40 service-policy type service name SERVICE_406_L4R ! class type control always event account-logon 10 authenticate aaa list AUTHEN_LIST1 ! class type control always event service-stop 1 service-policy type service unapply identifier service-name 10 log-session-state ! interface FastEthernet0/0 no ip address no ip redirects no ip mroute-cache duplex full no cdp enable ! interface FastEthernet0/0.300 encapsulation dot1Q 300 description -- To Abonents -- ip address 10.10.10.25 255.255.255.248 ip helper-address 10.10.10.1 no cdp enable service-policy type control RULE_IP_SESSION2a ip subscriber routed initiator dhcp class-aware ! interface FastEthernet1/0 ip address 10.10.10.18 255.255.255.252 no ip redirects ip flow ingress no ip mroute-cache duplex full no cdp enable ! ! ip classless ip route 0.0.0.0 0.0.0.0 10.10.10.17 ! ip radius source-interface FastEthernet1/0 access-list 135 permit ip any host 10.10.10.9 access-list 135 deny ip any any access-list 199 deny ip any host 10.10.10.9 access-list 199 permit tcp any any eq www no cdp run radius-server attribute 44 include-in-access-req vrf default radius-server attribute 6 on-for-login-auth radius-server attribute 8 include-in-access-req radius-server attribute 32 include-in-access-req radius-server attribute 32 include-in-accounting-req radius-server attribute 55 include-in-acct-req radius-server attribute 55 access-request include radius-server attribute 25 access-request include radius-server attribute nas-port format e UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU radius-server host 10.10.10.1 auth-port 1812 acct-port 1813 key aaacisco radius-server retransmit 5 radius-server timeout 30 radius-server directed-request radius-server vsa send accounting radius-server vsa send authentication !
Для уникальности логина авторизации можно его делать из circuitId + remote-id
Вот скрипт предобработки
import bitel.billing.server.radius.*; prefix = "circuit-id-tag"; prefixRemote = "remote-id-tag"; length = prefix.length(); lengthRemote = prefixRemote.length(); userName = request.getStringAttribute( RadiusStandartAttributes.User_Name ); circuitId = null; remoteId = null; attributes = request.getVendorAttributes( Vendors.CISCO, CiscoVendor.Cisco_AVPair ); if( attributes != null ) for( it = attributes.iterator(); it.hasNext(); ) { ra = (RadiusAttribute)it.next(); value = ra.getStringValue(); if( value.startsWith( prefix ) ) { circuitId = value.substring( length + 1 ); } else if( value.startsWith( prefixRemote ) ) { remoteId = value.substring( lengthRemote + 1 ); } } if( userName != null && circuitId != null && remoteId != null && userName.equals( circuitId ) ) { vlan = circuitId.substring( 4, 8 ); port = circuitId.substring( 8, 12 ); request.setStringAttribute( RadiusStandartAttributes.User_Name, vlan + ":" + port + ":" + remoteId ); } if( circuitId != null ) { sessionId = request.getStringAttribute( RadiusStandartAttributes.Acct_Session_Id ); if( sessionId != null ) { request.setStringAttribute( RadiusStandartAttributes.Acct_Session_Id, sessionId + ":" + circuitId ); } }