BDCOM+O82+авторизация по vlan и порту

Модуль управления DHCP сервером
Ответить
Marcon
Сообщения: 3
Зарегистрирован: Ср окт 10, 2018 8:48 am

BDCOM+O82+авторизация по vlan и порту

Сообщение Marcon » Ср окт 10, 2018 9:43 am

Приветствую.
В общем у нас сейчас работает схема OLT-Mikrotik(как dhcp-server, freeradius_dhcp)-Abills.
Abills версии 0.78.30
В качестве OLT стоят v-solution, которые в o82 могут отдавать только мак онушки, что нас не устраивает.
Привезли нам BDCOM P3310 AC, и сейчас я пытаюсь его для опытов добавить к существующим OLT для обкатки, с последующим переездом части абонов на него.
Хотим сделать авторизацию клиента по vlan и номеру порта.

Что сделали:
1. Настроили на BDCOM 2109 vlan, пробросили vlan до микрота, включили dhcp-snooping с o82 в формате cm-type
2. Подключили ONU на первый PON, дали на нее тегом vlan 2109, проверили, что запросы долетают до микрота, и он может выдавать ip на ону
3. Завели OLT в биллинг в качестве NAS, и настроили SNMP, в биллинге мы видим порты на BDCOM и подключенные на них ONU
Снимок экрана от 2018-10-10 11-58-55.png
Снимок экрана от 2018-10-10 11-58-55.png (47.92 КБ) 247 просмотров
4. Добавили статический пул адресов
5. Добавили тестовую учетную запись, и назначили ей в качестве NAS BDCOM, порт выбрали через интерфейс биллинга, руками прописали vlanid 2109
Снимок экрана от 2018-10-10 12-07-55.png
Снимок экрана от 2018-10-10 12-07-55.png (101.38 КБ) 247 просмотров
6. В config.pl добавили AUTH_EXPR для разбора o82 от BDCOM и включили debug

Код: Выделить всё

$AUTH{mikrotik_dhcp}='Mac_auth2';
$conf{UNKNOWN_IP_LOG}=1;
$conf{AUTH_EXPR_DEBUG}=4;
$conf{AUTH_PARAMS}=1;
$conf{DHCP_O82_BDCOM_TYPE}='cm-type';
# v-solution отправляет mac ONU в Agent-Circuit-Id
$conf{AUTH_EXPR}= 'Agent-Circuit-Id:0x([0-9a-f]{12}):USER_MAC'; 
# bdcom
$conf{AUTH_EXPR}.=';Agent-Circuit-Id:0x([0-9a-f]{4})00([0-9a-f]{4}):VLAN,PORT_DEC;Agent-Remote-Id:0x([0-9a-f]{12}):NAS_MAC';
7. На DHCP-сервере микрота для vlan 2109 врубили использование RADIUS и сменили пул адресов с тестового на static-only
8. Перестартовали радиус

И вот тут у нас все пошло не так, как мы ожидали.
Запрос на биллинг пришел, но биллинг распознал абонента, как другую левую учетку, которую мы заводили для отдельных целей
Снимок экрана от 2018-10-10 12-20-32.png
Снимок экрана от 2018-10-10 12-20-32.png (41.07 КБ) 247 просмотров
И в логе подключений мы получаем вот такое:

Код: Выделить всё

2018-10-10 12:10:24	LOG_INFO	AUTH	int....	NAS_MAC: 84:79:73:d9:61:f2 PORT: 0703 VLAN: 2109 MAC: 80:14:A8:93:0C:D5 CID: 1:80:14:a8:93:c:d5 GT: 0.02787	OLT_3/Mikrotik_1/NAS Server
Судя по том, что я вижу, биллинг правильно получает все необходимые параметры из o82.
Мак: 84:79:73:d9:61:f2
VLAN: 2109
PORT: 0703
VLAN и PORT соответствуют тому, что вбито в учетке bdcom_test, мак соответствует маку bdcom, который заведен как OLT_3 (id=4).

