Next Pool

Модуль организации Diulup и VPN доступа
Ответить
uncleVALERA
Сообщения: 18
Зарегистрирован: Вт июн 02, 2015 6:51 am

Next Pool

Сообщение uncleVALERA » Вт июн 02, 2015 9:20 am

Приветствую!

Созданы два пула:
pool1 - с реальными адресами
pool2 - с серыми

в pool1 прописан в поле "Next Pool" id пула pool2

Но по исчерпании адресов из pool1 адреса из pool2 не выдаются, пользователи получают 0.0.0.0

Пулы привязаны к NAS'у.

~AsmodeuS~
Site Admin
Сообщения: 5646
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Next Pool

Сообщение ~AsmodeuS~ » Вт июн 02, 2015 10:25 am

uncleVALERA писал(а):Приветствую!

Созданы два пула:
pool1 - с реальными адресами
pool2 - с серыми

в pool1 прописан в поле "Next Pool" id пула pool2

Но по исчерпании адресов из pool1 адреса из pool2 не выдаются, пользователи получают 0.0.0.0

Пулы привязаны к NAS'у.
обновитесь к последнему снепшоту

uncleVALERA
Сообщения: 18
Зарегистрирован: Вт июн 02, 2015 6:51 am

Re: Next Pool

Сообщение uncleVALERA » Чт сен 03, 2015 5:47 pm

Здравствуйте!

Появилась аналогичная проблема, но она носит периодический характер (т.е. под одним и тем же пользователем адрес может выдаться с одного из двух пулов, а могут выдаться нули)
Проблема появилась после изменений в тарифах проведенных в вэб-интерфейсе. До этого все проработало 3 месяца.

Замечено, что при этом в таблице dv_calls появляются записи этих пользователе со статусом 11, которые висят там около минуты (субъективно)
где framed_ip_address может быть равен нулю а может и иметь реальное значение (при этом pptp имеет IP 0.0.0.0 ).

В общем теряюсь в догадках. Подскажите куда копать.

NAS - Mikrotik 6.30.2
FreeRADIUS Version 2.2.7

Билинг обновлял.

~AsmodeuS~
Site Admin
Сообщения: 5646
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Next Pool

Сообщение ~AsmodeuS~ » Пт сен 04, 2015 6:31 am

uncleVALERA писал(а):Здравствуйте!

Появилась аналогичная проблема, но она носит периодический характер (т.е. под одним и тем же пользователем адрес может выдаться с одного из двух пулов, а могут выдаться нули)
Проблема появилась после изменений в тарифах проведенных в вэб-интерфейсе. До этого все проработало 3 месяца.

Замечено, что при этом в таблице dv_calls появляются записи этих пользователе со статусом 11, которые висят там около минуты (субъективно)
где framed_ip_address может быть равен нулю а может и иметь реальное значение (при этом pptp имеет IP 0.0.0.0 ).

В общем теряюсь в догадках. Подскажите куда копать.

NAS - Mikrotik 6.30.2
FreeRADIUS Version 2.2.7

Билинг обновлял.
11 - это выделение ип после него сразу же должен идти аккаунтинг

если такие висят больше минуты нужно смотреть почему не приходит аккаунтинг

список статусов

http://abills.net.ua/wiki/doku.php/abil ... :dv_online

uncleVALERA
Сообщения: 18
Зарегистрирован: Вт июн 02, 2015 6:51 am

Re: Next Pool

Сообщение uncleVALERA » Пт сен 04, 2015 8:51 am

Собственно по этим статусам и ориентировался.

В логах радиуса обнаружил вот такое:

Код: Выделить всё

