[ITNOG] sqlippool freeradius

Sergio Chiesa sergio.chiesa@irideos.it
Ven 23 Set 2022 16:37:11 CEST


Ciao Matteo,

> Sì sono sicuro. Per ordine inverso intendo che arriva prima lo start 
> della nuova connessione e poi lo stop della vecchia. L'ho osservato, 
> fatto debug lato radius e dump traffico di rete. Si tratta di 
> millisecondi ma si genera questo effetto:
> 1) Access_Request -> allocate_find (find the same ip to the same user) + allocate_update (assign same ip, renew lease)
> 2) Accounting-Request Stop -> allocate_free (clear ip)
a me non torna il perché alla access-req ridia lo stesso indirizzo, non 
è in uso dalla sessione precedente?
L'unica ipotesi è che lo stop sia un duplicato di un primo, che è 
arrivato ed è stato processato in ordine, prima della Access-Req, 
altrimenti l'ip sarebbe in uso. Magari si perde l'ack tra il radius ed 
il nas. Poco male è una cosa che può succedere e deve essere prevista.

Per ovviare devi fare come dice Brian: aggiungere l'Acct-Session-Id 
all'equazione, assicurandoti che sia univoco e che sia inviato anche 
nell'Access-Request.

All'arrivo di uno Stop controlli che l'IP nel pool sia associato proprio 
allo stesso Session-Id, se è diverso non va liberato.

Non conosco bene l'implementazione del freeradius, l'ho vista al volo, 
dovrebbe bastare aggiungere l'Acct-Session-Id nella pool_key per la v3, 
oppure sia il Nas-IP-Address che il Session-ID nell'owner per la v4.

In alternativa si può aggiustare sul NAS la NAS-Port, io ad esempio su 
IOS-XE uso:

radius-server attribute nas-port format e SSSSAPVVVVVVVVVVUUUUUUUUUUUUUUUU

ossia codifico anche il session-id nei bit meno significativi (UU...UU), 
già questo basterebbe con la pool_key di default. Ma funzionerebbe solo 
con la v3, per la v4 va aggiunto anche il Nas-IP-Address/Identifier, 
perché non viene controllato nella update_free.


Nell'altro thread qualcuno cita anche l'uso dell'orario di invio del 
pacchetto (che è ricavabile dall'ora di ricezione meno 
l'Acct-Delay-Time) ma lo vedo più macchinoso e soprattutto meno formale: 
il session-id, se implementato correttamente dal NAS, è l'unica vera 
chiave per collegare correttamente Auth, Start, Interim e Stop ad una 
sessione.

RFC2866
> 5.5 <https://www.rfc-editor.org/rfc/rfc2866.html#section-5.5>. 
> Acct-Session-Id
>
>     Description
>
>        This attribute is a unique Accounting ID to make it easy to match
>        start and stop records in a log file.  The start and stop records
>        for a given session MUST have the same Acct-Session-Id.  An
>        Accounting-Request packet MUST have an Acct-Session-Id.  An
>        *Access-Request packet MAY*  have an Acct-Session-Id; if it does,
>        then the NAS MUST use the same Acct-Session-Id in the Accounting-
>        Request packets for that session.


Sergioc.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.itnog.it/pipermail/itnog/attachments/20220923/53df08ef/attachment.htm>


Maggiori informazioni sulla lista itnog