Собственно в radius прилетают вот такие пары.

Код: Выделить всё

(3201) perl:   $RAD_REQUEST{'Agent-Remote-Id'} = &request:Agent-Remote-Id -> '0x847973d961f2'
(3201) perl:   $RAD_REQUEST{'Agent-Circuit-Id'} = &request:Agent-Circuit-Id -> '0x083d000703'
Лог radius -X по этой onu по ссылке: https://pastebin.com/4QsQTchF (дабы не постить простыню)

Подскажите, где я мог накосячить, и как это поправить.

~AsmodeuS~
Site Admin
Сообщения: 5588
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: BDCOM+O82+авторизация по vlan и порту

Сообщение ~AsmodeuS~ » Ср окт 10, 2018 2:45 pm

Дайте полный radius auth request

Marcon
Сообщения: 3
Зарегистрирован: Ср окт 10, 2018 8:48 am

Re: BDCOM+O82+авторизация по vlan и порту

Сообщение Marcon » Чт окт 11, 2018 9:21 am

Код: Выделить всё

(4356) Received Access-Request Id 177 from 192.168.254.2:44460 to 192.168.254.200:1812 length 154
(4356)   NAS-Port-Type = Ethernet
(4356)   NAS-Port = 2206274277
(4356)   Calling-Station-Id = "1:80:14:a8:93:c:d5"
(4356)   Framed-IP-Address = 172.20.3.105
(4356)   Called-Station-Id = "dhcp_OLT3_PON1"
(4356)   Agent-Remote-Id = 0x847973d961f2
(4356)   Agent-Circuit-Id = 0x083d000703
(4356)   User-Name = "80:14:A8:93:0C:D5"
(4356)   User-Password = ""
(4356)   NAS-Identifier = "MikroTik"
(4356)   NAS-IP-Address = 192.168.254.2
(4356) # Executing section authorize from file /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
(4356)   authorize {
(4356)     [preprocess] = ok
(4356)     [mschap] = noop
(4356) files: users: Matched entry DEFAULT at line 38
(4356)     [files] = ok
(4356) perl:   $RAD_REQUEST{'User-Name'} = &request:User-Name -> '80:14:A8:93:0C:D5'
(4356) perl:   $RAD_REQUEST{'User-Password'} = &request:User-Password -> ''
(4356) perl:   $RAD_REQUEST{'NAS-IP-Address'} = &request:NAS-IP-Address -> '192.168.254.2'
(4356) perl:   $RAD_REQUEST{'NAS-Port'} = &request:NAS-Port -> '2206274277'
(4356) perl:   $RAD_REQUEST{'Framed-IP-Address'} = &request:Framed-IP-Address -> '172.20.3.105'
(4356) perl:   $RAD_REQUEST{'Called-Station-Id'} = &request:Called-Station-Id -> 'dhcp_OLT3_PON1'
(4356) perl:   $RAD_REQUEST{'Calling-Station-Id'} = &request:Calling-Station-Id -> '1:80:14:a8:93:c:d5'
(4356) perl:   $RAD_REQUEST{'NAS-Identifier'} = &request:NAS-Identifier -> 'MikroTik'
(4356) perl:   $RAD_REQUEST{'NAS-Port-Type'} = &request:NAS-Port-Type -> 'Ethernet'
(4356) perl:   $RAD_REQUEST{'Event-Timestamp'} = &request:Event-Timestamp -> 'окт 10 2018 12:32:14 EEST'
(4356) perl:   $RAD_REQUEST{'Agent-Remote-Id'} = &request:Agent-Remote-Id -> '0x847973d961f2'
(4356) perl:   $RAD_REQUEST{'Agent-Circuit-Id'} = &request:Agent-Circuit-Id -> '0x083d000703'
(4356) perl:   $RAD_CHECK{'Auth-Type'} = &control:Auth-Type -> 'Perl'
(4356) perl:   $RAD_CONFIG{'Auth-Type'} = &control:Auth-Type -> 'Perl'
(4356) perl: &request:NAS-Port-Type = $RAD_REQUEST{'NAS-Port-Type'} -> 'Ethernet'
(4356) perl: &request:NAS-Identifier = $RAD_REQUEST{'NAS-Identifier'} -> 'MikroTik'
(4356) perl: &request:Agent-Remote-Id = $RAD_REQUEST{'Agent-Remote-Id'} -> '0x847973d961f2'
(4356) perl: ERROR: Failed to create pair - failed to parse time string "окт 10 2018 12:32:14 EEST"
(4356) perl: ERROR:     &request:Event-Timestamp = $RAD_REQUEST{'Event-Timestamp'} -> 'окт 10 2018 12:32:14 EEST'
(4356) perl: &request:Agent-Circuit-Id = $RAD_REQUEST{'Agent-Circuit-Id'} -> '0x083d000703'
(4356) perl: &request:Called-Station-Id = $RAD_REQUEST{'Called-Station-Id'} -> 'dhcp_OLT3_PON1'
(4356) perl: &request:User-Name = $RAD_REQUEST{'User-Name'} -> '80:14:A8:93:0C:D5'
(4356) perl: &request:User-Password = $RAD_REQUEST{'User-Password'} -> ''
(4356) perl: &request:NAS-IP-Address = $RAD_REQUEST{'NAS-IP-Address'} -> '192.168.254.2'
(4356) perl: &request:Framed-IP-Address = $RAD_REQUEST{'Framed-IP-Address'} -> '172.20.3.105'
(4356) perl: &request:NAS-Port = $RAD_REQUEST{'NAS-Port'} -> '2206274277'
(4356) perl: &request:Calling-Station-Id = $RAD_REQUEST{'Calling-Station-Id'} -> '1:80:14:a8:93:c:d5'
(4356) perl: &control:Auth-Type = $RAD_CHECK{'Auth-Type'} -> 'Perl'
(4356)     [perl] = ok
(4356)   } # authorize = ok
(4356) Found Auth-Type = Perl
(4356) # Executing group from file /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
(4356)   Auth-Type Perl {
(4356) perl:   $RAD_REQUEST{'User-Name'} = &request:User-Name -> '80:14:A8:93:0C:D5'
(4356) perl:   $RAD_REQUEST{'User-Password'} = &request:User-Password -> ''
(4356) perl:   $RAD_REQUEST{'NAS-IP-Address'} = &request:NAS-IP-Address -> '192.168.254.2'
(4356) perl:   $RAD_REQUEST{'NAS-Port'} = &request:NAS-Port -> '2206274277'
(4356) perl:   $RAD_REQUEST{'Framed-IP-Address'} = &request:Framed-IP-Address -> '172.20.3.105'
(4356) perl:   $RAD_REQUEST{'Called-Station-Id'} = &request:Called-Station-Id -> 'dhcp_OLT3_PON1'
(4356) perl:   $RAD_REQUEST{'Calling-Station-Id'} = &request:Calling-Station-Id -> '1:80:14:a8:93:c:d5'
(4356) perl:   $RAD_REQUEST{'NAS-Identifier'} = &request:NAS-Identifier -> 'MikroTik'
(4356) perl:   $RAD_REQUEST{'NAS-Port-Type'} = &request:NAS-Port-Type -> 'Ethernet'
(4356) perl:   $RAD_REQUEST{'Event-Timestamp'} = &request:Event-Timestamp -> 'янв  1 1970 03:00:00 MSK'
(4356) perl:   $RAD_REQUEST{'Agent-Remote-Id'} = &request:Agent-Remote-Id -> '0x847973d961f2'
(4356) perl:   $RAD_REQUEST{'Agent-Circuit-Id'} = &request:Agent-Circuit-Id -> '0x083d000703'
(4356) perl:   $RAD_CHECK{'Auth-Type'} = &control:Auth-Type -> 'Perl'
(4356) perl:   $RAD_CONFIG{'Auth-Type'} = &control:Auth-Type -> 'Perl'
: Agent-Circuit-Id, 0x([0-9a-f]{12}), 0x8014a8896840/0x8014a8896840
USER_MAC / 8014a8896840
: Agent-Circuit-Id, 0x([0-9a-f]{4})00([0-9a-f]{4}), 0x8014a8896840/0x8014a8896840
: Agent-Remote-Id, 0x([0-9a-f]{12}), 0x31/0x31
-- 
: Agent-Circuit-Id, 0x([0-9a-f]{12}), 0x083d000703/0x083d000703
: Agent-Circuit-Id, 0x([0-9a-f]{12}), 0x083d000703/0x083d000703
: Agent-Circuit-Id, 0x([0-9a-f]{4})00([0-9a-f]{4}), 0x083d000703/0x083d000703
VLAN / 083d
PORT_DEC / 0703
: Agent-Circuit-Id, 0x([0-9a-f]{12}), 0x083d000703/0x083d000703
: Agent-Circuit-Id, 0x([0-9a-f]{4})00([0-9a-f]{4}), 0x083d000703/0x083d000703
VLAN / 083d
PORT_DEC / 0703
: Agent-Remote-Id, 0x([0-9a-f]{12}), 0x847973d961f2/0x847973d961f2
NAS_MAC / 847973d961f2
(4356) perl: &request:NAS-Port-Type = $RAD_REQUEST{'NAS-Port-Type'} -> 'Ethernet'
(4356) perl: &request:NAS-Identifier = $RAD_REQUEST{'NAS-Identifier'} -> 'MikroTik'
(4356) perl: &request:Agent-Remote-Id = $RAD_REQUEST{'Agent-Remote-Id'} -> '0x847973d961f2'
(4356) perl: ERROR: Failed to create pair - failed to parse time string "янв  1 1970 03:00:00 MSK"
(4356) perl: ERROR:     &request:Event-Timestamp = $RAD_REQUEST{'Event-Timestamp'} -> 'янв  1 1970 03:00:00 MSK'
(4356) perl: &request:Agent-Circuit-Id = $RAD_REQUEST{'Agent-Circuit-Id'} -> '0x083d000703'
(4356) perl: &request:Called-Station-Id = $RAD_REQUEST{'Called-Station-Id'} -> 'dhcp_OLT3_PON1'
(4356) perl: &request:User-Name = $RAD_REQUEST{'User-Name'} -> 'int....'
(4356) perl: &request:User-Password = $RAD_REQUEST{'User-Password'} -> ''
4356) perl: &request:NAS-IP-Address = $RAD_REQUEST{'NAS-IP-Address'} -> '192.168.254.2'
(4356) perl: &request:Framed-IP-Address = $RAD_REQUEST{'Framed-IP-Address'} -> '172.20.3.105'
(4356) perl: &request:NAS-Port = $RAD_REQUEST{'NAS-Port'} -> '2206274277'
(4356) perl: &request:Calling-Station-Id = $RAD_REQUEST{'Calling-Station-Id'} -> '1:80:14:a8:93:c:d5'
(4356) perl: &reply:Ascend-Data-Rate = $RAD_REPLY{'Ascend-Data-Rate'} -> '314572800'
(4356) perl: &reply:Mikrotik-Address-List = $RAD_REPLY{'Mikrotik-Address-List'} -> 'CLIENTS_8'
(4356) perl: &reply:Session-Timeout = $RAD_REPLY{'Session-Timeout'} -> '300'
(4356) perl: &reply:Framed-IP-Address = $RAD_REPLY{'Framed-IP-Address'} -> '172.20.3.101'
(4356) perl: &reply:Ascend-Xmit-Rate = $RAD_REPLY{'Ascend-Xmit-Rate'} -> '314572800'
(4356) perl: &control:Auth-Type = $RAD_CHECK{'Auth-Type'} -> 'Perl'
(4356)     [perl] = ok
(4356)   } # Auth-Type Perl = ok
(4356) # Executing section post-auth from file /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
(4356)   post-auth {
(4356) perl:   $RAD_REQUEST{'User-Name'} = &request:User-Name -> 'int....'
(4356) perl:   $RAD_REQUEST{'User-Password'} = &request:User-Password -> ''
(4356) perl:   $RAD_REQUEST{'NAS-IP-Address'} = &request:NAS-IP-Address -> '192.168.254.2'
(4356) perl:   $RAD_REQUEST{'NAS-Port'} = &request:NAS-Port -> '2206274277'
(4356) perl:   $RAD_REQUEST{'Framed-IP-Address'} = &request:Framed-IP-Address -> '172.20.3.105'
(4356) perl:   $RAD_REQUEST{'Called-Station-Id'} = &request:Called-Station-Id -> 'dhcp_OLT3_PON1'
(4356) perl:   $RAD_REQUEST{'Calling-Station-Id'} = &request:Calling-Station-Id -> '1:80:14:a8:93:c:d5'
(4356) perl:   $RAD_REQUEST{'NAS-Identifier'} = &request:NAS-Identifier -> 'MikroTik'
(4356) perl:   $RAD_REQUEST{'NAS-Port-Type'} = &request:NAS-Port-Type -> 'Ethernet'
(4356) perl:   $RAD_REQUEST{'Event-Timestamp'} = &request:Event-Timestamp -> 'янв  1 1970 03:00:00 MSK'
(4356) perl:   $RAD_REQUEST{'Agent-Remote-Id'} = &request:Agent-Remote-Id -> '0x847973d961f2'
(4356) perl:   $RAD_REQUEST{'Agent-Circuit-Id'} = &request:Agent-Circuit-Id -> '0x083d000703'
(4356) perl:   $RAD_REPLY{'Framed-IP-Address'} = &reply:Framed-IP-Address -> '172.20.3.101'
(4356) perl:   $RAD_REPLY{'Session-Timeout'} = &reply:Session-Timeout -> '300'
(4356) perl:   $RAD_REPLY{'Ascend-Data-Rate'} = &reply:Ascend-Data-Rate -> '314572800'
(4356) perl:   $RAD_REPLY{'Ascend-Xmit-Rate'} = &reply:Ascend-Xmit-Rate -> '314572800'
(4356) perl:   $RAD_REPLY{'Mikrotik-Address-List'} = &reply:Mikrotik-Address-List -> 'CLIENTS_8'
(4356) perl:   $RAD_CHECK{'Auth-Type'} = &control:Auth-Type -> 'Perl'
(4356) perl:   $RAD_CONFIG{'Auth-Type'} = &control:Auth-Type -> 'Perl'
(4356) perl: &request:NAS-Port-Type = $RAD_REQUEST{'NAS-Port-Type'} -> 'Ethernet'
(4356) perl: &request:NAS-Identifier = $RAD_REQUEST{'NAS-Identifier'} -> 'MikroTik'
(4356) perl: &request:Agent-Remote-Id = $RAD_REQUEST{'Agent-Remote-Id'} -> '0x847973d961f2'
(4356) perl: ERROR: Failed to create pair - failed to parse time string "янв  1 1970 03:00:00 MSK"
(4356) perl: ERROR:     &request:Event-Timestamp = $RAD_REQUEST{'Event-Timestamp'} -> 'янв  1 1970 03:00:00 MSK'
(4356) perl: &request:Agent-Circuit-Id = $RAD_REQUEST{'Agent-Circuit-Id'} -> '0x083d000703'
(4356) perl: &request:Called-Station-Id = $RAD_REQUEST{'Called-Station-Id'} -> 'dhcp_OLT3_PON1'
(4356) perl: &request:User-Name = $RAD_REQUEST{'User-Name'} -> 'int....'
(4356) perl: &request:User-Password = $RAD_REQUEST{'User-Password'} -> ''
(4356) perl: &request:NAS-IP-Address = $RAD_REQUEST{'NAS-IP-Address'} -> '192.168.254.2'
(4356) perl: &request:Framed-IP-Address = $RAD_REQUEST{'Framed-IP-Address'} -> '172.20.3.105'
(4356) perl: &request:NAS-Port = $RAD_REQUEST{'NAS-Port'} -> '2206274277'
(4356) perl: &request:Calling-Station-Id = $RAD_REQUEST{'Calling-Station-Id'} -> '1:80:14:a8:93:c:d5'
(4356) perl: &reply:Ascend-Data-Rate = $RAD_REPLY{'Ascend-Data-Rate'} -> '314572800'
(4356) perl: &reply:Mikrotik-Address-List = $RAD_REPLY{'Mikrotik-Address-List'} -> 'CLIENTS_8'
(4356) perl: &reply:Session-Timeout = $RAD_REPLY{'Session-Timeout'} -> '300'
(4356) perl: &reply:Framed-IP-Address = $RAD_REPLY{'Framed-IP-Address'} -> '172.20.3.101'
(4356) perl: &reply:Ascend-Xmit-Rate = $RAD_REPLY{'Ascend-Xmit-Rate'} -> '314572800'
(4356) perl: &control:Auth-Type = $RAD_CHECK{'Auth-Type'} -> 'Perl'
(4356)     [perl] = ok
(4356)   } # post-auth = ok
(4356) Login OK: [int....] (from client NAS_1 port 2206274277 cli 1:80:14:a8:93:c:d5)
(4356) Sent Access-Accept Id 177 from 192.168.254.200:1812 to 192.168.254.2:44460 length 0
(4356)   Ascend-Data-Rate = 314572800
(4356)   Mikrotik-Address-List = "CLIENTS_8"
(4356)   Session-Timeout = 300
(4356)   Framed-IP-Address = 172.20.3.101
(4356)   Ascend-Xmit-Rate = 314572800
(4356) Finished request

