IPoE Accel-ppp Q-in-Q Mode
Материал из BiTel WiKi
Внимание! Данное решение/метод/статья относится к версии 6.1,6.2,7.0 и для других версий может быть неактуальна! Вам нужно самостоятельно поправить решение под свои нужды или воспользоваться помощью на форуме. Будем признательны, если внизу страницы или отдельной статьёй вы разместите исправленное решение для другой версии или подсказки что надо исправить.
Схема в общих чертах. Для максимальной простоты настройки 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