[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