Jump to content

Recommended Posts

Posted

Добрый день, коллеги!

Подскажите, может кто-нибудь уже разбирался с похожей проблемой... Пытаюсь составить CoA запросы для смены IP, Shape, и для редиректа на страницу блокировки.

Примеры (Cisco ASR-Shape):

echo "Acct-Session-Id=$Session
      Cisco-AVPair+=\"lcp:interface-config#1=no rate-limit input 102400000 24000000 48000000 conform-action transmit exceed-action drop\"
      Cisco-AVPair+=\"lcp:interface-config#1=no rate-limit output 102400000 24000000 48000000 conform-action transmit exceed-action drop\"" | /usr/bin/radclient -r1 -t1 -x 10.5.5.3:3799 coa <пароль>

echo "Acct-Session-Id=$Session
      Cisco-AVPair+=\"lcp:interface-config#1=rate-limit input 31457280 8000 8000 conform-action transmit exceed-action drop\"
      Cisco-AVPair+=\"lcp:interface-config#1=rate-limit output 31457280 8000 8000 conform-action transmit exceed-action drop\"" | /usr/bin/radclient -r1 -t1 -x 10.5.5.3:3799 coa <пароль>

 

В ответ прилетает:
Received CoA-NAK Id 239 from 10.5.5.3:3799 to 10.5.5.2:40002 length 26
    Error-Cause = 200
(0) -: Expected CoA-ACK got CoA-NAK

 

Может кто-нибудь подсказать, как это можно реализовать?

 

C Mikrotik-Rate-Limit проблем не возникло, но вот с Framed-IP-Address Mikrot тоже не захотел менять.

 

Posted
14 часов назад, Den4ikArgv сказал:

Cisco

Что за циска?

У меня когда то была 7204VXR, там шейпинг действительно делался через конструкции вида "Cisco-AVPair+=\"lcp:interface-config#1=rate-limit "

В соседней ветке вы писали, что у вас циска ASR-1001, для этой серии цисок такие конструкции не работают.

Posted
Цитата

Что за циска?

Сейчас для тестов стоит 2811, но все тесты делаются для внедрения на реальную сеть с 1001.

 

Как в таком случае лучше конфигурировать?

Posted
Цитата

 вашу же соседнюю ветку

Я помню, что скрипт в любой непонятной ситуации сбрасывает сессию.

 

Подскажите, не пробовали ли вы 

Через CoA менять параметры, которые возможно сменить?

Posted
51 минуту назад, Den4ikArgv сказал:

Подскажите, не пробовали ли вы 

Через CoA менять параметры, которые возможно сменить?

Какие например?
Изменение тарифа: сессия сбрасывается и потом поднимается абонентом снова с новыми параметрами шейпинга.

Отключение/включение абонента - тем более так же через разрыв сессии, т.к. меняется ip-адрес абонента на гостевую сетку при блокировке или выход из гостевой сетки при разблокировке.

Так работает уже не первый год.

Posted

Возник ещё один вопрос, но уже касательно самого LanBilling'a.

Я создал Radius-Agent, к нему привязал несколько BRAS'ов и создал в самом агенте несколько пуллов адресов, разделяя их по группам BRAS.

Но, при авторизации абонента на брасе одной группы он получает IP из группы, откуда получить не должен был от слова совсем.

Почему так происходит и как это исправить?
Грешил на работу LBinet, т.к. ставил его не разобравшись... Удалил - не помогло.

 

Screenshot from 2024-08-09 12-27-50.png

Screenshot from 2024-08-09 12-28-08.png

Screenshot from 2024-08-09 12-28-17.png

Posted
2 часа назад, Den4ikArgv сказал:

при авторизации абонента на брасе одной группы он получает IP из группы, откуда получить не должен был от слова совсем.

А что получает? ip из пула другого НАСа? Ни разу с описанным не сталкивался.

Posted
Цитата

А абонентский ролтер как переварит смену IP?

Добрый день.

 

Как выше сказал Andrei, для смены IP необходимо переавторизовать пользователя.

 

Я борюсь с другими запросами, типа смены тарифа, наброс блокировок и их снятие.

 

Цитата

А что получает? ip из пула другого НАСа? Ни разу с описанным не сталкивался.

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

Но все равно для выдачи одного пула нельзя использовать группу, нужно использовать точное назначение NAS конкретному пулу.

Posted
37 минут назад, Den4ikArgv сказал:

accel-ppp

Вот про взаимодействие с ним сам бы почитал. Когда-то пробовал, но забросил не добившись желаемого результата, подробностей не помню.
В доках у них тоже нет такого - https://www.lanbilling.ru/technical-information/documentation/

Posted (edited)
2 часа назад, Den4ikArgv сказал:

Теперь вопрос возник с accel-ppp, может кто знает каким атрибутом добавить пользователя в address лист через ipset?

 

