Proxy / reply translation

Alan Buxey alan.buxey at gmail.com
Sat Nov 11 20:39:05 CET 2017


Best test would be to have a remote radius server sending back replies like
you will have as using some local stuff added via SQL isn't going to be the
same , goes through different sections,

alan

On 11 Nov 2017 7:33 pm, "Richard J Palmer" <richard at merula.net> wrote:

> HI Alan
>
> I will be using it for Proxy. However I was trying to test / use this
> locally as well while debugging the server / code.
>
> Ideally it would be nice to allow both options to work but I am flexible
> if it's easier just to use this for requests that are proxied
>
> Thanks
>
> Richard
>
>
>
>
> On Saturday 11/11/2017 at 7:14 pm, Alan Buxey  wrote:
>
>> You say you need to modify a reply from their radius server - this will be
>> in the post-proxy section?
>>
>> Also  if (&reply:Cisco-AVPair ...  ?
>>
>> alan
>>
>>
>> On 11 Nov 2017 6:37 pm, "Richard J Palmer" <richard at merula.net> wrote:
>>
>> Hi
>>
>> Sorry for the delay. I am getting close with this I think... BUT something
>> seems to be slightly wrong.
>>
>> Happy to post a full log as needed - BUT I hope the bit I need is here:
>>
>> (2) sql1:   Framed-Route = ""
>> (2) sql1:   Framed-IP-Address = 1.2.3.1
>> (2) sql1:   Framed-IP-Netmask = 255.255.255.248
>> (2) sql1:   Cisco-AVPair += "ip:route=1.2.3.0 255.255.255.248"
>> (2) sql1:   Filter-Id = "P"
>> (2) sql1:   Chargeable-User-Identity = "richard2"
>>
>> <group SQL statements>
>>
>> (2) sql1: Group "Hotspot": Merging reply items
>> (2) sql1:   Acct-Interim-Interval = 600
>>
>> (2)       [sql1] = ok
>> (2)     } # redundant = ok
>> (2)     policy rewrite_routes {
>> (2)       if (&Cisco-AVPair =~ /ip:route=([^ ]+) ([^ ]+)/) {
>> (2)       ERROR: Failed retrieving values required to evaluate condition
>> (2)     } # policy rewrite_routes = ok
>>
>> (2) Login OK: [richard2] (from client local port 1)
>> (2) Sent Access-Accept Id 69 from 127.0.0.1:1645 to 127.0.0.1:48919
>> length 0
>> (2)   Framed-IP-Address = 1.2.3.1
>> (2)   Framed-IP-Netmask = 255.255.255.248
>> (2)   Cisco-AVPair = "ip:route=1.2.3.0 255.255.255.248"
>> (2)   Filter-Id = "P"
>> (2)   Chargeable-User-Identity = "richard2"
>> (2)   Acct-Interim-Interval = 600
>> (2) Finished request
>>
>>
>> In my authorise section I have placed:
>>
>> redundant {
>>          sql1
>>          sql2
>>          handled
>>      }
>> #     -sql
>>      rewrite_routes
>>
>> (The other sections are there - this is just to show where what I hope is
>> relevant. The code itself is based on the code provided below
>>
>> rewrite_routes  {
>>
>> if (&Cisco-AVPair =~ /ip:route=([^ ]+) ([^ ]+)/) {
>> switch "%{2}" {
>>      case "255.255.255.255" {
>>          update reply {
>>            Framed-Route = "%{1}/32"
>>        }
>>      }
>>      case "255.255.255.254" {
>>          update reply {
>>            Framed-Route = "%{1}/31"
>>          }
>>      }
>>
>>
>> and so on (it is in the policy.d folder)
>>
>> I am aware the key to this is the error
>>
>> (2)       ERROR: Failed retrieving values required to evaluate condition
>>
>> What I am unclear about is why this is failing / and what I have done
>> wrong
>> here to cause this. If you can give me one more pointer here I'd
>> appreciate
>> it
>>
>> More than happy to send any of the extra config or log as needed
>>
>> Thanks in advance
>>
>> Richard
>>
>>
>>
>>
>>
>> On Thursday 09/11/2017 at 1:35 pm, Alan DeKok  wrote:
>>
>>
>>> On Nov 9, 2017, at 8:19 AM, Richard J Palmer <richard at merula.net> wrote:
>>>
>>>
>>>>
>>>> This is where my skills are not great (regex) most other areas I can
>>>> work
>>>> with. Ultimately I am happy to pay someone to help write the little bit
>>>> of
>>>> code that does this. I do need to cope with Netmasks from  /32 to /24
>>>> so a
>>>> few switch cases.
>>>>
>>>>
>>>        It shouldn't be difficult.
>>>
>>>
>>>
>>>> Alternatively if someone can provide a few pointers on that bit I can
>>>> probably build from there.
>>>>
>>>>
>>>        If you have:
>>>
>>>
>>>
>>>>
>>>>
>>>>>
>>>>>
>>>>>>                Cisco-AVPair = "ip:route=1.2.3.1 255.255.255.240"
>>>>>>
>>>>>>
>>>>>        Step 1, split it into pieces:
>>>
>>> if (&Cisco-AVPair =~ /ip:route=([^ ]+) ([^ ]+)/) {
>>>
>>>        This matches the "ip:route" prefix.  It then matches non-space
>>> data,
>>> then a space, and more non-space data.  As per the FR documentation, the
>>> first match goes into %{1}, and the second into %{2}.
>>>
>>>        As there are only a limited number of net masks, you can expand
>>> the net
>>> mask, and switch over it (inside of the "if" block from above)
>>>
>>> switch "%{2}" {
>>> case "255.255.255.255" {
>>> update reply {
>>> Framed-Route = "%{1}/32"
>>> }
>>> }
>>>
>>> case "255.255.255.254" {
>>> update reply {
>>> Framed-Route = "%{1}/31"
>>> }
>>> }
>>>
>>> case "255.255.255.252" {
>>> update reply {
>>> Framed-Route = "%{1}/30"
>>> }
>>> }
>>>
>>> ... etc...
>>>
>>> # and the "catch all" case, just mash it to /28
>>> case {
>>> update reply {
>>> Framed-Route = "%{1}/28"
>>> }
>>> }
>>> }
>>>
>>>        A little verbose, but it should work.
>>>
>>>        Alan DeKok.
>>>
>>>
>>> -
>>> List info/subscribe/unsubscribe? See http://www.freeradius.org/list
>>> /users.html
>>>
>>>
>> -
>> List info/subscribe/unsubscribe? See http://www.freeradius.org/list
>> /users.html
>> -
>> List info/subscribe/unsubscribe? See http://www.freeradius.org/list
>> /users.html
>>
>
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list
> /users.html


More information about the Freeradius-Users mailing list