On Mon, 3 Jul 2000, Hugh Irvine wrote:
> Radiator should only try to directly query the NAS if you are enforcing strict
> simultaneous use with a NasType set for your Client clauses. If you don't have
> a NasType set, it won't be queried.
The funny part here is it's querying NASes that _aren't_ in my client
list. It's querying a NAS to which one of my users is logged in but that
NAS talks is talking to a RADIUS server one or more "proxy hops" away.
> And when you mention stuck sessions, are these really stuck on the NAS, or are
> they simply remnants in the session database?
They're not stuck on the NASes, just in my session database. It primarily
seems to be happening to users who come in to the numbers where the
authentication goes through another RADIUS server that's proxying from
me. I see very few happening on my numbers,
> It would be useful to see a copy of your configuration file (no secrets)
> together with an example trace 4 debug showing what is happening.
I'l have to catch the trace sometime today, but I've started by attaching
my radius.cfg. Beware, it's big and hairy, mostly owing to having to sort
out classes of service based only on packet contents (such as
distinguishing Merit calls from everything else by looking for a
Huntgroup-Name attribute). The MARVIN stuff is a custom auth module that
talks to our proprietary MySQL billing and provisioning system. It
shouldn't be causing any problems since it's only doing authentications
and not logging or session management.
> BTW - the latest version of Radiator is 2.16.1.
Yep I noticed that after I sent my letter...I've been neglecting to keep
up with the list for the past three or four months. I'll have to install a
test copy around here and validate the MARVIN module with it so I can
deploy it.
--
Senior Systems Engineer | "Where are we going, and what am I doing in
BigNet, Inc. | this handbasket?"
Phone: 248-771-1261 | - Paraphrased from various people's .sigs
Fax: 248-771-1269 |
LogDir /var/log/radius
DbDir /usr/local/etc/raddb
Trace 3
# We'll use the official IANA assignments
AuthPort 1812
AcctPort 1813
# Skip S23 on Portmasters since it's the D channel on PRIs.
LivingstonOffs 22
LivingstonHole 1
# Default local client
<Client localhost>
Secret xxxxxxx
DupInterval 0
DefaultRealm mich.com
</Client>
# Pull the rest of the client list from the SQL server
<ClientListSQL>
DBSource DBI:mysql:xxxx:xxxxx.xx.xx
DBUsername xxxx
DBAuth xxxx
GetClientQuery SELECT HIGH_PRIORITY
\
NASIdentifier,SharedSecret,NULL,NULL,DefaultRealm,NASType, \
SNMPCommunity, NULL,NULL,NULL,NULL,NULL
\
FROM RadiatorClients
</ClientList>
# Keep the session list in the SQL server
<SessionDatabase SQL>
DBSource DBI:mysql:xxxx:xxxxx.xx.xx
DBUsername xxxx
DBAuth xxxx
AddQuery INSERT INTO RadiatorSessions
\
(UserName, NASIdentifier, NASPort, AcctSessionID,
When, FramedIPAddress, \
PortType, ServiceType)
\
VALUES
\
('%n', '%N', '%{NAS-Port}', '%{Acct-Session-Id}',
%{Timestamp}, \
'%{Framed-IP-Address}', '%{NAS-Port-Type}',
'%{Service-Type}')
DeleteQuery DELETE FROM RadiatorSessions
\
WHERE UserName = '%n' AND NASIdentifier = '%N' AND NASPort =
'%{NAS-Port}'
ClearNasQuery DELETE FROM RadiatorSessions WHERE NASIdentifier = '%N'
CountQuery SELECT HIGH_PRIORITY
\
NASIdentifier,NASPort,AcctSessionID
\
FROM RadiatorSessions WHERE UserName = '%n'
</SessionDatabase>
# Authentication definition for BigNet Standard service
<AuthBy MARVIN>
Identifier BigNetStandard
DBSource DBI:mysql:xxxx:xxxxx.xx.xx
DBUsername xxxx
DBAuth xxxx
ServiceCode 0
</AuthBy>
# Authentication definition for BigNet Toll-Free Service.
<AuthBy MARVIN>
Identifier BigNetTollFree
DBSource DBI:mysql:xxxx:xxxxx.xx.xx
DBUsername xxxx
DBAuth xxxx
ServiceCode 1
</AuthBy>
# Authentication definition for Merit Standard Service
<AuthBy MARVIN>
Identifier MeritStandard
DBSource DBI:mysql:xxxx:xxxxx.xx.xx
DBUsername xxxx
DBAuth xxxx
ServiceCode 100
</AuthBy>
# Authentication definition for Merit Global Service
<AuthBy MARVIN>
Identifier MeritGlobalService
DBSource DBI:mysql:xxxx:xxxxx.xx.xx
DBUsername xxxx
DBAuth xxxx
ServiceCode 102
</AuthBy>
# Authentication definition for logging to the SQL database
<AuthBy SQL>
Identifier LogToSQL
DBSource DBI:mysql:xxxx:xxxxx.xx.xx
DBUsername xxxx
DBAuth xxxx
AuthSelect
AccountingTable RadiatorDaily
AcctColumnDef UserName, User-Name
AcctColumnDef When, Timestamp, integer
AcctColumnDef AcctStatusType, Acct-Status-Type, integer
AcctColumnDef AcctDelayTime, Acct-Delay-Time, integer
AcctColumnDef AcctInputOctets, Acct-Input-Octets, integer
AcctColumnDef AcctOutputOctets, Acct-Output-Octets, integer
AcctColumnDef AcctSessionID, Acct-Session-Id
AcctColumnDef AcctSessionTime, Acct-Session-Time, integer
AcctColumnDef AcctTerminateCause, Acct-Terminate-Cause, integer
AcctColumnDef NASIPAddress, NAS-IP-Address
AcctColumnDef NASPort, NAS-Port, integer
AcctColumnDef PortType, Port-Type, integer
AcctColumnDef ServiceType, Service-Type, integer
AcctColumnDef FramedProtocol, Framed-Protocol, integer
AcctColumnDef FramedIPAddress, Framed-IP-Address
AcctColumnDef AscendDataRate, Ascend-Data-Rate, integer
AcctColumnDef ConnectInfo, Connect-Info
AcctColumnDef Huntgroup, Huntgroup-Name
AcctColumnDef Ownership, Ownership, integer
AcctColumnDef CallingStationID, Calling-Station-Id
AcctColumnDef CalledStationID, Called-Station-Id
</AuthBy>
# Island Connection
<AuthBy RADIUS>
Identifier IslandConnection
Host 1.1.1.1
Secret xxxxxxx
AuthPort 1645
AcctPort 1646
</AuthBy>
# Legacy authentication definitions
<AuthBy RADIUS>
Identifier OldNorthLink
Host xxxxxxx.xxx.xx
Secret xxxxxxx
AuthPort 1812
AcctPort 1813
</AuthBy>
# Authentication for the MichTel toll-free numbers. These show up
# as called to a specific Called-Station-Id.
<Handler Called-Station-Id = 7711112, Realm = northlink.net>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy BigNetTollFree
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Called-Station-Id = 7711112, Realm = benzie.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy BigNetTollFree
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Called-Station-Id = 7711112, Realm = straitsarea.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy BigNetTollFree
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Called-Station-Id = 7711112, Realm = galsys.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy BigNetTollFree
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Called-Station-Id = 7711112>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy BigNetTollFree
</AuthBy>
</Handler>
# Authentication for the Merit Global Service numbers. These show up
# with a specific huntgroup name.
<Handler Huntgroup-Name = merit-global-service, Realm = northlink.net>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy MeritGlobalService
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Huntgroup-Name = merit-global-service, Realm = benzie.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy MeritGlobalService
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Huntgroup-Name = merit-global-service, Realm = straitsarea.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy MeritGlobalService
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Huntgroup-Name = merit-global-service, Realm = galsys.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy MeritGlobalService
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Huntgroup-Name = merit-global-service>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy MeritGlobalService
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route,Token
</AuthBy>
</Handler>
# Authentication for BigNet Standard Service. We differentiate this from
# Merit Standard service by the lack of a realm name.
<Handler Huntgroup-Name = , Realm = islandconnection.net>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy IslandConnection
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Realm>
<Handler Huntgroup-Name = , Realm = northlink.net>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy OldNorthLink
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Realm>
<Handler Huntgroup-Name = , Realm = benzie.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy OldNorthLink
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Realm>
<Handler Huntgroup-Name = , Realm = straitsarea.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy OldNorthLink
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Realm>
<Handler Huntgroup-Name = , Realm = galsys.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy OldNorthLink
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Realm>
<Handler Huntgroup-Name = >
PostAuthHook file:"%D/tracking.pl"
PasswordLogFileName %L/password.log
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy BigNetStandard
</AuthBy>
</Realm>
# Finally, here is the authentication for Merit Standard Service.
# It should be matched only if the huntgroup name is present,
# and it isn't the MGS huntgroup, and the called station ID isn't
# the toll-free number.
<Handler Realm = northlink.net>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy OldNorthLink
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Realm = benzie.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy OldNorthLink
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Realm = straitsarea.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy OldNorthLink
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler Realm = galsys.com>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy OldNorthLink
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>
<Handler>
PostAuthHook file:"%D/tracking.pl"
<AuthBy GROUP>
AuthByPolicy ContinueUntilAccept
AuthBy LogToSQL
AuthBy MeritStandard
StripFromReply Framed-IP-Address,Framed-IP-Netmask,Framed-Route
</AuthBy>
</Handler>