Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Исправление взаимодействия CaptivePortal c Radius`ом

    Scheduled Pinned Locked Moved Russian
    8 Posts 3 Posters 3.0k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • V
      vlad
      last edited by

      Доброго дня!
      Может ли кто-то из знатоков php мне помочь?
      Ситуация такая:

      1. для доступа клиентов используется связка CaptivePortal с радиус-авторизацией
      2. радиус (и сам биллинг) находятся на другой машине.
      3. авторизация проходит успешно.
      4. настройки аккаунтинга на CaptivePortal:
      • send RADIUS accounting packet
      • reauthenticate connected users every minute
      • stop/start accounting
      • RADUIS Type - cisco
        Суть проблемы - значение в поле  Acct-Session-Time после пакета Stop не обнуляется, а растет. Т.е. после минуты работы значение 60, после 2-х - 120 и т.д. Биллинг же ожидает в пакете Stop время работы с момента пакета Start.
        Мои ковыряния в файле /usr/local/captiveportal/radius_accounting.inc не принесли результата.
      1 Reply Last reply Reply Quote 0
      • D
        dvserg
        last edited by

        Указывайте версию pfSense.

        SquidGuardDoc EN  RU Tutorial
        Localization ru_PFSense

        1 Reply Last reply Reply Quote 0
        • V
          vlad
          last edited by

          Версия 1.2.3-RELEASE

          1 Reply Last reply Reply Quote 0
          • D
            dvserg
            last edited by

            @vlad:

            Суть проблемы - значение в поле  Acct-Session-Time после пакета Stop не обнуляется, а растет. Т.е. после минуты работы значение 60, после 2-х - 120 и т.д. Биллинг же ожидает в пакете Stop время работы с момента пакета Start.
            Мои ковыряния в файле /usr/local/captiveportal/radius_accounting.inc не принесли результата.

            Я так понимаю в функции

            function RADIUS_ACCOUNTING_STOP($ruleno,$username,$sessionid,$start_time,$radiusip,$radiusport,$radiuskey,$clientip,$clientmac, $term_cause = 1, $interimupdate=false,$stop_time = null) {
            
            ...
            $stop_time = (empty($stop_time)) ? time() : $stop_time;
            $session_time = $stop_time - $start_time;
            ...
            
            

            Судя по коду $session_time вычисляется исходя из $stop_time - $start_time;
            Где-то в другом месте $start_time при ре-аунтентификации не обновляет свое значение.
            Возможно разработчики исходили из других соображений.
            Вы можете в функции ре-аунтентификации задать строку $start_time = time();

            SquidGuardDoc EN  RU Tutorial
            Localization ru_PFSense

            1 Reply Last reply Reply Quote 0
            • V
              vlad
              last edited by

              Дело в том, что пытался самостоятельно воткуть в код подобную замену значения переменной
              (правда, в виде $start_time = $stop_time;), но не достиг нужного результата.
              Не подскажете, куда именно нужно поместить это выражение?

              UPDATE
              Пытаюсь самостоятельно вычислить место в коде, но пока не получаю никакого эффекта.
              В связи с этим вопрос - нужно ли после изменения в коде перегружать всю систему или мои правки вступят в силу "на лету"?

              1 Reply Last reply Reply Quote 0
              • D
                dvserg
                last edited by

                @vlad:

                Дело в том, что пытался самостоятельно воткуть в код подобную замену значения переменной
                (правда, в виде $start_time = $stop_time;), но не достиг нужного результата.
                Не подскажете, куда именно нужно поместить это выражение?

                UPDATE
                Пытаюсь самостоятельно вычислить место в коде, но пока не получаю никакого эффекта.
                В связи с этим вопрос - нужно ли после изменения в коде перегружать всю систему или мои правки вступят в силу "на лету"?

                Думаю на лету, если эти скрипты вызываются сервером CP.

                SquidGuardDoc EN  RU Tutorial
                Localization ru_PFSense

                1 Reply Last reply Reply Quote 0
                • V
                  vlad
                  last edited by

                  Если кому-то будет интересно - опишу, как решил задачу.
                  Обратил внимание, что в логе RADUIS-сервера, приходящий от PfSense пакет STOP имеет 2 (ДВА!) поля
                  Acct-Session-Time - 5 и 20 параметры.
                  В скрипте radius_accounting.inc заменил строку
                  $racct->putAttribute(RADIUS_ACCT_SESSION_TIME, $session_time, "integer");
                  на
                  $racct->putAttribute(RADIUS_ACCT_SESSION_TIME, 61, "integer");
                  61 сек., а не 60 из-за задержек, так считает точнее.
                  Что имеем в итоге:
                          NAS-IP-Address = 192.168.x.x
                          NAS-Identifier = "xxx.nas.local"
                          User-Name = "00004738"
                          Acct-Status-Type = Stop
                          Acct-Session-Time = 1113
                          Acct-Authentic = RADIUS
                          Service-Type = Login-User
                          NAS-Port-Type = Ethernet
                          NAS-Port = 7
                          Acct-Session-Id = "77fa9de6318ebf74"
                          Framed-IP-Address = 192.168.x.x
                          Called-Station-Id = "c4:2c:03:xx:xx:xx"
                          Calling-Station-Id = "192.168.x.x"
                          Acct-Input-Packets = 480
                          Acct-Input-Octets = 72471
                          Acct-Input-Gigawords = 0
                          Acct-Output-Packets = 575
                          Acct-Output-Octets = 624283
                          Acct-Output-Gigawords = 0
                          Acct-Session-Time = 62
                          Acct-Terminate-Cause = NAS-Request
                          Client-IP-Address = 192.168.x.x
                          Acct-Unique-Session-Id = "bc7f07ab42xxxxxx"
                          Timestamp = 1305702304
                  первое вхождение Acct-Session-Time = 1113 -  общая длительность работы клиента
                  второе Acct-Session-Time = 62 - идет позже, и поэтому именно оно учитывается биллингом.

                  1 Reply Last reply Reply Quote 0
                  • E
                    Eugene
                    last edited by

                    Юзера как-нибудь биллинг отключает?

                    http://ru.doc.pfsense.org

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post
                    Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.