Смотрите l4-redirect:

https://docs.accel-ppp.org/configuration/ipoe.html

 

Можно ещё через pppd-compat:

https://docs.accel-ppp.org/examples/pppd_compat_examples.html

 

Если не разберётесь - пишите в ТГ:

https://t.me/accel_ppp

Edited by Morty
Posted (edited)
2 часа назад, Andrei сказал:

Если получите какой-то положительный опыт/результат, не поленитесь написать тут.

 

Работает на двух серверах accel-ppp.

Выше приложил ссылку с примером pppd-compat. Надо просто скопипастить, вставить в свой конфиг и поправить название ipset листа. Работы на 15 минут максимум.

 

Смысл такой:

- сессия поднимается

- атрибуты, которые пришли с радиуса, сохраняются в radattr.pppoe0 файл (настраивается и для ipoe и pppoe, смотрите в документацию)

- скрипт, который есть в примере, лезет в этот файл и берет значение атрибута со статусом и ip абонента

- скрипт заносит запись в ipset лист

- при завершении сессии выполняется другой скрипт, который удаляет запись из ipset листа

- когда прилетает CoA, выполняется третий скрипт, который удаляется старую запись и добавляет новую

 

Путь к этим трем скриптам можно указать в конфиге, это всё есть в документации в примере.

 

Максимально всё расписал. Надо немного знать bash и все получится.


pppd-compat при старте сесси, при PoD и при CoA позволяет выполнять любые действия, которые вы захотите.

 

(При подключении модуля нужен рестарт accel-ppp)

Edited by Morty
Posted (edited)
5 минут назад, Andrei сказал:

В связке с ЛанБиллингом?

 

Без разницы какой биллинг.

Главное, чтобы биллинг посылал атрибут со статусом и ip адресом абонента при старте сесси, при PoD и при CoA. Я думаю это умеют все биллинги.

Название атрибута можно поменять в скрипте pppd-compat. Если accel-ppp будет ругаться, что такого атрибута нет, то надо добавить его в словарь accel-ppp.

Edited by Morty
Posted (edited)

Коллеги, добрый день!

Пытаюсь реализовать редирект на страницу блокировки через ipset-iptables Linux, но что-то делаю не так.

Может кто-нибудь подсказать?

sudo iptables -A FORWARD -m set --match-set REDIRECT src -p udp --dport 53 -d 0.0.0.0/0 -j ACCEPT #Явно разрешаю dns запросы

sudo iptables -t nat -D PREROUTING -m set --match-set REDIRECT src -p tcp --dport 80 -j DNAT --to-destination=100.63.0.3:80

sudo iptables -t nat -D PREROUTING -m set --match-set REDIRECT src -p tcp --dport 443 -j DNAT --to-destination=100.63.0.3:80

 

IP теоретического абонента в этой же сети (предполагается, что на каждом брасе будет своя заглушка, которая висит на loopback'e).

Если просто ломиться на 100.63.0.3:80 - страница загружается, а при попытке зайти vk.com,mail.ru и т.д. вылетает ошибка чтения SSL.

Полная задумка такова:

Нужно, чтобы юзверы из списка REDIRECT имели доступ к двум ресурсам социального значения, а при остальных случаях их перекидывало за страничку "ДАЙ ДЕНЕГ",

Может кто-нибудь поделиться опытом подобной реализации?

Edited by Den4ikArgv
Posted
Цитата

Если получите какой-то положительный опыт/результат, не поленитесь написать тут.

Есть положительный результат через ppp-compat.

Если нужно, могу опубликовать.

Сейчас вопрос с редиректом возник непосредственно в iptables.

Posted
Скрытый текст

#IP-CHANGE

#!/bin/bash
echo "Start change attribute">>/var/log/accel-ppp/change.log
if [ -f /var/run/radattr.$1 ];
then
   echo "Проверяем наличие IPSET_OLD">>/var/log/accel-ppp/change.log
   if [ -f /var/run/radattr_old.$1 ];
   then
      IPSET_OLD=$(awk '/Mikrotik-Address-List/ {print $2}' /var/run/radattr_old.$1)
      IPSET=$(awk '/Mikrotik-Address-List/ {print $2}' /var/run/radattr.$1)
      echo "Change log+">>/var/log/accel-ppp/change.log
      echo "IPSET_OLD=${IPSET_OLD} IPSET=${IPSET}">>/var/log/accel-ppp/change.log
      if [ ! -z $IPSET_OLD ];
      then
         case $IPSET_OLD in
              'MAIN') /sbin/ipset del MAIN $5
              echo "Change from ${IPSET_OLD} to ${IPSET}">>/var/log/accel-ppp/change.log
              ;;
              'REDIRECT') /sbin/ipset del REDIRECT $5
              echo "Change from ${IPSET_OLD} to ${IPSET}">>/var/log/accel-ppp/change.log
              ;;
              'BLOCK') /sbin/ipset del BLOCK $5
              echo "Change from ${IPSET_OLD} to ${IPSET}">>/var/log/accel-ppp/change.log
              ;;
              'REAL') /sbin/ipset del REAL $5
              echo "Change from ${IPSET_OLD} to ${IPSET}">>/var/log/accel-ppp/change.log
              ;;
              *) echo "Couldn't any ipsets">>/var/log/accel-ppp.log
              ;;
         esac
         case $IPSET in
              'MAIN') /sbin/ipset add MAIN $5
              ;;
              'REDIRECT') /sbin/ipset add REDIRECT $5
              ;;
              'BLOCK') /sbin/ipset add BLOCK $5
              ;;
              'REAL') /sbin/ipset add REAL $5
              ;;
              *) /sbin/ipset add BLOCK $5
              echo "Could't find ${IPSET} list and add to BLOCK-list" >> /var/log/accel-ppp/CoA.log
              ;;
         esac

      elif [ -z $IPSET_OLD ];
      then
         echo "Переменная пуста">>/var/log/accel-ppp/change.log
