[ mpx @ 07.11.2007. 22:24 ] @
Pozdrav,

Podigao sam freeradius server, malo prilagodio dialup admin mikrotiku, i ta kombinacija radi prilicno dobro.... ali, problem se javlja kada recimo mikrotik koji je udaljen od radius-a ostane bez struje, kada se taj mikrotik vrati u funkciju, onda svim korisnicima koji su prethodno bili ulogovani javlja da im je username i password vec aktivan. Tacnije, problem je u tome sto radius nije dobio informaciju o tome da su ti korisnici bili diskonektovani.
E sad, da li je moguce konfigurisati freeradius da recimo sa vremena na vreme proveri status konekcija, ili... da li postoji komanda za diskonektovanje online usera da bi se mogli rucno izbaciti.
I jos nesto.. cak i kad se restartuje racunar sa radiusom, i dalje baza sa prethodno ulogovanim korisnicima ostaje nepromenjena, tj ni to ne pomaze.

Nadam se da ste me razumeli,
Da li neko moze da mi pomogne??

Hvala
[ simor @ 17.03.2008. 15:47 ] @
Pretpostavljam da mislis na tzv "visece sesije", gde ti je u radacct tabeli za nekog korisnika AcctStopTime = "0000-00-00 00:00:00",
elem uz freeradius koliko se secam dolazi neka perl skripta checkrad.pl koja na osnovu prosledjenih parametara proverava na odredjenom
NAS-u (mikrotik) da li postoji aktivna sesija za odredjenog korisnika, cak ne vraca nikakav rezultat vec ga vadis sa "echo $?", ukoliko
to koristis pod linux-om.

Verzija te skripte koja je dolazila uz verziju 1.0.5 bila je prilicno jadno odradjena sto se tice MT-a, mogla je da proveri jedino jel navedeni
korisnik aktivan ili ne. Davno bese pa kasnije nisam proveravao. Secam se jedino da sam morao da iskoristim komandu:
"ppp active print terse" da bi dosao do session id-a za korisnika i svoju neku php skriptu koja je svakih 5 min proveravala i cistila bazu
od visecih sesija.

pozd
[ Schmidt @ 17.03.2008. 21:37 ] @
Prouchi koje sve atribute radius server mozhe poslati mikrotiku, posebno "Acct-Interim-Interval".

Taj atribut cje recji mikrotiku da se javi radiusu svakih n sekundi, za svaku pppoe sesiju. Na taj nachin nijedna konekcija ti necje biti mrtva, a najvishe shto mozhesh izgubiti je n sekundi konekcije. Program koji cje ti srediti (necje ih obrisati, samo cje ih zakljuchiti) eventualne zaostale sesije je radzap. Dolazi uz freeradius instalaciju.
[ simor @ 19.03.2008. 18:38 ] @
Evo, negde sam iskopao i modifikovani kod za checkrad skriptu u perlu koju sam ja koristio da cistim bazu od "visecih sesija". Ova modifikacija koristi telnet na NAS (MT) da proveri ko je sve ulogovan i koji je session-id, jer je taj podatak nemoguce izvuci preko snmp-a.

Code:
sub mikrotik_telnet {
  # Localize all variables first.
  my ($t, $login, $password);
  my (@fields, @output, $output, $username_seen, $user);

  return 2 unless (check_net_telnet());

  $terminalserver = $ARGV[1];
  $user = $ARGV[3];

  # Get login name and password for a certain NAS from $naspass.
  ($login, $password) = naspasswd($terminalserver, 1);
  return 2 if ($password eq "");

  # MikroTik routeros doesnt tell us to which port the user is connected
  # practically this would limit us to a simple only-one user limit for
  # this script to work properly.
  $t = new Net::Telnet (Timeout => 5,
                        Prompt => '//\[.*@.*\] > /');

  # Dont just exit when there is error
  $t->errmode('return');

  # Telnet to terminal server
  $t->open($terminalserver) or return 2;

  #Send login and password etc.
  $t->login(Name => $login,
            Password => $password,
  # We must detect if we are logged in from the login banner.
  # Because if routeros is with a free license the command
  # prompt dont come. Instead it waits us to press "Enter".
            Prompt => '/MikroTik/');

  # Just be sure that routeros isn't waiting for us to press "Enter"
  $t->print("");

  # Wait for the real prompt
  $t->waitfor('/\[.*@.*\] > /');

  # It is not possible to get the line numbers etc.
  # Thus we cant support if simultaneus-use is over 1
  # At least I was using pppoe so it wasnt possible.
  #$t->print('ppp active print column name detail');
  $t->print('ppp active print without-paging detail');

  # Somehow routeros echo'es our commands 2 times. We dont want to mix
  # this with the real command prompt.
  $t->waitfor('/\[.*@.*\] > ppp active print without-paging detail/');

  # Now lets get the list of online ppp users.
  ( $output ) = $t->waitfor('/\[.*@.*\] > /');

  # For debugging we can print the list to stdout
#  print $output;

  #Lets logout to make everybody happy.
  #If we close the connection without logging out then routeros
  #starts to complain after a while. Saying;
  #telnetd: All network ports in use.
  $t->print("quit");
  $t->close;

  #check for # of $user in output
  #the output includes only one = between name and username so we can
  #safely use it as a seperator.

#disabled until mikrotik starts to send newline after each line...
#  @output = $output;
#  foreach $line ( @output ) {
#    #remove newline
#    chomp $line;
#    #remove trailing whitespace
#    ($line = $line) =~ s/\s+$//;
#    if( $line =~ /name=/ ) {
#      print($line);
#      @fields = split( /=/, $line );
#      if( $fields[1] == "\"$user\"") {
#        $username_seen++;
#      }
#    }
#  }

  if( ($output =~ /name="$user"/)&&($output=~/session-id=$ARGV[4]/) ) {
    $username_seen++;
  }

  #lets return something
  if ($username_seen > 0) {
    return 1;
  } else {
    return 0;
  }
}



Znaci upotreba (npr):

checkrad mikrotik 192.168.0.10 14 simo 0x81600000

- "mikrotik" je tip NAS-a (sto se perla tice poziva se funkcija mikrotik_telnet)
- "192.168.0.10" ip adresa NAS-a na koji se skripta telnetuje i proverava da li postoji navedeni korisnik sa navedenim session-id-jem
- 14 je nas_port (skripta ga ne koristi pa moze da stoji ovde bilo sta, moze da se implementira)
- "simo" je user koga proveravamo
- "0x81600000" je session-id koji vadimo iz radacct tabele i proveravamo

i naravno uredno popunjen fajl naspasswd:

192.168.0.10 admin password

ovo se koristi za telnet, pa ne bi bilo lose kreirati neki read-only user na mt-u samo za ove potrebe...
[ Schmidt @ 20.03.2008. 21:57 ] @
@Simo:
nema potrebe za tom skriptom, prouchi radzap...