Use of uninitialized value $v in concatenation (.) or string at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1646.
Cleartext-Password := "1234"Cleartext-Password := "4321"Use of uninitialized value $v in concatenation (.) or string at /usr/abills/libexec/../Abills/mysql/A
uth.pm line 1646.
Use of uninitialized value $v in concatenation (.) or string at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1646.
Fri Sep  4 11:36:51 2015 : Debug: Waking up in 0.2 seconds.
Fri Sep  4 11:36:51 2015 : Debug: Thread 33 got semaphore
Fri Sep  4 11:36:51 2015 : Debug: Thread 33 handling request 8991, (236 handled so far)
Fri Sep  4 11:36:51 2015 : Info: # Executing section authorize from file /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
Fri Sep  4 11:36:51 2015 : Info: +group authorize {
Fri Sep  4 11:36:51 2015 : Info: ++[preprocess] = ok
Fri Sep  4 11:36:51 2015 : Info: [mschap] Found MS-CHAP attributes.  Setting 'Auth-Type  = mschap'
Fri Sep  4 11:36:51 2015 : Info: ++[mschap] = ok
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair NAS-Port-Type = Virtual
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair NAS-Port = 15753224
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Service-Type = Framed-User
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair NAS-Identifier = NAS
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair MS-CHAP-Challenge = 0x13ffcb2c6a453b17c10552f3a5210d67
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Called-Station-Id = 192.168.200.2
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair User-Name = vpn210
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Calling-Station-Id = 192.168.109.18
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Framed-Protocol = PPP
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair MS-CHAP2-Response = 0x01008d3f7939508baa73c73dc7bb39eebf8f000000000000000014190c766bb7f09ecf6d3e7f6f02
2b2fecbac80c9e00f384
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair NAS-IP-Address = 192.168.225.2
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Acct-Interim-Interval = 300
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Mikrotik-Rate-Limit = 1048k/3144k
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Session-Timeout = 2290990
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Cleartext-Password = 2222
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Auth-Type = MSCHAP
Fri Sep  4 11:36:51 2015 : Info: ++[perl] = ok
Fri Sep  4 11:36:51 2015 : Info: [auth_log]     expand: %{Packet-Src-IP-Address} -> 192.168.225.2
Fri Sep  4 11:36:51 2015 : Info: [auth_log]     expand: /var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/auth-detail-%Y%m%
d -> /var/log/freeradius/radacct/192.168.225.2/auth-detail-20150904
Fri Sep  4 11:36:51 2015 : Info: [auth_log] /var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/auth-detail-%Y%m%d expands to
 /var/log/freeradius/radacct/192.168.225.2/auth-detail-20150904
Fri Sep  4 11:36:51 2015 : Info: [auth_log]     expand: %t -> Fri Sep  4 11:36:51 2015
Fri Sep  4 11:36:51 2015 : Info: ++[auth_log] = ok
Fri Sep  4 11:36:51 2015 : Info: +} # group authorize = ok
Fri Sep  4 11:36:51 2015 : Info: Found Auth-Type = MSCHAP
Fri Sep  4 11:36:51 2015 : Info: # Executing group from file /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
Fri Sep  4 11:36:51 2015 : Info: +group MS-CHAP {
Fri Sep  4 11:36:51 2015 : Info: [mschap] Creating challenge hash with username: vpn210
Fri Sep  4 11:36:51 2015 : Info: [mschap] Client is using MS-CHAPv2 for vpn210, we need NT-Password
Fri Sep  4 11:36:51 2015 : Info: [mschap] adding MS-CHAPv2 MPPE keys
Fri Sep  4 11:36:51 2015 : Info: ++[mschap] = ok
Fri Sep  4 11:36:51 2015 : Info: +} # group MS-CHAP = ok
Fri Sep  4 11:36:51 2015 : Info: # Executing section post-auth from file /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
Fri Sep  4 11:36:51 2015 : Info: +group post-auth {
Fri Sep  4 11:36:51 2015 : Info: [reply_log]    expand: %{Packet-Src-IP-Address} -> 192.168.225.2
Fri Sep  4 11:36:51 2015 : Info: [reply_log]    expand: /var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/reply-detail-%Y%m
%d -> /var/log/freeradius/radacct/192.168.225.2/reply-detail-20150904
Fri Sep  4 11:36:51 2015 : Info: [reply_log] /var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/reply-detail-%Y%m%d expands
to /var/log/freeradius/radacct/192.168.225.2/reply-detail-20150904
Fri Sep  4 11:36:51 2015 : Info: [reply_log]    expand: %t -> Fri Sep  4 11:36:51 2015
Fri Sep  4 11:36:51 2015 : Info: ++[reply_log] = ok
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair NAS-Port-Type = Virtual
Fri Sep  4 11:36:51 2015 : Info: +} # group post-auth = ok
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair NAS-Port = 15753224
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Service-Type = Framed-User
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair NAS-Identifier = NAS
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Called-Station-Id = 192.168.200.2
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair User-Name = vpn210
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Acct-Delay-Time = 0
Fri Sep  4 11:36:51 2015 : Info: Finished request 8991.
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: ERROR: Failed to create pair Event-Timestamp = Сен  4 2015 11:36:51 MSK
Fri Sep  4 11:36:51 2015 : Debug: Going to the next request
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Calling-Station-Id = 192.168.109.18
Fri Sep  4 11:36:51 2015 : Debug: Thread 33 waiting to be assigned a request
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Acct-Session-Id = 81705f0d
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Acct-Authentic = RADIUS
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Framed-Protocol = PPP
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Framed-IP-Address = 0.0.0.0
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair NAS-IP-Address = 192.168.225.2
Fri Sep  4 11:36:51 2015 : Debug: rlm_perl: Added pair Acct-Status-Type = Start
Fri Sep  4 11:36:51 2015 : Info: ++[perl] = ok
Fri Sep  4 11:36:51 2015 : Info: +} # group accounting = ok
Fri Sep  4 11:36:51 2015 : Info: Finished request 8992.
Fri Sep  4 11:36:51 2015 : Debug: Going to the next request
Fri Sep  4 11:36:51 2015 : Debug: Thread 37 waiting to be assigned a request
Fri Sep  4 11:36:51 2015 : Debug: Waking up in 0.2 seconds.
Т.е. при авторизации не формируется Framed-IP-Address
соответственно при старте получаем Framed-IP-Address = 0.0.0.0

