0
Отвечен

accel-ipoe авторизация по ОНУ

Maks 4 года назад обновлен mikbill (CEO) 3 года назад 30

Тестируем данный функционал, https://wiki.mikbill.ru/billing/nas_access_server/accelipoe_example_3
есть собранный аццел

root@natd8:/# accel-cmd -V
accel-cmd 1.10.1


root@natd8:/# uname -a
Linux nat6 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u6 x86_64 GNU/Linux


root@natd8:/# dpkg --list | grep lua
ii liblua5.1-0:amd64 5.1.5-7.1 amd64 Shared library for the Lua interpreter version 5.1
ii liblua5.1-0-dev:amd64 5.1.5-7.1 amd64 Development files for the Lua language version 5.1
ii lua5.1 5.1.5-7.1 amd64 Simple, extensible, embeddable programming language


при авторизации абона в логе такие сообщения:

[2016-04-11 13:40:28]: error: : ipoe: lua: /etc/accel-ppp.lua:2: bad argument #1 to 'unpack' (string expected, got nil)
[2016-04-11 13:40:28]: info: : ipoe: session finished
[2016-04-11 13:40:30]: info: : recv [DHCPv4 Discover xid=16cbfb20 chaddr=00:21:70:bd:f5:88 <Message-Type Discover> <Max-Message-Size 1024> <Client-ID 01002170bdf588> <Host-Name TL-WR740N> <Vendor-Class 4d53465420352e30> <Request-IP 172.30.0.91> <Request-List Subnet,Router,DNS,Domain-Name,Route,Vendor-Specific,44,46,47,Classless-Route,249>]


при стандартном содержимом accel.lua все работает нормально:
root@natd8:/# cat /etc/accel-ppp.lua
function username(pkt)
return pkt:hdr('chaddr')
end

Так же интересует вопрос, будет ли работать авторизация по ОНУ и по МАКу конечного устройства? т.к. у нас есть районы где на одном НАСе сидят абоны на ПОНе и на обычном езернете


+1
Отвечен

Да конечно

Т е Если внесли мак ону то авторизует по ней

если же внесен мак абонента то авторизует по нему

Т е в 4х портовую ону можно включить 4ре абонента например.

это хорошо, но все же, что-то можете подсказать по поводу ошибки?
error: : ipoe: lua: /etc/accel-ppp.lua:2: bad argument #1 to 'unpack' (string expected, got nil)

уточню что при этом в accel-ppp.lua как в вики

#!lua
function username(pkt)
v,b1,b2,b3,b4,b5,b6=string.unpack(pkt:agent_remote_id(),'bbbbbb')
return string.format("%02x:%02x:%02x:%02x:%02x:%02x", b1,b2,b3,b4,b5,b6)
end

На шасси забыли прописать.

так вот как раз и суть вопроса, тестировали работу юзера сидящего не на ПОНе, многоэтажки у нас обычный езернет. Я правильно понимаю, что в этом случае отдельный аццел нужно запускать? где-то видел люди запускают несколько копий аццела с разными конфигами, на одном сервере.
Вопрос был в том, удастся или совместить абонов с ПОНа и не ПОНа

lua скрипт расширить

чтобы в случае отсуствия опции82 формировал другой ответ

Если можно, тут немного поподробнее, с луа столкнулись только в этом моменте и особых познаний в нем нет.

спасибо, будем разбираться)

был гдето готовый скрипт но потерялся в свалке скриптов...уже бы выложил.

