|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (111)
просмотр истории страницы{toc:maxLevel=3} |
h1. Описание |
Схема сдвоенная схема для PPPoE и IPoE одновременно - такую гибкость настройки позволяет Accel. |
|
IPoE подразумевает работу в одном широковещательном сигменте с клиентами. |
IPoE подразумевает работу в одном широковещательном сигменте с клиентами, авторизация происходит по первому пакету, если на IP ещё не существует сессии (L2, unclassified packet). |
|
Схема проверялась на Debian 10 и Ubuntu 20.04 |
Схема проверялась на *Debian 10* и *Ubuntu Server 20.04* |
h1. Настройка |
h2. BRAS |
h2. Параметры серверов Accel и биллинга |
|
h3. Что нужно поменять в конфигурационных файлах *{color:red}!!!TODO идея: сделать расписанный лог красным/зелёным/синим с пояснениями{color}* *{color:red}TODO: описать эти опции наглядней{color}* |
* *Внешний IP Accel, он же IP с которого уходят запросы к биллингу*: 192.168.1.130 * *Внутренний IP Accel, он же IP шлюза для абонентов IPoE*: 192.168.0.100 |
... |
* *Пароль RADIUS-клиента (не забудьте указать одинаковый в Accel и на биллинге)*: AccelSharedSecret * *Пароль CoA-клиента (не забудьте указать одинаковый в Accel и на биллинге)*: AccelCoASecret |
h3. Что можно поменять, но не обязательно |
* *DNS для абонентов PPPoE*: dns1=8.8.8.8, dns2=8.8.4.4 |
h3. Что менять не следует |
h2. BRAS |
|
*{color:red}TODO: описать эти опции наглядней{color}* |
h3. Установка Accel и дополнительного ПО |
|
* *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* - сильно упростит |
Установите Accel по [инструкции|https://accel-ppp.readthedocs.io/en/latest/installation/debian.html]: {code} apt-get install -y build-essential cmake gcc linux-headers-`uname -r` git libpcre3-dev libssl-dev liblua5.1-0-dev git clone https://github.com/accel-ppp/accel-ppp.git /opt/accel-ppp-code mkdir /opt/accel-ppp-code/build cd /opt/accel-ppp-code/build/ cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCMAKE_INSTALL_PREFIX=/usr -DKDIR=/usr/src/linux-headers-`uname -r` -DLUA=TRUE -DCPACK_TYPE=Debian10 .. make cpack -G DEB dpkg -i accel-ppp.deb mv /etc/accel-ppp.conf.dist /etc/accel-ppp.conf systemctl enable accel-ppp systemctl start accel-ppp {code} |
|
Установите дополнительное ПО, оно потребуется для диагностики абонентов после интеграции с биллингом: {code:title=Дополнительное ПО}apt install -y tcpdump{code} |
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 |
{color:#008000}Зелёным обозначено что{color} {color:#008000}{*}нужно поменять{*}{color} {color:#008000}в конфигурационных файлах{color} {color:#0000ff}Синим обозначено что{color} {color:#0000ff}{*}поменять можно, но лучше оставить{*}{color} {color:#0000ff}как в примере{color} {color:#ff0000}Красным обозначено что менять{color} {color:#ff0000}{*}не следует{*}{color} |
|
[core] log-error=/var/log/accel-ppp/core.log thread-count=1 |
* \[modules\] ** ippool - опциональный модуль, необходим для PPPoE, чтобы назначить IP шлюза на виртуальном интерфейсе. Если используется IPoE - можно отключить. ** auth_mschap_v1 - авторизация PPPoE по MS CHAP v1, рекомендуется отключить для безопасности ** auth_chap_md5 - авторизация PPPoE по CHAP, рекомендуется отключить для безопасности ** auth_pap - авторизация PPPoE по CHAP, настоятельно рекомендуется отключить для безопасности * \[core\] ** thread-count=1 - количество потоков, увеличение позволит плавно распределить нагрузку по ядрам, оптимальное число - количество процессоров/ядер сервера * \[log\] ** log-file - путь к логу Accel, туда пишутся все сообщения ** log-emerg - путь к логу для важных сообщений, при отладке схемы не пригодился, но указать его обязательно, согласно документации ** log-fail-file - путь к логу неудачных авторизаций, так же не пригодился ** per-user-dir - путь к логу авторизаций отдельных пользователей, очень упрощает отладку, рекомендуется использовать ** per-session - если включено, лог отдельных * \[radius\] ** nas-identifier - укажите название NAS ** nas-ip-address - укажите IP, скоторого NAS-сервер будет отправлять запросы RADIUS-серверу ** gw-ip-address - укажите IP шлюза для абонентов, используется как для PPP, так и для IPoE ** dae-server - IP, порт и пароль CoA ** server - укажите IP и пароль RADIUS, остальные праметры оставьте как в примере, первая строка - для Auth-Request ** server - укажите IP и пароль RADIUS, остальные праметры оставьте как в примере, вторая строка для Accounting-Request ** max-try - максимальное количество попыток авторизации, если RADIUS не отвечает, можно увеличить в больших сетях до 3х, рекомендуется вместо этого увеличивать timeout ** timeout - время, в течение которого Accel ожидает ответ RADIUS-сервера, в больших сетях можно увеличить до 10 * \[ipoe\] ** interface=enp0s8 - IP интерфейса, за которым находятся абоненты ** password - общий пароль IPoE ** calling-sid - задаёт Calling-Station-Id в реквестах, возможные значения mac и ip; для дебага удобней MAC, так как IP известен из User-Name ** check-mac-change - если включено, Accel сбросит сессию при изменении MAC клиента, рекомендуется включить ** idle-timeout=45 - время, через которое сессия будет сброшена, если на интерфейсе прекратится поток трафика; рекомендуется установить около минуты, чтобы не создавать лишние запросы к RADIUS при перезагрузке оборудования абонента ** unit-cache=10 - количество виртуальных интерфейсов, остающихся в кеше даже после завершения сессии абонента; рекомендуется оставить какое-то количество чтобы не создавать лишнюю нагрузку на сервер Accel * \[pppoe\] ** interface=enp0s8 - имя интрфейса, за которым находятся абоненты ** called-sid=mac - Calling-Station-Id, для PPP возможные варианты ifname, mac, ifname:mac. Рекомендуется использовать MAC * \[ppp\] ** min-mtu=1280 - минимальный MTU, при котором Accel создаст сессию для абонента ** mtu=1400 - MTU, корый назначит Accel, если MRU клиента неприемлем для Accel ** mru=1400 - предпочтительный размер MRU ** ccp=1 - рекомендуется, включает компрессию данных ** mppe=prefer - шифрование данных по протоколу MPPE; рекомендуется prefer, для совместимости со старым или нестабильным оборудованием абонентов; в стабильной сети рекомендуется require ** ipv6=deny - IPv6 в данной схеме не используется ** lcp-echo-interval=5 - частота отправки LCP Echo ** lcp-echo-failure=3 - рекомендуемое максимальное значение не отвеченных LCP Echo, после которого сессия будет разорвана ** lcp-echo-timeout=45 - время, в течение которого Accel ожижает ответ клиента на LCP Echo ** unit-cache=1 - количество виртуальных интерфейсов, которые Accel оставит в кеше при обрые сессий, рекомендуется увеличить в нестабильных сетях чтобы снизить нагрузку на сервер Aceel ** unit-preallocate=1 - при включении опции, Accel создаст виртуальный интерфейс до авторизации сесси, этоможет помочь при отладке, если на одном сервере развёрнуто несколько Accel с разными схемами * \[dns\] ** dns1 - первичный DNS-сервер, который будет отпарвляться PPPoE абонентам ** dns2 - вторичный DNS-сервер, который будет отпарвляться PPPoE абонентам * \[shaper\] ** up-limiter - тип шейпера исходящего трафика ** down-limiter - тип шейпера входящего трафика * \[connlimit\] ** limit - максимальное количество запросов авторизации от одного клиента в период времени, 10/min - до 10 за 1 минуту, защита от DOS атаки ** burst - предельное значение попыток соединений, после которых Accel считает limit ** timeout - количество секунд, после которых Accel перестаёт считать limit, пока абонент снова не достигнет значения burst |
|
[common] single-session=replace sid-source=urandom check-ip=1 |
|
[log] |
log-file=/var/log/accel-ppp/accel-ppp.log {panel} |
*\[modules\]* |
log-emerg=/var/log/accel-ppp/emerg.log {color:#0000ff}ippool{color} |
log-fail-file=/var/log/accel-ppp/auth-fail.log {color:#0000ff}auth_mschap_v1{color} |
per-user-dir=/var/log/accel-ppp/users {color:#0000ff}auth_chap_md5{color} |
per-session=1 {color:#0000ff}auth_pap{color} |
copy=1 {color:#ff0000}log_file{color} |
level=5 {color:#ff0000}pppoe{color} |
{color:#ff0000}ipoe{color} {color:#ff0000}radius{color} {color:#ff0000}pppd_compat{color} {color:#ff0000}auth_mschap_v2{color} {color:#ff0000}shaper{color} |
|
[radius] |
*\[core\]* |
verbose=5 {color:#008000}thread-count=1{color} |
nas-identifier=accel-ppp {color:#0000ff}log-error=/var/log/accel-ppp/core.log{color} |
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] |
*\[common\]* |
verbose=0 {color:#0000ff}single-session=replace{color} |
telnet=127.0.0.1:2000 {color:#0000ff}sid-source=urandom{color} |
tcp=127.0.0.1:2001 {color:#0000ff}check-ip=1{color} |
|
[ipoe] |
*\[log\]* |
verbose=1 {color:#0000ff}log-file=/var/log/accel-ppp/accel-ppp.log{color} |
ifcfg=1 {color:#0000ff}log-emerg=/var/log/accel-ppp/emerg.log{color} |
shared=1 {color:#0000ff}log-fail-file=/var/log/accel-ppp/auth-fail.log{color} |
interface=enp0s8 {color:#0000ff}per-user-dir=/var/log/accel-ppp/users{color} |
mode=L2 {color:#0000ff}per-session=1{color} |
start=up {color:#ff0000}copy=1{color} |
calling-sid=mac {color:#ff0000}level=5{color} |
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] |
*\[radius\]* |
verbose=1 {color:#008000}nas-identifier=accel-ppp{color} |
called-sid=mac {color:#008000}nas-ip-address=192.168.1.130{color} |
interface=enp0s8 {color:#008000}gw-ip-address=192.168.0.100{color} |
{color:#008000}dae-server=192.168.1.130:3799,AccelCoASecret{color} server={color:#008000}192.168.1.156,AccelSharedSecret{color},{color:#ff0000}auth-port=1812,acct-port=0,req-limit=100,fail-timeout=0,max-fail=10,weight=1{color} server={color:#008000}192.168.1.156,AccelSharedSecret,{color}{color:#ff0000}auth-port=0,acct-port=1813,req-limit=100,fail-timeout=0,max-fail=10,weight=1{color} {color:#ff0000}sid-in-auth=1{color} {color:#0000ff}max-try=1{color} {color:#0000ff}timeout=3{color} |
|
[ppp] |
*\[cli\]* |
verbose=1 {color:#ff0000}telnet=127.0.0.1:2000{color} |
min-mtu=1280 {color:#ff0000}tcp=127.0.0.1:2001{color} |
mtu=1400 {color:#ff0000}verbose=5{color} |
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] |
*\[ipoe\]* |
dns1=8.8.8.8 {color:#008000}interface=enp0s8{color} |
dns2=8.8.4.4 {color:#008000}password=AccelCommonPassword{color} |
{color:#0000ff}calling-sid=mac{color} {color:#0000ff}check-mac-change=1{color} {color:#0000ff}idle-timeout=45{color} {color:#0000ff}unit-cache=10{color} {color:#ff0000}verbose=1{color} {color:#ff0000}ifcfg=1{color} {color:#ff0000}shared=1{color} {color:#ff0000}mode=L2{color} {color:#ff0000}start=up{color} {color:#ff0000}soft-terminate=0{color} {color:#ff0000}attr-l4-redirect=L4-Redirect{color} {color:#ff0000}l4-redirect-ipset=Block{color} |
|
[ip-pool] |
*\[pppoe\]* |
gw-ip-address=10.128.0.1 {color:#008000}interface=enp0s8{color} |
{color:#0000ff}called-sid=mac{color} {color:#ff0000}verbose=1{color} |
|
[pppd-compat] |
*\[ppp\]* |
verbose=1 {color:#0000ff}min-mtu=1280{color} |
ip-up=/etc/ppp/ip-up {color:#0000ff}mtu=1400{color} |
ip-down=/etc/ppp/ip-down {color:#0000ff}mru=1400{color} |
radattr-prefix=/var/run/radattr {color:#0000ff}ccp=1{color} |
{color:#0000ff}mppe=prefer{color} {color:#0000ff}ipv6=deny{color} {color:#0000ff}lcp-echo-interval=5{color} {color:#0000ff}lcp-echo-failure=3{color} {color:#0000ff}lcp-echo-timeout=45{color} {color:#0000ff}unit-cache=1{color} {color:#0000ff}unit-preallocate=1{color} {color:#ff0000}ipv4=require{color} {color:#ff0000}verbose=1{color} |
|
[shaper] |
*\[dns\]* |
verbose=1 {color:#008000}dns1=8.8.8.8{color} |
attr=Filter-Id {color:#008000}dns2=8.8.4.4{color} |
up-limiter=police down-limiter=htb |
|
[connlimit] |
*\[ip-pool\]* |
limit=10/min {color:#ff0000}gw-ip-address=10.128.0.1{color} |
burst=3 timeout=60 {code} |
|
*\[pppd-compat\]* {color:#ff0000}verbose=1{color} {color:#ff0000}ip-up=/etc/ppp/ip-up{color} {color:#ff0000}ip-down=/etc/ppp/ip-down{color} {color:#ff0000}radattr-prefix=/var/run/radattr{color} *\[shaper\]* {color:#0000ff}up-limiter=police{color} {color:#0000ff}down-limiter=htb{color} {color:#ff0000}verbose=1{color} {color:#ff0000}attr=Filter-Id{color} *\[connlimit\]* {color:#0000ff}limit=10/min{color} {color:#0000ff}burst=1{color} {color:#0000ff}timeout=60{color} {panel} |
h4. Словарь атрибутов RADIUS |
|
Нужно добавить одну строку в конец файла - атрибут для описания редиректа (блокировки абонента). {code:title=/usr/share/accel-ppp/radius/dictionary} |
... |
{code} |
h3. Включение форварда трафика и пропуск серых сетей {code:title=Включите форвард трафика} sysctl -w net.ipv4.ip_forward=1 {code} Чтобы послеперезагрузки форвард работал, откройте файл */etc/sysctl.conf* и добавьте в конец строку: {code:title=Дополнительная строка в /etc/sysctl.conf} net.ipv4.ip_forward=1 {code} Добавьте правила фаервола для пропуска трафика и маскарада серых сетей: {code:title=Необходимые правила фаервола} iptables -A FORWARD -j ACCEPT iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE {code} {code:title=Настройка сохранения правил фаервола при загрузке сервера} apt-get install iptables-persistent -y iptables-save > /etc/iptables/rules.v4 {code} h3. Блокировка должжников (ipset) Установите IPSET и службу восстановления правил при загрузке сервера {code:title=Установка ipset} apt install -y ipset ipset-persistent {code} Добавьте список для заблокированных {code:title=Создание списка заблокированных и настройка восстановления при загрузке сервера} ipset create Block hash:ip ipset save > /etc/iptables/ipsets{code} Добавьте правило фаервола для блокировки трафика должников и повторно сохранине настройки фаервола для восстановления при загрузке сервера. {code:title=Правило блокировки должников и сохранение настройки фаервола} iptables -I FORWARD -m set --match-set Block src -j DROP iptables-save > /etc/iptables/rules.v4 {code} h3. Отправка Netflow Установите программу fprobe: {code} apt install -y fprobe {code} |
h2. Billing |
h3. Словарь атрибутов RADIUS |
h3. Словарь атрибутов FreeRADIUS в Carbon Billing |
|
Нужно добавить одну строку ближе к концу файла. В принципе, можно и в самый конец, но разработчики FreeRADIUS предлогают добавить именно тут. Предлагаем последовать их совету. |
Создайте папку и скопируйте туда текущий словарь (зачем это нужно Вы можете узнать из статьи [CarbonBilling:Изменение системных файлов]) {code} mkdir -p /app/asr_billing/cfg/usr/share/freeradius/ cp /app/asr_billing/usr/share/freeradius/dictionary /app/asr_billing/cfg/usr/share/freeradius/dictionary {code} |
|
В словарь нужно добавить одну строку ближе к концу файла. В принципе, можно и в самый конец, но разработчики FreeRADIUS предлагают добавить именно тут. Давайте последуем их совету. |
{code:title=/app/asr_billing/cfg/usr/share/freeradius/dictionary} ... |
... |
{code} |
h3. Скриншоты настроек NAS |
Когда измените файл, перезапустите биллинг, чтобы изменения применились: {code}/app/asr_billing/service restart{code} |
|
h3. Скриншоты настроек NAS |
!Accel Описание, основные настройки.png|border=0,width=800! |
... |
h3. Скрипт управления session |
* Скрипт реализует только основные команды: установка шейпера, блокировка (однинаковое поведение на любые виды блокировок) и снятие блокировки. |
* Команда user_info покажет данные BRAS и проведёт базовую сетевую диагностику, и при отсутствии связи с абонентом может выполняться 3-5 секунд. * События, вызываемые при авторизации, не будут отправлены - они не нужны, так как шейпер и статус блокировки в RADIUS атрибутах. |
... |
. $(dirname $BASH_SOURCE)/../bin/session |
|
### ### Документация по custom схемам OSS находится здесь: |
... |
__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=$? |
... |
# Приходит при нажатии кнопки 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 '<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>' |
... |
# Приходит при деактивации услуги |
usluga_deactivated(){ |
: } {code} |
h1. Прочая информация и примеры |
h2. Примеры запросов в журнале RADIUS в режиме повышенной отладки |
... |
h3. Интерфейсы |
*{color:red}!!!TODO идея: очень запутанная формулировка про 100.64.0.1, переделать {color}* |
{tip} Заметьте, что: * Интерфейса enp0s8 нет в выводе. Причина - на нём отсутствует адрес IPv4, так и должно быть. |
* IP 100.64.0.1 одновременно на интерфейсах enp0s3 и ipoe0. Это тоже правильно - IP шлюза для абонентов IPoE должен быть на любом физичеком или bond интерфейсе, *кроме того, за которым абоненты находятся* |
* IP 100.64.0.1 - это IP шлюза для IPoE абонентов, он одновременно настроен на интерфейсах enp0s3 и ipoe0. Это особенность работы Accel. IP шлюза должен быть настроен, но настроить его нужно на любом интерфейсе, кроме того за которым располагаются абоненты. Возможно, это особенность выбранной версии или тестовой среды. |
{tip} |
... |