Child pages
  • Создание дополнительных типов серверов доступа
Skip to end of metadata
Go to start of metadata


В документе описывается создания дополнительного сервера доступа (Network Access Server - NAS) с его собственными правилами  авторизации и аккаунтинга.

Базовый модуль авторизации **Auth.pm** (Abills/mysql/Auth.pm).
Базовый модуль аккаунтинга **Acct.pm** (Abills/mysql/Acct.pm).

Авторизация


Если у Вас появилась необходимость поменять правила авторизации или аккаунтинга для системы можно просто создать дополнительный NAS и применять к нему Ваши собственные правила авторизации или аккаунтинга.
Для примера создадим новый NAS **ppp_test**


  * Для начала создадим модуль авторизации:


Abills/mysql/Test_auth.pm
  package Test_auth;
  #Test Auth module

  use strict;
  use parent 'dbcore';
  $VERSION = 7.00;

  my $db;
  my $CONF;
  my $debug=0;


  #****************************************
  # Init 
  #****************************************
  sub new {
    my $class = shift;
    ($db, $CONF) = @_;
    my $self = { };
    bless($self, $class);
    return $self;
  }

  #****************************************
  # Auth function
  #
  # auth($RAD, $NAS)
  #   $RAD - Request Rad pairs
  #
  #   $NAS - Nas information object
  #
  # Return $auth_code, Rad_pairs_hash_ref
  #   $auth_code 
  #       0 - Allow
  #       1 - Deny
  #****************************************
  sub auth {
    my $self = shift;
    my ($RAD, $NAS, $attr)=@_;

    #Response Rad pairs 
    my %RAD_PAIRS = (
      'Framed-IP-Address' => '192.168.111.10'
    );   

    return 0, \%RAD_PAIRS;
  }

  1  

Аккаунтинг


Модуль аккаунтинга можно взять уже имеющийся в системе и скопировать его в новый файл:

  # cd Abills/mysql/
  # cp Acct.pm Test_acct.pm

Открываем новые файлы и меняем названия пакетов:
**Test_acct.pm** в первой строке

  package Acct;

меняем на

  package Test_acct;

Включение новых модулей


После этого добавляем в config.pl

Описание сервера:

  $conf{nas_servers} = {
                         'test_nas' => 'PPP test NAS server'
                        };


Правила авторизации после строки %AUTH = ();

%AUTH = ();
$AUTH{test_nas} = 'Test_auth';


Правила аккаунтинга после строки %ACCT = ();

  %ACCT = ();
  $ACCT{test_nas} = 'Test_acct';


Все новый  NAS сервер создан

После этого можно вносить любые изменения в Ваши новые модули для авторизации или аккаунтинга

Сброс сессий


Для сброса сессий нового сервера доступа нужно добавить файл работы с сервером доступа в каталог /usr/abills/libexec/nas. Название файла должно совпадать с названием типа сервера доступа.

Пример файла обработки сброса сессии


test_nas.pm
#
# Example nas hangup
#

sub hangup_dell {
  my $self = shift;
  my ($NAS, $PORT, $attr) = @_;

  print "Hangup!!!!\n";

  return 0;
}

1

Тестирование RADIUS 


Атворизации


cd /usr/abills/libexec
./radtest.sh auth -rad

результат

Sent Access-Request Id 59 from 0.0.0.0:18393 to 127.0.0.1:1812 length 74
        User-Name = "test"
        User-Password = "123456"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1
        Message-Authenticator = 0x00
        Cleartext-Password = "123456"
Received Access-Accept Id 59 from 127.0.0.1:1812 to 0.0.0.0:18393 length 69
        Mikrotik-Rate-Limit = "64k"
        Session-Timeout = 1420276
        Mikrotik-Address-List = "CUSTOM_SPEED"
        Acct-Interim-Interval = 90
        Framed-IP-Address = 192.168.1.87


Акаунтинга


cd /usr/abills/libexec
./radtest.sh acct Start -rad


Тестирование с собственным файлом пар авторизации


auth.mikrotik
        Service-Type = Framed-User
        Framed-Protocol = PPP
        NAS-Port = 11
        NAS-Port-Type = Virtual
        User-Name = "test"
        Calling-Station-Id = "192.168.1.2"
        Called-Station-Id = "192.168.1.60"
        CHAP-Challenge = 0x8f9bfc69494cee7d4c96f775e4a8eae6
        CHAP-Password = 0x01d32129dcd05f58901364e1cb200fb47d
        NAS-Identifier = "MikroTik"
        NAS-IP-Address = 192.168.1.60


Запуск команды


./radtest.sh auth -rad -rad_file auth.mikrotik



Проверить получение запроса можно через дебаг радиуса


radiusd -X






  • No labels