если случайно наткнетесь, не проходите мимо))))
в мане настройки для БДКома, с ЗТЕ у вас никто не сталкивался? уже перепробовал все, а вод ДХЦП снупинг так и не заработал(((

Сделайте отдельный топик, часть клиентов работает с таким железом, ктото думаю ответит

Ищется ответ

Пример lua с условием...

Т е если есть удаленный возврашает одно если нет другое

ну и так далее можно сделать много чего.


function username(pkt)
if pkt:agent_remote_id() ~= nil then
v,b1,b2,b3,b4,b5,b6=string.unpack(pkt:agent_remote_id(),'bbbbbb')
return string.format("%02x:%02x:%02x:%02x:%02x:%02x", b1,b2,b3,b4,b5,b6)
else return string.format("00:00:00:00:00:00")
end
end

этим еще не занимались, железки под тесты нету, но скоро будет)

мы вопрос по другому решаем.

как закончим опишем... без луа

Спасибо,все работает отлично, авторизация и по маку ОНУ и по маку устройства (где не включен ДХЦП снупинг) только Луа поправили немного:

#!lua
function username(pkt)
if pkt:agent_remote_id() ~= nil then
v,b1,b2,b3,b4,b5,b6=string.unpack(pkt:agent_remote_id(),'bbbbbb')
return string.format("%02x:%02x:%02x:%02x:%02x:%02x", b1,b2,b3,b4,b5,b6)
else return pkt:hdr('chaddr')
end
end

но это тестилось на бдкоме, до ЗТЕ еще не добрались...

Может отличаться длинна отдаваемого мака Ону..

Разскажите что вышло, очень любопытно.

В модуле в2 акселя думаю привзаться к опции

ATTRIBUTE AccelRemoteId 246 octets

и по ней искать, чтобы от LUA Отказаться.

Пока что в тесте еще

наконец-то освободилась ЗТЕха ц220 у нас. вообщем с люа все плохо..толи лыжи не едут, толи я туповат...
в тисипидампе вижу :

Circuit-ID SubOption 1, length 68: 0 0/0/0:4096.10 00d0.d09c.9c78/0/0/1/0/4/0000000000008014A81F6068 EP
где "8014A81F6068" мак ону
в логе аксела, если люа оставить как в предыдущем сообщении:

[2016-05-10 19:38:57]: error: : ipoe: lua: /etc/accel-ppp.lua:5: bad argument #2 to 'format' (number expected, got nil)
[2016-05-10 19:38:57]: info: : ipoe: session finished
[2016-05-10 19:39:01]: info: : recv [DHCPv4 Discover xid=a9406f38 chaddr=40:6c:8f:42:50:9a <Message-Type Discover> <Request-List Subnet,Classless-Route,Router,DNS,Domain-Name,119,252,95,44,46> <Max-Message-Size 1500> <Client-ID 01406c8f42509a> <Lease-Time 7776000> <Host-Name Dimas-MBP> <Relay-Agent {Agent-Circuit-ID 0 0/0/0:4096.10 00d0.d09c.9c78/0/0/1/0/4/0000000000008014A81F6068 EP} {Agent-Remote-ID }>]

вроде бы как логично заменить в скрипте agent_remote_id на agent_сircuit_id и посмотреть что получится...и получаю авторизацию, не пойму как и почему, но :

accel-cmd show sessions
ifname | username | calling-sid | ip | rate-limit | type | comp | state | uptime
--------+-------------------+-------------------+-----------------+------------+------+------+--------+----------
ipoe0 | 30:20:30:2f:30:2f | 40:6c:8f:42:50:9a | 192.168.254.109 | 512/512 | ipoe | | active | 00:00:23

откуда этот 30:20:30:2f:30:2f мак?

свитч перед ЗТЕ:

DGS-3120-24SC:admin#show fdb mac 30:20:30:2f:30:2f
Command: show fdb mac_address 30-20-30-2F-30-2F



VID VLAN Name MAC Address Port Type Status
---- -------------------------------- ----------------- ----- ------- -------

сам ЗТЕ тоже говорит "не видел я токого"
понимаю что иду не верным путём, но интересно откуда он взял это мак.
Не понимаю как увидеть что аксел передает в люа, следовательно не могу привести это к нужному формату.
Может кто-то подсказать как вывести разбор опции82 хоть куда-нибудь, но лучше в какой-то файлик)))