Marcon
Сообщения: 3
Зарегистрирован: Ср окт 10, 2018 8:48 am

Re: BDCOM+O82+авторизация по vlan и порту

Сообщение Marcon » Чт окт 11, 2018 11:23 am

В общем я сам себе злобный буратино.
Проблему создавал как раз тот левый юзер, под которым авторизовалась тестовая онушка: у этого юзера был пустой CID, а у онушки наоборот стояло ANY.
Вписал левую строку в CID юзера, а у тех, кто должен по vlan и порту авторизоваться наоборот убрал CID.

Сейчас у меня две тестовые онушки подключены к BDCOM, и обе получают свои IP как положенно. Для теста одной из них вбил в o82 неправильный vlan и онушка получила гостевой IP, как и положенно.

Спасибо всем, кто помогал советами(в телеграме).


UPD. А, еще я переделал AUTH-EXPR, привел их к такому виду:

Код: Выделить всё

$conf{AUTH_EXPR}= 'Agent-Circuit-Id:^0x([0-9a-f]{12})$:USER_MAC';
$conf{AUTH_EXPR}.=';Agent-Remote-Id:^0x([0-9a-f]{12})$:NAS_MAC;Agent-Circuit-Id:^0x([0-9a-f]{4})00([0-9a-f]{4})$:VLAN,PORT_DEC';

~AsmodeuS~
Site Admin
Сообщения: 5588
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: BDCOM+O82+авторизация по vlan и порту

Сообщение ~AsmodeuS~ » Пт окт 12, 2018 5:01 pm

были дубликаты абонентов и система говорила что есть несколько абонентов на параметры авторизации

Ответить