Пример. Accel-PPP, PPPoE + IPoE L2

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (80)

просмотр истории страницы
h1. Описание

Схема сдвоенная схема для PPPoE и IPoE одновременно - такую гибкость настройки позволяет Accel.

IPoE подразумевает работу в одном широковещательном сигменте с клиентами, авторизация происходит по некзассифицированному пакету.
IPoE подразумевает работу в одном широковещательном сигменте с клиентами, авторизация происходит по первому пакету, если на IP ещё не существует сессии (L2, unclassified packet).

Схема проверялась на Debian 10 и Ubuntu 20.04
Схема проверялась на *Debian 10* и *Ubuntu Server 20.04*

h1. Настройка

h2. Параметры серверов Accel и биллинга

* *Внешний 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
* *DNS для абонентов PPPoE*: dns1=8.8.8.8, dns2=8.8.4.4

h2. BRAS

{code:title=Дополнительное ПО}apt install -y tcpdump{code}

h3. Что нужно поменять в конфигурационных файлах
h3. Листинги конфигурационных файлов

{color:red}*\!\!\!TODO идея: сделать расписанный лог красным/зелёным/синим с пояснениями{*}{color}
h4. Конфигурационный файл Accel

{color:red}{*}TODO: описать эти опции наглядней{*}{color}
{color:#008000}Зелёным обозначено что{color} {color:#008000}{*}нужно поменять{*}{color} {color:#008000}в конфигурационных файлах{color}
{color:#0000ff}Синим обозначено что{color} {color:#0000ff}{*}поменять можно, но лучше оставить{*}{color} {color:#0000ff}как в примере{color}
{color:#ff0000}Красным обозначено что менять{color} {color:#ff0000}{*}не следует{*}{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
* \[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

h3. Что можно поменять, но не обязательно

* *DNS для абонентов PPPoE*: dns1=8.8.8.8, dns2=8.8.4.4
{panel}
h3. Что менять не следует
*\[modules\]*
{color:#0000ff}ippool{color}
{color:red}{*}TODO: описать эти опции наглядней{*}{color}
{color:#0000ff}auth_mschap_v1{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* \- сильно упростит
{color:#0000ff}auth_chap_md5{color}
h3. Листинги конфигурационных файлов
{color:#0000ff}auth_pap{color}
h4. Конфигурационный файл Accel

{panel:title=/etc/accel-ppp.conf}
\[modules\]
{color:#0000ff}ippool{color}
{color:#0000ff}auth_mschap_v1{color}
{color:#0000ff}auth_chap_md5{color}
{color:#0000ff}auth_pap{color}
{color:#ff0000}log_file{color}
{color:#ff0000}pppoe{color}
{color:#ff0000}radius{color}
{color:#ff0000}pppd_compat{color}
{color:#ff0000}auth_mschap_v2{color}
{color:#ff0000}shaper{color}

\[core\]
*\[core\]*
{color:#008000}thread-count=1{color}
{color:#0000ff}log-error=/var/log/accel-ppp/core.log{color}

\[common\]
*\[common\]*
{color:#0000ff}single-session=replace{color}
{color:#0000ff}sid-source=urandom{color}
{color:#0000ff}check-ip=1{color}

\[log\]
*\[log\]*
{color:#0000ff}log-file=/var/log/accel-ppp/accel-ppp.log{color}
{color:#0000ff}log-emerg=/var/log/accel-ppp/emerg.log{color}
{color:#ff0000}level=5{color}

\[radius\]
*\[radius\]*
{color:#008000}nas-identifier=accel-ppp{color}
{color:#008000}nas-ip-address=192.168.1.130{color}
{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:#008000}dae-server=192.168.1.130:3799,AccelCoASecret{color} {color:#ff0000}sid-in-auth=1{color}
{color:#0000ff}sid-in-auth=1{color}
{color:#0000ff}max-try=1{color}
{color:#0000ff}timeout=3{color}

\[cli\]
{color:#0000ff}verbose=0{color}
*\[cli\]*
{color:#ff0000}telnet=127.0.0.1:2000{color}
{color:#ff0000}tcp=127.0.0.1:2001{color}
{color:#ff0000}verbose=5{color}

\[ipoe\]
*\[ipoe\]*
{color:#008000}interface=enp0s8{color}
{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:#008000}interface=enp0s8{color}
{color:#ff0000}mode=L2{color}
{color:#ff0000}start=up{color}
{color:#0000ff}calling-sid=mac{color}
{color:#0000ff}check-mac-change=1{color}
{color:#ff0000}soft-terminate=0{color}
{color:#0000ff}idle-timeout=45{color}
{color:#008000}password=AccelCommonPassword{color}
{color:#ff0000}attr-l4-redirect=L4-Redirect{color}
{color:#ff0000}l4-redirect-ipset=Block{color}
{color:#0000ff}unit-cache=10{color}

\[pppoe\]
{color:#ff0000}verbose=1{color}
{color:#0000ff}called-sid=mac{color}
*\[pppoe\]*
{color:#008000}interface=enp0s8{color}
{color:#0000ff}called-sid=mac{color}
\[ppp\]
{color:#ff0000}verbose=1{color}

*\[ppp\]*
{color:#0000ff}min-mtu=1280{color}
{color:#0000ff}mtu=1400{color}
{color:#0000ff}ccp=1{color}
{color:#0000ff}mppe=prefer{color}
{color:#ff0000}ipv4=require{color}
{color:#0000ff}ipv6=deny{color}
{color:#0000ff}lcp-echo-interval=5{color}
{color:#0000ff}unit-cache=1{color}
{color:#0000ff}unit-preallocate=1{color}
{color:#ff0000}ipv4=require{color}
{color:#ff0000}verbose=1{color}

\[dns\]
*\[dns\]*
{color:#008000}dns1=8.8.8.8{color}
{color:#008000}dns2=8.8.4.4{color}

\[ip-pool\]
*\[ip-pool\]*
{color:#ff0000}gw-ip-address=10.128.0.1{color}

\[pppd-compat\]
*\[pppd-compat\]*
{color:#ff0000}verbose=1{color}
{color:#ff0000}ip-up=/etc/ppp/ip-up{color}
{color:#ff0000}radattr-prefix=/var/run/radattr{color}

\[shaper\]
{color:#ff0000}verbose=1{color}
{color:#ff0000}attr=Filter-Id{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\]
*\[connlimit\]*
{color:#0000ff}limit=10/min{color}
{color:#0000ff}burst=31{color}
{color:#0000ff}timeout=60{color}
{panel}
iptables -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
{code}
{code:title=Настройка сохранения правил фаервола при загрузке сервера}
apt-get install iptables-persistent -y
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}

Когда измените файл, перезапустите биллинг, чтобы изменения применились:
{code}/app/asr_billing/service restart{code}

h3. Скриншоты настроек NAS

. $(dirname $BASH_SOURCE)/../bin/session



###
### Документация по custom схемам OSS находится здесь:
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}