#!lua
function username(pkt)
m1=string.sub(pkt:agent_circuit_id(),'-15','-14')
m2=string.sub(pkt:agent_circuit_id(),'-13','-12')
m3=string.sub(pkt:agent_circuit_id(),'-11','-10')
m4=string.sub(pkt:agent_circuit_id(),'-9','-8')
m5=string.sub(pkt:agent_circuit_id(),'-7','-6')
m6=string.sub(pkt:agent_circuit_id(),'-5','-4')
local username=m1..':'..m2..':'..m3..':'..m4..':'..m5..':'..m6
return username
end


так работает))))

с ЗТЕ есть немного интересных нюансов.
к примеру если на БДКОМе настроить авторизацию по ОНУ, то нужно сразу перестраивать весь ОЛТ. С ЗТЕ же можно хоть по одному абону переводить.
что нужно настроить на ЗТЕ:

ZXAN#configureterminal
ZXAN(config)#dhcp-option82enable

ZXAN(config)#port-locationaccess-node-identifierinband-mac

в конфиг ОНУ добавить:

ZXAN(config-if)#port-location format china-telecom vport 1

ZXAN(config-if)#port-location sub-option remote-id enable vport 1
ZXAN(config-if)#dhcp-option82 enable vport 1
ZXAN(config-if)#dhcp-option82 trust true keep vport 1

в мане еще рекомендуют указывать #port-location sub-option remote-id name ZTE123 vport1 это укажет Remote-ID опции. Мы решили этого не делать, т.к. нужно было как-то различать БДКОМ и ЗТЕ
Используем этот скрипт, авторизирует по ОНУ на БДКОМА или ЗТЕ или если нет опции82, по МАКу конечного устройства:


#!lua
function username(pkt)
if pkt:agent_circuit_id() ~= nil then
if string.len(pkt:agent_remote_id()) ~= 0 then
v,b1,b2,b3,b4,b5,b6=string.unpack(pkt:agent_remote_id(),'bbbbbb')
return string.format("%02x:%02x:%02x:%02x:%02x:%02x", b1,b2,b3,b4,b5,b6)
elseif (string.len(pkt:agent_remote_id()) == 0 and string.len(pkt:agent_circuit_id()) ~= 0) then
m1=string.sub(pkt:agent_circuit_id(),'-15','-14')
m2=string.sub(pkt:agent_circuit_id(),'-13','-12')
m3=string.sub(pkt:agent_circuit_id(),'-11','-10')
m4=string.sub(pkt:agent_circuit_id(),'-9','-8')
m5=string.sub(pkt:agent_circuit_id(),'-7','-6')
m6=string.sub(pkt:agent_circuit_id(),'-5','-4')
local username=m1..':'..m2..':'..m3..':'..m4..':'..m5..':'..m6
return username
end
else return pkt:hdr('chaddr')
end
end

С GPON никто не пробовал?
у меня ЗТЕ ц320 отдаёт серийник ОНУ вместо мака

содержимое пакета:
Circuit-ID SubOption 1, length 64: 0 0/0/0:0.0 ec1d.7f0c.3cb8/0/0/2/0/1/000000000000NGPN10000D0F GP
тот же скрипт разбирает все верно, вот только в биллинг указать в поле МАК NG:PN:10:00:0D:0F не выходит в карточке абона


было бы круто, если бы можно было указать туда не только мак.
некоторые свитчи в опцию парся свой мак и номер интерфейса, тоже было бы удобно


+1
Отвечен

в планах работа с серийниками на 12.2-12.3 версию

что-то пошло не так?)

делал кто то авторизацию по onu на eltex?

Насколько я слышал там работа по серийнику идет.


у нас это в 2.12.5 войдет.

ууууииииии!!!!!
запасаемся фейерверками!!))))

пост-продакшен тесты уже пройдены, так что войдет функционал в 2.12.5 

Сервис поддержки клиентов работает на платформе UserEcho