#         IPSET=$(awk '/Mikrotik-Address-List/ {print $2}' /var/run/radattr.$1)
         case $IPSET in
              'MAIN') /sbin/ipset add MAIN $5
              ;;
              'REDIRECT') /sbin/ipset add REDIRECT $5
              ;;
              'BLOCK') /sbin/ipset add BLOCK $5
              ;;
              'REAL') /sbin/ipset add REAL $5
              ;;
              *) /sbin/ipset add BLOCK $5
              echo "Could't find ${IPSET} list and add to BLOCK-list" >> /var/log/accel-ppp/CoA.log
              ;;
         esac
      fi
   fi
fi

Скрытый текст

#IP-UP

#!/bin/bash
echo "script was running $(`date`)">>/var/log/accel-ppp/start.log
if [ -f /var/run/radattr.$1 ];
then
   echo "file was finding">>/var/log/accel-ppp/start.log
   IPSET=$(awk '/Mikrotik-Address-List/ {print $2}' /var/run/radattr.$1)
   case $IPSET in
        'MAIN') /sbin/ipset add MAIN $5
        echo "Added MAIN LIST">>/var/log/accel-ppp/start.log
        ;;
        'REDIRECT') /sbin/ipset add REDIRECT $5
        ;;
        'BLOCK') /sbin/ipset add BLOCK $5
        ;;
        *) echo "No match any address-lists for user with IP-Address ${5}">>/var/log/accel-ppp/start.log
        ;;
   esac
fi

Скрытый текст

#IP-DOWN

#!/bin/bash

if [ -f /var/run/radattr.$1 ];
then
   IPSET=$(awk '/Mikrotik-Address-List/ {print $2}' /var/run/radattr.$1)
   case $IPSET in
        'MAIN') /sbin/ipset del MAIN $5
        ;;
        'REDIRECT') /sbin/ipset del REDIRECT $5
        ;;
        'BLOCK') /sbin/ipset del BLOCK $5
        ;;
        *) /sbin/ipset del BLOCK $5
        ;;
   esac
fi

Из открытых атрибутов нашел только Mikrotik-Address-List, поэтому используем его.
Логи можно оставить, а можно закомментить.
 

Цитата

+1

 

Posted
Скрытый текст

Я микротики не использую на сети.

У нас тоже их нет в качестве брасов. Это просто доступный строковый атрибут, который Accel-ppp понимает и записывает в файл, я не стал играться долго, чтобы найти другой.

MAIN- основной список, в который попадают активные абоны с серой сеткой.
REDIRECT- список для заблокированных по балансу, чтобы прикрутить им автоматом заглушку и дать доступ к социально значимым ресурсам.
BLOCK-для административно заблокированных.
REAL - список абонов с реальными IP.


Это скрипты на Accel-ppp для секции ppp-compat (ip-up=<путь к этому скрипту>).

Цитата

Эти скрипты куда применять, к биллингу как прикручивать?

С биллинга нужно передать атрибут Mikrotik-Address-List и ppp-compat вызовет скрипт для добавления IP в лист, далее по правилам iptables.

Всё это ещё не допилено. Сейчас разберусь с заглушкой и закончу CoA.

Если нужно, могу опубликовать (если конечно не нарушу прав LanBilling'a).

Posted (edited)
1 час назад, Den4ikArgv сказал:

Из открытых атрибутов нашел только Mikrotik-Address-List, поэтому используем его.

 

Можете свой атрибут сделать с каким угодно названием, главное добавить его в словарь в accel и в словарь радиуса.

 

1 час назад, Andrei сказал:

Эти скрипты куда применять, к биллингу как прикручивать?

 

Это скрипты для pppd-compat. Я выше о них писал.

Edited by Morty

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.