Не могут ли это быть блокировки в базе?

Ну и конечно же смущает

Код: Выделить всё

Use of uninitialized value $v in concatenation (.) or string at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1646.
Cleartext-Password := "1234"Cleartext-Password := "4321"Use of uninitialized value $v in concatenation (.) or string at /usr/abills/libexec/../Abills/mysql/A
uth.pm line 1646.
Use of uninitialized value $v in concatenation (.) or string at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1646.

uncleVALERA
Сообщения: 18
Зарегистрирован: Вт июн 02, 2015 6:51 am

Re: Next Pool

Сообщение uncleVALERA » Пт сен 04, 2015 9:40 am

Прошу прощения
в это строчке я добавлял отладку:

Код: Выделить всё

  while(my ($k, $v) = each %insert_hash) {
`echo "$self->{USER_NAME} : $k, $v  " >> /tmp/auth.log`;
    if($k eq 'framed_ip_address' && $v) {

uncleVALERA
Сообщения: 18
Зарегистрирован: Вт июн 02, 2015 6:51 am

Re: Next Pool

Сообщение uncleVALERA » Пт сен 04, 2015 10:18 am

Дальнейшие исследования показали, что функция get_ip возвращает 0 (напомню, что проблема проявляет себя не при каждом подключении)

Код: Выделить всё

  # Return radius attr
  if ($self->{IP} ne '0') {
    $RAD_PAIRS->{'Framed-IP-Address'} = "$self->{IP}";
    if (! $self->{REASSIGN}) {
      $self->online_add({ %$attr,.
                          NAS_ID            => $NAS->{NAS_ID},
                          FRAMED_IP_ADDRESS => "INET_ATON('$self->{IP}')",
                          NAS_IP_ADDRESS    => $RAD->{NAS_IP_ADDRESS},
                        });
    }
    delete $self->{REASSIGN};
  }
  else {
    my $ip = $self->get_ip($NAS->{NAS_ID}, "$RAD->{NAS_IP_ADDRESS}", { TP_IPPOOL => $self->{TP_IPPOOL} });
`echo " -- get_ip  : $ip  " >> /tmp/auth.log`;
    if ($ip eq '-1') {
      $RAD_PAIRS->{'Reply-Message'} = "Rejected! There is no free IPs in address pools (USED: $self->{USED_IPS})";
      return 1, $RAD_PAIRS;
    }
    elsif ($ip eq '0') {
      #$RAD_PAIRS->{'Reply-Message'}="$self->{errstr} ($NAS->{NAS_ID})";
      #return 1, $RAD_PAIRS;
$RAD_PAIRS->{'Framed-IP-Address'} = "1.1.1.1";
    }
    else {
      $RAD_PAIRS->{'Framed-IP-Address'} = "$ip";
    }
  }

Таким образом мы попадаем в условие elsif ($ip eq '0') {
Копаем дальше

uncleVALERA
Сообщения: 18
Зарегистрирован: Вт июн 02, 2015 6:51 am

Re: Next Pool

Сообщение uncleVALERA » Пт сен 04, 2015 12:00 pm

В общем проблема все таки возникает тогда, когда первый пул занят и делается попытка получить адрес из второго пула.
Причем иногда адрес все таки выдаются.
Оба пула привязаны к серверу доступа.

~AsmodeuS~
Site Admin
Сообщения: 5646
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Next Pool

Сообщение ~AsmodeuS~ » Пт сен 04, 2015 12:17 pm

нужно поставить дебаг вот тут

Код: Выделить всё


    if($next_pool_id) {
    	$self->get_ip($nas_num, $nas_ip, { TP_IPPOOL => $next_pool_id });
    }



и тогда станет ясно появляется или нет условие перехода по пулам

uncleVALERA
Сообщения: 18
Зарегистрирован: Вт июн 02, 2015 6:51 am

Re: Next Pool

Сообщение uncleVALERA » Пт сен 04, 2015 12:46 pm

Как раз добрался до этого места.
Условия соблюдаются...
Однако :

Код: Выделить всё

    if($next_pool_id) {
       my $tmp123 = $self->get_ip($nas_num, $nas_ip, { TP_IPPOOL => $next_pool_id });
       return $tmp123;
    }
И все работает.
В противном случае доходим до конца функции и получаем return 0;
Все верно?

~AsmodeuS~
Site Admin
Сообщения: 5646
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Next Pool

Сообщение ~AsmodeuS~ » Пт сен 04, 2015 5:01 pm

uncleVALERA писал(а):Как раз добрался до этого места.
Условия соблюдаются...
Однако :

Код: Выделить всё

    if($next_pool_id) {
       my $tmp123 = $self->get_ip($nas_num, $nas_ip, { TP_IPPOOL => $next_pool_id });
       return $tmp123;
    }
И все работает.
В противном случае доходим до конца функции и получаем return 0;
Все верно?

да все правильно
странно куда возвраты делись

Ответить