+1
Отвечен

Options 82 Gpon

Александр Сергеевич 3 года назад обновлен mikbill (CEO) 3 года назад 3

Настраиваю опцию 82.

Схема включения. Абон, OLT ZTE который поднимает QinQ и влаживает серийный номер ONU в Options 82. в качестве NAS выступает Accel-ppp с настройкой IPoE

Столкнулся с проблемой. При получении dhcp запроса с опцией 82 аццел не отправляет запрос на сервер mikbill.

Подскажите куда копать.

Модуль IPOE и Radius в конфиге accel:


[ipoe]
verbose=1
username=lua:opt82_v2
lua-file=/etc/accel-ppp.lua
lease-time=300
renew-time=300
max-lease-time=3600
ifcfg=1
shared=1
mode=L2
start=dhcpv4
attr-dhcp-client-ip=Framed-IP-Address
attr-dhcp-router-ip=DHCP-Router-IP-Address
attr-dhcp-mask=DHCP-Mask
attr-dhcp-opt82=DHCP-Option82
attr-dhcp-opt82-remote-id=DHCP-Agent-Remote-Id
attr-dhcp-opt82-circuit-id=DHCP-Agent-Circuit-Id
attr-l4-redirect=L4-Redirect
attr-l4-redirect-ipset=L4-Redirect-ipset
gw-ip-address=212.8.51.17/29
vlan-mon=re:eth1.4000
vlan-timeout=60
vlan-name=%I.%N
interface=re:eth1.4000
interface=re:eth1.4000.[0-9][0-9][0-9][0-9]
interface=re:eth1.4000.[0-3][0-9][0-9]

[radius]
dictionary=/usr/local/share/accel-ppp/radius/dictionary
nas-identifier=NAS1
nas-ip-address=212.8.51.8
server=212.8.51.7,secret,auth-port=1812,acct-port=1813,req-limit=50,fail-timeout=0,max-fail=10,weight=1
dae-server=0.0.0.0:3799,secret
verbose=1
timeout=3
max-try=3
acct-delay-time=0


Луафайл:



#!lua
function macuser(pkt)
        return pkt:hdr('chaddr')
end
function opt82_v1(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
function opt82_v2(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



При этом в логах accelа при попытке подключиться:


[2017-09-02 15:37:58]:  info: : recv [DHCPv4 Discover xid=5783a66a chaddr=b0:48:7a:e7:fe:54 <Message-Type Discover> <Max-Message-Size 1024> <Client-ID 01b0487ae7fe54> <Host-Name TL-WR1043ND> <Vendor-Class 4d53465420352e30> <Request-List Subnet,Router,DNS,Domain-Name,Route,Vendor-Specific,44,46,47,Classless-Route,249> <Relay-Agent {Agent-Circuit-ID 0 0/0/0:0.0 ec1d.7f0a.d9e5/0/0/17/0/6/000000000000ALCLF259ACC7 GP} {Agent-Remote-ID }>]
[2017-09-02 15:37:58]:  info: ipoe0: create interface ipoe0 parent eth1.4000.105
[2017-09-02 15:37:58]:  warn: ipoe0: authentication failed
[2017-09-02 15:37:58]: debug: ipoe0: terminate
[2017-09-02 15:37:58]:  info: ipoe0: ipoe: session finished



Судя по TCPDUMP то аццел не отправляет запрос на микбил. Там ни одного пакета в этот момент.

Словари проверял. При отключенной опции 82 запросы уходят на биллинг и биллинг отвечает.

Прошу совета, куда копать что можно предпринять? Спасибо.




Проблема была в участке конфиге:

attr-dhcp-opt82=DHCP-Option82
attr-dhcp-opt82-remote-id=DHCP-Agent-Remote-Id
attr-dhcp-opt82-circuit-id=DHCP-Agent-Circuit-Id

Не верный синтаксис переменных. Нужно чтоб были как в словаре.

#attr-dhcp-opt82=DHCP-Option82
attr-dhcp-opt82-remote-id=AccelRemoteId
attr-dhcp-opt82-circuit-id=AccelCircuitId


С"attr-dhcp-opt82=DHCP-Option82" не работает. В переменной, которая должна хранить данные в конце не понятный символ.

И в микбиле у абона статус "Офлайн" но адрес и шейпер он получает согласно настройкам его учетной записи. 


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