... * *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* \- опции определяют детализацию журнала сервера. Лучше оставьте детализацию максимальной, это сэкономит время при отладке возникающих проблем в процессе эксплуатации
|
... {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}ipoe{color} {color:#ff0000}radius{color} {color:#ff0000}pppd_compat{color} {color:#ff0000}auth_mschap_v2{color} {color:#ff0000}shaper{color} *\[core\]* {color:#008000}thread-count=1{color} {color:#0000ff}log-error=/var/log/accel-ppp/core.log{color} *\[common\]* {color:#0000ff}single-session=replace{color} {color:#0000ff}sid-source=urandom{color} {color:#0000ff}check-ip=1{color} *\[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:#0000ff}log-fail-file=/var/log/accel-ppp/auth-fail.log{color} {color:#0000ff}per-user-dir=/var/log/accel-ppp/users{color} {color:#0000ff}per-session=1{color} {color:#ff0000}copy=1{color} {color:#ff0000}level=5{color} *\[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:#0000ff}sid-in-auth=1{color} {color:#0000ff}max-try=1{color} {color:#0000ff}timeout=3{color} *\[cli\]* {color:#0000ff}verbose=0{color} {color:#ff0000}telnet=127.0.0.1:2000{color} {color:#ff0000}tcp=127.0.0.1:2001{color} {color:#ff0000}verbose=5{color} *\[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:#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} *\[pppoe\]* {color:#008000}interface=enp0s8{color} {color:#0000ff}called-sid=mac{color} {color:#ff0000}verbose=1{color} *\[ppp\]* {color:#0000ff}min-mtu=1280{color} {color:#0000ff}mtu=1400{color} {color:#0000ff}mru=1400{color} {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} *\[dns\]* {color:#008000}dns1=8.8.8.8{color} {color:#008000}dns2=8.8.4.4{color} *\[ip-pool\]* {color:#ff0000}gw-ip-address=10.128.0.1{color} *\[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=3{color} {color:#0000ff}timeout=60{color} {panel} h4. Словарь атрибутов RADIUS Нужно добавить одну строку в конец файла - атрибут для описания редиректа (блокировки абонента). {code:title=/usr/share/accel-ppp/radius/dictionary} ... ATTRIBUTE L4-Redirect 242 integer {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: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 Нужно добавить одну строку ближе к концу файла. В принципе, можно и в самый конец, но разработчики 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! h3. Скрипт управления session * Скрипт реализует только основные команды: установка шейпера, блокировка (однинаковое поведение на любые виды блокировок) и снятие блокировки. * Команда user_info покажет данные BRAS и проведёт базовую сетевую диагностику, и при отсутствии связи с абонентом может выполняться 3-5 секунд. * События, вызываемые при авторизации, не будут отправлены - они не нужны, так как шейпер и статус блокировки в RADIUS атрибутах. {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(){ : } {code} h1. Прочая информация и примеры h2. Примеры запросов в журнале RADIUS в режиме повышенной отладки h3. Access-Request {code:title=IPoE} rad_recv: Access-Request packet from host 192.168.1.130 port 53835, id=1, length=153 User-Name = "100.64.0.2" NAS-Identifier = "accel-ppp" NAS-IP-Address = 192.168.1.130 NAS-Port = 4 NAS-Port-Id = "ipoe0" NAS-Port-Type = Ethernet Calling-Station-Id = "08:00:27:a3:36:f3" Called-Station-Id = "enp0s8" Framed-IP-Address = 100.64.0.2 Acct-Session-Id = "0c56614294fc0ffa" User-Password = "AccelCommonPassword" {code} {code:title=PPPoE, PAP} rad_recv: Access-Request packet from host 192.168.1.130 port 54164, id=1, length=147 User-Name = "test" NAS-Identifier = "accel-ppp" NAS-IP-Address = 192.168.1.130 NAS-Port = 0 NAS-Port-Id = "ppp0" NAS-Port-Type = Virtual Service-Type = Framed-User Framed-Protocol = PPP Calling-Station-Id = "08:00:27:37:99:4e" Called-Station-Id = "08:00:27:de:c9:cb" Acct-Session-Id = "332815f09a46e2a2" User-Password = "servicemode" {code} {code:title=PPPoE, MS-CHAP2} rad_recv: Access-Request packet from host 192.168.1.130 port 36736, id=1, length=211 User-Name = "test" NAS-Identifier = "accel-ppp" NAS-IP-Address = 192.168.1.130 NAS-Port = 0 NAS-Port-Id = "ppp0" NAS-Port-Type = Virtual Service-Type = Framed-User Framed-Protocol = PPP Calling-Station-Id = "08:00:27:37:99:4e" Called-Station-Id = "08:00:27:de:c9:cb" Acct-Session-Id = "478dd8f06d2939d0" MS-CHAP-Challenge = 0x273ac9a62f91d9a56b66fb05cf47209c MS-CHAP2-Response = 0x0100374c413999dc31e3b824fd55804443d9000000000000000025ba423765744584b7794c0c20865a39d1b6acf711637b14 {code} h3. Access-Accept, интернет есть IPoE {code:title=IPoE} Sending Access-Accept of id 1 to 192.168.1.130 port 53835 Acct-Interim-Interval := 600 Framed-IP-Address := 100.64.0.2 Filter-Id := "1024/1024" {code} {code:title=PPPoE, PAP} Sending Access-Accept of id 1 to 192.168.1.130 port 50421 Framed-Protocol = PPP Acct-Interim-Interval := 600 Framed-IP-Address := 10.100.0.2 Filter-Id := "1024/1024" {code} {code:title=PPPoE, MS-CHAP2} Sending Access-Accept of id 1 to 192.168.1.130 port 46953 Framed-Protocol = PPP Acct-Interim-Interval := 600 Framed-IP-Address := 10.100.0.2 Filter-Id := "1024/1024" MS-CHAP2-Success = 0x01533d36383044333637384539314430424233393135303041444444303045313341433339414230334636 MS-MPPE-Recv-Key = 0x023bc092ddc84523b515fdb167f5be32 MS-MPPE-Send-Key = 0x93d347f317f8adf76964ca06744a94e3 MS-MPPE-Encryption-Policy = 0x00000002 MS-MPPE-Encryption-Types = 0x00000006 {code} h3. Access-Accept, заблокирован, любая блокировка {code:title=IPoE} Sending Access-Accept of id 1 to 192.168.1.130 port 50181 Acct-Interim-Interval := 600 Framed-IP-Address := 100.64.0.2 Filter-Id := "1024/1024" L4-Redirect = 1 {code} {code:title=PPPoE, PAP} Sending Access-Accept of id 1 to 192.168.1.130 port 54164 Framed-Protocol = PPP Acct-Interim-Interval := 600 Framed-IP-Address := 10.100.0.2 Filter-Id := "1024/1024" L4-Redirect = 1 {code} {code:title=PPPoE, MS-CHAP2} Sending Access-Accept of id 1 to 192.168.1.130 port 35918 Framed-Protocol = PPP Acct-Interim-Interval := 600 Framed-IP-Address := 10.100.0.2 Filter-Id := "1024/1024" L4-Redirect = 1 MS-CHAP2-Success = 0x01533d39314432323237433141353742363231443339433336334444424243353635353042443730393434 MS-MPPE-Recv-Key = 0x368a939a3bbec61aef450266efafff6b MS-MPPE-Send-Key = 0xb73d88628a05d65e83f97bbf24459fe8 MS-MPPE-Encryption-Policy = 0x00000002 MS-MPPE-Encryption-Types = 0x00000006 {code} h2. Состояние сессий и интерфейсов на Accel при активных абонентах h3. Интерфейсы {color:red}*\!\!\!TODO: очень запутанная формулировка про 100.64.0.1, переделать{*}{color} {tip} Заметьте, что: * Интерфейса enp0s8 нет в выводе. Причина - на нём отсутствует адрес IPv4, так и должно быть. * IP 100.64.0.1 одновременно на интерфейсах enp0s3 и ipoe0. Это тоже правильно - IP шлюза для абонентов IPoE должен быть на любом физичеком или bond интерфейсе, *кроме того, за которым абоненты находятся* {tip} {code:title=ip -4 a} 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 inet 192.168.1.130/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet 100.64.0.1/24 brd 100.64.0.255 scope global enp0s3 valid_lft forever preferred_lft forever 8: ppp0: <POINTOPOINT,UP,LOWER_UP> mtu 1492 qdisc htb state UNKNOWN group default qlen 3 inet 10.128.0.1 peer 10.100.0.2/32 scope global ppp0 valid_lft forever preferred_lft forever 9: ipoe0: <POINTOPOINT,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UNKNOWN group default qlen 100 inet 100.64.0.1 peer 100.64.0.2/32 scope global ipoe0 valid_lft forever preferred_lft forever {code} h3. Сессии {code:title=accel-cmd show sessions} ifname | username | calling-sid | ip | rate-limit | type | comp | state | uptime --------+------------+-------------------+------------+------------+-------+------+--------+---------- ipoe0 | 100.64.0.2 | 08:00:27:a3:36:f3 | 100.64.0.2 | 1024/1024 | ipoe | | active | 00:00:24 ppp0 | test | 08:00:27:37:99:4e | 10.100.0.2 | 1024/1024 | pppoe | | active | 00:00:17 {code}
|