... {toc} h1. Описание Сдвоенная схема для PPPoE и IPoE одновременно - такую гибкость настройки позволяет Accel. IPoE подразумевает работу в одном широковещательном сигменте с клиентами. Схема проверялась на Debian 10 и Ubuntu 20.04 h1. Настройка h2. BRAS h3. Что нужно поменять в конфигурационных файлах *{color:red}!!!TODO идея: сделать расписанный лог красным/зелёным/синим с пояснениями{color}* *{color:red}TODO: описать эти опции наглядней{color}* * *Внешний IP Accel, он же IP с которого уходят запросы к биллингу*: 192.168.1.130 * *Внутренний IP Accel, он же IP шлюза для абонентов IPoE*: 192.168.0.100 * *Интерфейс, за которым находятся абоненты*: enp0s8 * *IP, биллинга, на который BRAS будет отправлять запросы авторизации и Netflow*: 192.168.1.156 * *Пароль RADIUS-клиента (не забудьте указать одинаковый в Accel и на биллинге)*: AccelSharedSecret * *Пароль CoA-клиента (не забудьте указать одинаковый в Accel и на биллинге)*: AccelCoASecret h3. Что можно поменять, но не обязательно * *DNS для абонентов PPPoE*: dns1=8.8.8.8, dns2=8.8.4.4 h3. Что менять не следует *{color:red}TODO: описать эти опции наглядней{color}* * *IP шлюза для абонентов PPPoE*: 10.128.0.1 * *ifcfg=1, shared=1, mode=L2, start=up*: - это важные параметры для правильной работы описанной схемы. Если их поменять - у Вас будет уже другая схема, не описанная в этой статье * *auth-port=1812, acct-port=1813*: биллигом не преусмотрено изменение этих параметров, все NAS сервера дожны обращаться к биллингу именно на эти порты для авторизации и аккаунтинга * *Две строки server= в секции radius, отдельно для аккаунтинга и авторизации*: такую настройку разработчики Carbon Soft заложили в XGE, где так же используется Accel, как наиболее стабильнную. Лучше последовать их примеру для гарантии правильного взаимодействия биллинга и Accel. * *level, verbose* - опции определяют детализацию журнала сервера. Лучше оставьте детализацию максимальной, это сэкономит время при отладке возникающих проблем в процессе эксплуатации * *per-session* - сильно упростит h3. Листинги конфигурационных файлов h4. Конфигурационный файл Accel {code:title=/etc/accel-ppp.conf} [modules] log_file pppoe ipoe radius pppd_compat ippool auth_mschap_v2 auth_mschap_v1 auth_chap_md5 auth_pap shaper [core] log-error=/var/log/accel-ppp/core.log thread-count=1 [common] single-session=replace sid-source=urandom check-ip=1 [log] log-file=/var/log/accel-ppp/accel-ppp.log log-emerg=/var/log/accel-ppp/emerg.log log-fail-file=/var/log/accel-ppp/auth-fail.log per-user-dir=/var/log/accel-ppp/users per-session=1 copy=1 level=5 [radius] verbose=5 nas-identifier=accel-ppp nas-ip-address=192.168.1.130 gw-ip-address=192.168.0.100 server=192.168.1.156,AccelSharedSecret,auth-port=1812,acct-port=0,req-limit=100,fail-timeout=0,max-fail=10,weight=1 server=192.168.1.156,AccelSharedSecret,auth-port=0,acct-port=1813,req-limit=100,fail-timeout=0,max-fail=10,weight=1 dae-server=192.168.1.130:3799,AccelCoASecret sid-in-auth=1 max-try=1 timeout=3 [cli] verbose=0 telnet=127.0.0.1:2000 tcp=127.0.0.1:2001 [ipoe] verbose=1 ifcfg=1 shared=1 interface=enp0s8 mode=L2 start=up calling-sid=mac check-mac-change=1 soft-terminate=0 idle-timeout=45 password=AccelCommonPassword attr-l4-redirect=L4-Redirect l4-redirect-ipset=Block unit-cache=10 [pppoe] verbose=1 called-sid=mac interface=enp0s8 [ppp] verbose=1 min-mtu=1280 mtu=1400 mru=1400 ccp=1 mppe=prefer ipv4=require ipv6=deny lcp-echo-interval=5 lcp-echo-failure=3 lcp-echo-timeout=45 unit-cache=1 unit-preallocate=1 [dns] dns1=8.8.8.8 dns2=8.8.4.4 [ip-pool] gw-ip-address=10.128.0.1 [pppd-compat] verbose=1 ip-up=/etc/ppp/ip-up ip-down=/etc/ppp/ip-down radattr-prefix=/var/run/radattr [shaper] verbose=1 attr=Filter-Id up-limiter=police down-limiter=htb [connlimit] limit=10/min burst=3 timeout=60 {code} h4. Словарь атрибутов RADIUS Нужно добавить одну строку в конец файла - атрибут для описания редиректа (блокировки абонента). {code:title=/usr/share/accel-ppp/radius/dictionary} ... ATTRIBUTE L4-Redirect 242 integer {code} h2. Billing h3. Словарь атрибутов RADIUS Нужно добавить одну строку ближе к концу файла. В принципе, можно и в самый конец, но разработчики FreeRADIUS предлогают добавить именно тут. Предлагаем последовать их совету. {code:title=/app/asr_billing/cfg/usr/share/freeradius/dictionary} ... # # Miscellaneous attributes defined in weird places that # don't really belong anywhere else... # ATTRIBUTE L4-Redirect 242 integer ... {code} h3. Скриншоты настроек NAS !Accel Описание, основные настройки.png|border=0,width=800! !Accel Дополнительно.png|border=0,width=800! !Accel RADIUS-атрибуты.png|border=0,width=800! h3. Скриншот учётной записи абонента (одинаково PPPoE и IPoE) !Accel Учетная запись абонента.png|border=0,width=1000!
|
Скрипт реализует только основные команды: установка шейпера, блокировка (однинаковое поведение на любые виды блокировок) и снятие блокировки. Команда user_info покажет данные BRAS и проведёт базовую сетевую диагностику, и при отсутствии связи с абонентом может выполняться 3-5 секунд. {code:title=/app/asr_billing/var/oss/core/<NAS>/ubin/session} #!/bin/bash . $(dirname $BASH_SOURCE)/../bin/session ### ### Документация по custom схемам OSS находится здесь: ### http://docs.carbonsoft.ru/x/HIAlAw ### __coa_send() { if [[ $owner_script == events.py ]]; then echo "Не отправляем команды при авторизации, выходим из скрипта: exit 0" exit 0 fi echo "$@" | radclient -x $nas_ip coa $coa_psw &>$TMPDIR/radclient.$$ ret=$? # exit 254 отложить передачу, todo возможно и другие схожие busy context и тд grep "no response from server" $TMPDIR/radclient.$$ && exit 254 cat $TMPDIR/radclient.$$ return $ret } # Приходит при отключении пользователя администратором # либо при добровольной блокировке. user_disconnect() { # echo "Framed-IP-Address=100.64.0.15" | radclient -x 192.168.1.130 disconnect AccelCoASecret echo "Framed-IP-Address=${ip}" | radclient -x $nas_ip disconnect $coa_psw } # Приходит при удалении пользователя из биллинга # И при смене критичных параметров(ip, vlan, port etc.)(со старыми значениями) # Обычно используется для ВСЕХ видов авторизации user_del() { user_disconnect } # Приходит при превышении лимита, либо при отключении услуги user_redirect() { __coa_send "Framed-IP-Address=${ip},L4-Redirect=1" } # Приходит после оплаты, если хватило денег на включение услуги user_redirect_cancel() { __coa_send ip redirect del $ip } # Приходит при изменении скорости подключения # Или включения\выключении услуги(турбокнопка, ночной форсаж и т.д.) user_rate_set() { __coa_send "Framed-IP-Address=${ip},Filter-Id=$ceil_in/$ceil_out" } # Приходит при нажатии кнопки info в учетной записи user_info() { sshpass -p ${telnet_password} ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GSSAPIAuthentication=no ${telnet_login}@${telnet_ip} " echo '<p style=\"color:#007Ac5\"><b>accel-cmd show sessions match ip ${ip}</b></p>' echo '<pre style=\"height:auto;overflow: auto;\">' accel-cmd show sessions match ip ${ip} echo '</pre>' echo '<p style=\"color:#007Ac5\"><b>ipset save | grep ${ip}</b></p>' echo '<pre style=\"height:auto;overflow: auto\">' ipset save | grep ${ip} echo '</pre>' echo '<p style=\"color:#007Ac5\"><b>ping -4 ${ip} -A -c4</b></p>' echo '<pre style=\"height:auto;overflow: auto\">' ping -4 ${ip} -A -c4 echo '</pre>' echo '<p style=\"color:#007Ac5\"><b><span style=\"color: #999\">timeout 3</span> tcpdump -nni any src ${ip} -c 4</b></p>' echo '<pre style=\"height:auto;overflow: auto\">' timeout 3 tcpdump -nni any src ${ip} -c 4 echo '</pre>' " >> /tmp/${user_id}_user_info.new mv -f /tmp/${user_id}_user_info.new /tmp/${user_id}_user_info chown apache:apache /tmp/${user_id}_user_info [ "${is_daemon:--}" != 1 ] && cat /tmp/${user_id}_user_info } # Приходит при нажатии кнопки тест в учетной записи user_test() { : } # Приходит при создании пользователя в биллинге # И при смене критичных параметров(ip, vlan, port etc.)(с новыми значениями) # Обычно используется для ip авторизации user_add() { : } # Приходит после авторизации пользователя # Рекомендуется политику пользователя передавать в радиус replay параметрах, А НЕ В ЭТОМ СОБЫТИИ, # т.к. у любого оборудования есть ограничения на колличество отправляемых команд в секунду user_accept() { : } # Приходит при отключении пользователя # Рекомендуется избегать удаления пользователя из списков, для экономии очереди команд на оборудовании user_drop() { : } # Приходит при добавлении услуги абоненту usluga_add(){ : } # Приходит при удалении услуги у абонента usluga_del(){ : } # Приходит при активации услуги usluga_activated(){ : } # Приходит при деактивации услуги usluga_deactivated(){ : }
|