IPoE Accel-ppp Q-in-Q Mode
Материал из BiTel WiKi
Внимание! Данное решение/метод/статья относится к версии 6.1,6.2,7.0 и для других версий может быть неактуальна! Вам нужно самостоятельно поправить решение под свои нужды или воспользоваться помощью на форуме. Будем признательны, если внизу страницы или отдельной статьёй вы разместите исправленное решение для другой версии или подсказки что надо исправить.
zavndw[at]gmail.com
Схема в общих чертах. Для максимальной простоты настройки Q-in-Q на accel-ppp с авторизацией по radius, номера S-Vlan и C-Vlan подставляются в логин пользователя. Скрипт обрезает все лишнее и дальше привычным образом происходит авторизация и шейпинг средствами accel-ppp.
У меня конфигурация accel-ppp расположена тут /etc/accel-ppp.conf
[modules] log_file ipoe auth_mschap_v2 auth_mschap_v1 auth_chap_md5 auth_pap radius ippool pppd_compat shaper #net-snmp #logwtmp #connlimit [core] log-error=/var/log/accel-ppp/core.log thread-count=4 [ipoe] verbose=5 username=lua:username shared=0 ifcfg=1 mode=L2 start=dhcpv4 ip-unnumbered=1 lua-file=/etc/accel-ppp.lua offer-delay=0,100:100,200:200,-1:1000 vlan-mon=e0.1000,1-4095 vlan-name=%I.%N interface=re:e0.1000\.\d{4} gw-ip-address=10.200.0.1/16 [dns] dns1=8.8.8.8 dns2=8.8.4.4 [radius] dictionary=/usr/local/share/accel-ppp/radius/dictionary nas-identifier=accel-ppp nas-ip-address=10.163.0.5 server=10.163.0.3,secret,auth-port=1912,acct-port=1913,req-limit=50,fail-timeout=0,max-fail=10,weight=1 dae-server=10.163.0.5:3799,secret verbose=5 [client-ip-range] 10.0.0.0/8 192.168.0.0/16 [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 copy=1 color=1 level=5 [log-pgsql] conninfo=user=log log-table=log [pppd-compat] ip-up=/etc/ppp/ip-up ip-down=/etc/ppp/ip-down ip-change=/etc/ppp/ip-change radattr-prefix=/var/run/radattr verbose=1 [shaper] vendor=Cisco attr=Cisco-AVPair up-limiter=police down-limiter=tbf verbose=1 [cli] verbose=1 telnet=127.0.0.1:2000 tcp=127.0.0.1:2001 [snmp] master=0 agent-name=accel-ppp [connlimit] limit=10/min burst=3 timeout=60
Скрипт обрезающий в имени пользователя интерфейс, расположен тут /etc/accel-ppp.lua
function username(pkt) local username = string.sub(pkt:ifname(), string.find(pkt:ifname(), ".", 1, true)+1, 32) return username end
В биллинге при такой схеме заведен только брас:
Конфигурация типа устройства accel-ppp
# Таймаут перевода соединения в статус suspended при остутствии радиус пакетов connection.suspend.timeout=3600 # Таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout) connection.close.timeout=3600 # Режим поиска сервиса: 0 (по умолчанию) - по логину, 1 - по интерфейсу на устройстве (в предобработке должны быть # проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или INTERFACE_ID), 2 - по VLAN на устройстве (в предобработке # должны быть проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или VLAN_ID), 4 - по VLAN на устройстве или # дочернем устройстве (в предобработке должны быть проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или VLAN_ID), # 5 - по MAC-адресу на устройстве (в предобработке должна быть проставлена опция MAC_ADDRESS), 6 - по MAC-адресу на # устройстве или дочернем устройстве (в предобработке должна быть проставлена опция MAC_ADDRESS). radius.servSearchMode=0 # Нужно ли проверять пароль: 0 - нет, 1 (по умолчанию) - да. radius.password.verification=0 # Привязка кодов опций модуля к атрибутам # данные атрибуты будут выдаваться в AccessAccept при удачной авторизации и при наличии активных опций в тарифе или сервисе #radius.inetOption.1.attributes=Cisco-AVPair=lcp:interface-config#1=rate-limit input 2000000 8000 8000 conform-action transmit exceed-action drop;Cisco-AVPair=lcp:interface-config#1=rate-limit output 2000000 8000 8000 conform-action transmit exceed-action drop radius.inetOption.1.attributes=Cisco-AVPair=lcp:interface-config#1=rate-limit input 2000000 8000 8000 conform-action transmit exceed-action drop;Cisco-AVPair=lcp:interface-config#1=rate-limit output 2000000 8000 8000 conform-action transmit exceed-action drop radius.inetOption.2.attributes=Cisco-AVPair=lcp:interface-config#1=rate-limit input 5000000 8000 8000 conform-action transmit exceed-action drop;Cisco-AVPair=lcp:interface-config#1=rate-limit output 5000000 8000 8000 conform-action transmit exceed-action drop radius.inetOption.3.attributes=Cisco-AVPair=lcp:interface-config#1=rate-limit input 10000000 8000 8000 conform-action transmit exceed-action drop;Cisco-AVPair=lcp:interface-config#1=rate-limit output 10000000 8000 8000 conform-action transmit exceed-action drop radius.inetOption.4.attributes=Cisco-AVPair=lcp:interface-config#1=rate-limit input 20000000 8000 8000 conform-action transmit exceed-action drop;Cisco-AVPair=lcp:interface-config#1=rate-limit output 20000000 8000 8000 conform-action transmit exceed-action drop radius.inetOption.5.attributes=Cisco-AVPair=lcp:interface-config#1=rate-limit input 30000000 8000 8000 conform-action transmit exceed-action drop;Cisco-AVPair=lcp:interface-config#1=rate-limit output 30000000 8000 8000 conform-action transmit exceed-action drop radius.inetOption.6.attributes=Cisco-AVPair=lcp:interface-config#1=rate-limit input 50000000 8000 8000 conform-action transmit exceed-action drop;Cisco-AVPair=lcp:interface-config#1=rate-limit output 50000000 8000 8000 conform-action transmit exceed-action drop radius.inetOption.7.attributes=Cisco-AVPair=lcp:interface-config#1=rate-limit input 100000000 8000 8000 conform-action transmit exceed-action drop;Cisco-AVPair=lcp:interface-config#1=rate-limit output 100000000 8000 8000 conform-action transmit exceed-action drop dhcp.82.interfaceOptionCode=2