Den4ikArgv Posted August 7, 2024 Posted August 7, 2024 Добрый день, коллеги! Подскажите, может кто-нибудь уже разбирался с похожей проблемой... Пытаюсь составить 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 тоже не захотел менять. Вставить ник Quote
Andrei Posted August 8, 2024 Posted August 8, 2024 14 часов назад, Den4ikArgv сказал: Cisco Что за циска? У меня когда то была 7204VXR, там шейпинг действительно делался через конструкции вида "Cisco-AVPair+=\"lcp:interface-config#1=rate-limit " В соседней ветке вы писали, что у вас циска ASR-1001, для этой серии цисок такие конструкции не работают. Вставить ник Quote
Den4ikArgv Posted August 8, 2024 Author Posted August 8, 2024 Цитата Что за циска? Сейчас для тестов стоит 2811, но все тесты делаются для внедрения на реальную сеть с 1001. Как в таком случае лучше конфигурировать? Вставить ник Quote
Andrei Posted August 8, 2024 Posted August 8, 2024 58 минут назад, Den4ikArgv сказал: на реальную сеть с 1001. Как в таком случае лучше конфигурировать? см. вашу же соседнюю ветку Вставить ник Quote
Den4ikArgv Posted August 8, 2024 Author Posted August 8, 2024 Цитата вашу же соседнюю ветку Я помню, что скрипт в любой непонятной ситуации сбрасывает сессию. Подскажите, не пробовали ли вы Через CoA менять параметры, которые возможно сменить? Вставить ник Quote
Andrei Posted August 8, 2024 Posted August 8, 2024 51 минуту назад, Den4ikArgv сказал: Подскажите, не пробовали ли вы Через CoA менять параметры, которые возможно сменить? Какие например? Изменение тарифа: сессия сбрасывается и потом поднимается абонентом снова с новыми параметрами шейпинга. Отключение/включение абонента - тем более так же через разрыв сессии, т.к. меняется ip-адрес абонента на гостевую сетку при блокировке или выход из гостевой сетки при разблокировке. Так работает уже не первый год. Вставить ник Quote
Den4ikArgv Posted August 9, 2024 Author Posted August 9, 2024 Возник ещё один вопрос, но уже касательно самого LanBilling'a. Я создал Radius-Agent, к нему привязал несколько BRAS'ов и создал в самом агенте несколько пуллов адресов, разделяя их по группам BRAS. Но, при авторизации абонента на брасе одной группы он получает IP из группы, откуда получить не должен был от слова совсем. Почему так происходит и как это исправить? Грешил на работу LBinet, т.к. ставил его не разобравшись... Удалил - не помогло. Вставить ник Quote
Andrei Posted August 9, 2024 Posted August 9, 2024 2 часа назад, Den4ikArgv сказал: при авторизации абонента на брасе одной группы он получает IP из группы, откуда получить не должен был от слова совсем. А что получает? ip из пула другого НАСа? Ни разу с описанным не сталкивался. Вставить ник Quote
myth Posted August 10, 2024 Posted August 10, 2024 А абонентский ролтер как переварит смену IP? Вставить ник Quote
Andrei Posted August 10, 2024 Posted August 10, 2024 2 часа назад, myth сказал: А абонентский ролтер как переварит смену IP? Кому вопрос и к какому посту? Вставить ник Quote
Den4ikArgv Posted August 10, 2024 Author Posted August 10, 2024 Цитата А абонентский ролтер как переварит смену IP? Добрый день. Как выше сказал Andrei, для смены IP необходимо переавторизовать пользователя. Я борюсь с другими запросами, типа смены тарифа, наброс блокировок и их снятие. Цитата А что получает? ip из пула другого НАСа? Ни разу с описанным не сталкивался. С этим разобрался. После создания пуллов не рестартанул сервис. Но все равно для выдачи одного пула нельзя использовать группу, нужно использовать точное назначение NAS конкретному пулу. Вставить ник Quote
Den4ikArgv Posted August 10, 2024 Author Posted August 10, 2024 Теперь вопрос возник с accel-ppp, может кто знает каким атрибутом добавить пользователя в address лист через ipset? Вставить ник Quote
Andrei Posted August 10, 2024 Posted August 10, 2024 37 минут назад, Den4ikArgv сказал: accel-ppp Вот про взаимодействие с ним сам бы почитал. Когда-то пробовал, но забросил не добившись желаемого результата, подробностей не помню. В доках у них тоже нет такого - https://www.lanbilling.ru/technical-information/documentation/ Вставить ник Quote
Morty Posted August 10, 2024 Posted August 10, 2024 (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 August 10, 2024 by Morty Вставить ник Quote
Andrei Posted August 10, 2024 Posted August 10, 2024 10 часов назад, Den4ikArgv сказал: вопрос возник с accel-ppp Если получите какой-то положительный опыт/результат, не поленитесь написать тут. Вставить ник Quote
Morty Posted August 10, 2024 Posted August 10, 2024 (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 August 10, 2024 by Morty Вставить ник Quote
Andrei Posted August 10, 2024 Posted August 10, 2024 16 минут назад, Morty сказал: Работает на двух серверах accel-ppp. В связке с ЛанБиллингом? Вставить ник Quote
Morty Posted August 10, 2024 Posted August 10, 2024 (edited) 5 минут назад, Andrei сказал: В связке с ЛанБиллингом? Без разницы какой биллинг. Главное, чтобы биллинг посылал атрибут со статусом и ip адресом абонента при старте сесси, при PoD и при CoA. Я думаю это умеют все биллинги. Название атрибута можно поменять в скрипте pppd-compat. Если accel-ppp будет ругаться, что такого атрибута нет, то надо добавить его в словарь accel-ppp. Edited August 10, 2024 by Morty Вставить ник Quote
Den4ikArgv Posted August 12, 2024 Author Posted August 12, 2024 (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 August 12, 2024 by Den4ikArgv Вставить ник Quote
Den4ikArgv Posted August 12, 2024 Author Posted August 12, 2024 Цитата Если получите какой-то положительный опыт/результат, не поленитесь написать тут. Есть положительный результат через ppp-compat. Если нужно, могу опубликовать. Сейчас вопрос с редиректом возник непосредственно в iptables. Вставить ник Quote
Andrei Posted August 12, 2024 Posted August 12, 2024 2 часа назад, Den4ikArgv сказал: Если нужно, могу опубликовать. +1 Вставить ник Quote
Den4ikArgv Posted August 12, 2024 Author Posted August 12, 2024 Скрытый текст #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 Вставить ник Quote
Andrei Posted August 12, 2024 Posted August 12, 2024 Я микротики не использую на сети. Эти скрипты куда применять, к биллингу как прикручивать? Вставить ник Quote
Den4ikArgv Posted August 12, 2024 Author Posted August 12, 2024 Скрытый текст Я микротики не использую на сети. У нас тоже их нет в качестве брасов. Это просто доступный строковый атрибут, который Accel-ppp понимает и записывает в файл, я не стал играться долго, чтобы найти другой. MAIN- основной список, в который попадают активные абоны с серой сеткой. REDIRECT- список для заблокированных по балансу, чтобы прикрутить им автоматом заглушку и дать доступ к социально значимым ресурсам. BLOCK-для административно заблокированных. REAL - список абонов с реальными IP. Это скрипты на Accel-ppp для секции ppp-compat (ip-up=<путь к этому скрипту>). Цитата Эти скрипты куда применять, к биллингу как прикручивать? С биллинга нужно передать атрибут Mikrotik-Address-List и ppp-compat вызовет скрипт для добавления IP в лист, далее по правилам iptables. Всё это ещё не допилено. Сейчас разберусь с заглушкой и закончу CoA. Если нужно, могу опубликовать (если конечно не нарушу прав LanBilling'a). Вставить ник Quote
Morty Posted August 12, 2024 Posted August 12, 2024 (edited) 1 час назад, Den4ikArgv сказал: Из открытых атрибутов нашел только Mikrotik-Address-List, поэтому используем его. Можете свой атрибут сделать с каким угодно названием, главное добавить его в словарь в accel и в словарь радиуса. 1 час назад, Andrei сказал: Эти скрипты куда применять, к биллингу как прикручивать? Это скрипты для pppd-compat. Я выше о них писал. Edited August 12, 2024 by Morty Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.