ABillS: Установка и настройка accel-ipoe

Возможности

  • MAC атворизация
  • L2/L3
  • Unnubered IP
  • Выдача адресов через RADIUS
  • QinQ

В работе:

Сервер: 2*Intel(R) Xeon(R) CPU X5650 @ 2.67GHz / 8G / SSD Samsung 850 Pro 128 Gb
Сетевая: 2*Intel(R) 10 Gigabit Network Connection 82599
ОС: Ubuntu 16.04

Создаем vlan интерфейсы

Настройка Accel-Ipoe

Ubuntu 12.4/14.4

apt-get update

cd /usr/src
apt-get install make cmake libcrypto++-dev libssl-dev libpcre3 libpcre3-dev git lua5.1 liblua5.1-0-dev
apt-get install linux-headers-`uname -r` 

для 12.04

git clone git://git.code.sf.net/p/accel-ppp/code accel-ppp.git  

для 14.04

wget http://netix.dl.sourceforge.net/project/accel-ppp/accel-ppp-1.10.0.tar.bz2
tar -xjf accel-ppp-1.10.0.tar.bz2
mkdir accel-ppp-build
cd accel-ppp-build

для 12.04

cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DKDIR=/usr/src/linux-headers-`uname -r` -DRADIUS=TRUE -DSHAPER=TRUE -DLOG_PGSQL=FALSE -DLUA=TRUE -DBUILD_IPOE_DRIVER=TRUE ../accel-ppp.git

для 14.04

cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DKDIR=/usr/src/linux-headers-`uname -r` -DRADIUS=TRUE -DSHAPER=TRUE -DLOG_PGSQL=FALSE -DLUA=TRUE -DBUILD_IPOE_DRIVER=TRUE ../accel-ppp-1.10.0
make
make install

подключение модуля в системе

insmod /usr/src/accel-ppp-build/drivers/ipoe/driver/ipoe.ko

Ручная настройка

Скрипт автозапуска

nano /etc/init.d/accel-ppp

вставляем

#!/bin/sh
# /etc/init.d/accel-ppp: set up the accel-ppp server
### BEGIN INIT INFO
# Provides:          accel-ppp
# Required-Start:    $networking
# Required-Stop:     $networking
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

set -e

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin;
ACCEL_PPTPD=`which accel-pppd`
. /lib/lsb/init-functions

if test -f /etc/default/accel-ppp; then
    . /etc/default/accel-ppp
fi

if [ -z $ACCEL_PPPTD_OPTS ]; then
  ACCEL_PPTPD_OPTS="-c /etc/accel-ppp.conf"
fi

case "$1" in
  start)
        log_daemon_msg "Starting accel-ppp server" "accel-pppd"
        if [ x`lsmod |awk /ipoe/'{print $1}'` = x ]; then
          insmod /usr/src/accel-ppp-build/drivers/ipoe/driver/ipoe.ko
        fi
        if start-stop-daemon --start --quiet --oknodo --exec $ACCEL_PPTPD -- -d -p /var/run/accel-pppd.pid $ACCEL_PPTPD_OPTS; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
  ;;
  restart)
        log_daemon_msg "Restarting accel-ppp server" "accel-pppd"
        if [ x`lsmod |awk /ipoe/'{print $1}'` = x ]; then
          insmod /usr/src/accel-ppp-build/drivers/ipoe/driver/ipoe.ko
        fi
        start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile /var/run/accel-pppd.pid
        if start-stop-daemon --start --quiet --oknodo --exec $ACCEL_PPTPD -- -d -p /var/run/accel-pppd.pid $ACCEL_PPTPD_OPTS; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
  ;;

  stop)
        log_daemon_msg "Stopping accel-ppp server" "accel-pppd"
        start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile /var/run/accel-pppd.pid
        log_end_msg 0
  ;;

  status)
    do_status
  ;;
  *)
    log_success_msg "Usage: /etc/init.d/accel-ppp {start|stop|status|restart}"
    exit 1
    ;;
esac

exit 0
chmod +x /etc/init.d/accel-ppp
update-rc.d accel-ppp defaults
  

Создаем файл lua

nano /etc/accel-ppp.lua

вставляем

function username(pkt)
return pkt:hdr('chaddr')
end

Ротация логов

nano  /etc/logrotate.d/accel-ppp

вставляем

/var/log/accel-ppp/*.log {
      rotate 7
      daily
      size=100M
      compress
      missingok
      sharedscripts
      postrotate
              test -r /var/run/accel-pppd.pid && kill -HUP `cat /var/run/accel-pppd.pid`
      endscript
}

Dictionary

nano /usr/local/share/accel-ppp/radius/dictionary

Дописываем в конец

ATTRIBUTE DHCP-Router-IP-Address 241 ipaddr
ATTRIBUTE DHCP-Mask              242 integer
ATTRIBUTE L4-Redirect      243 integer
ATTRIBUTE L4-Redirect-ipset      244 string
ATTRIBUTE DHCP-Option82          245 octets

# Limit session traffic
ATTRIBUTE Session-Octets-Limit 227 integer
# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
ATTRIBUTE Octets-Direction 228 integer
# Connection Speed Limit
ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-1 232 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-1 233 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-2 234 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-2 235 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-3 236 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-3 237 integer
ATTRIBUTE Acct-Interim-Interval 85 integer
ATTRIBUTE Acct-Input-Gigawords    52      integer
ATTRIBUTE Acct-Output-Gigawords   53      integer

Файл конфигурации

nano /etc/accel-ppp.conf

вставляем

#ABillS
[modules]
log_file
radius
ipoe
ippool
shaper
pptp
pppoe
auth_mschap_v2
auth_pap
auth_chap_md5
auth_mschap_v1
chap-secrets
sigchld
#pppd_compat


[core]
log-error=/var/log/accel-ppp/core.log
thread-count=1

#[common]
#single-session=replace
#sid-case=upper
#sid-source=seq

[radius]
dictionary=/usr/local/share/accel-ppp/radius/dictionary
#nas-identifier=accel-ipoe
# IP адрес каким радиус будет видеть accel
nas-ip-address=192.168.1.1
# IP адрес радиуса
server=127.0.0.1,radsecret,auth-port=1812,acct-port=1813,req-limit=50,fail-timeout=0,max-fail=10,weight=1
# Тот же адрес что и у nas-ip-address
dae-server=192.168.1.1:3799,radsecret
verbose=100
attr-tunnel-type=NAS-Identifier
gw-ip-address=192.168.1.1

[ipoe]
verbose=100
username=lua:username
lua-file=/etc/accel-ppp.lua
lease-time=300
max-lease-time=300
attr-dhcp-client-ip=Framed-IP-Address
gw-ip-address=10.0.0.1/24
proxy-arp=1
shared=1
ifcfg=1
mode=L2
start=dhcpv4
interface=eth0
#agent-remote-id=accel-ppp
attr-dhcp-opt82=DHCP-Option82

#[ip-pool]
#gw-ip-address=192.168.0.1/24
#attr=Framed-Pool
#192.168.0.2-254,name=pool1

#[lcp]
#echo-interval=30
#echo-failure=3

[pptp]
bind=192.168.1.1
verbose=1
mppe=allow
echo-interval=30

[ppp]
verbose=1
min-mtu=1400
mtu=1492
mru=1492
#ccp=0
#sid-case=lower
mppe=allow
#ipv4=require
#lcp-echo-interval=3
#lcp-echo-failure=9

[pppoe]
interface=eth0
nas-identifier=accel-pppoe
#ac-name=xxx
#service-name=yyy
#pado-delay=0
#pado-delay=0,100:100,200:200,-1:500
#ifname-in-sid=called-sid
#tr101=1
verbose=1

[client-ip-range]
#10.0.0.0/8

[dns]
dns1=8.8.8.8

[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
#per-user-dir=per_user
#per-session-dir=per_session
#per-session=1
level=100

[shaper]
attr=Filter-Id
#down-burst-factor=0.1
#up-burst-factor=1.0
#latency=50
#mpu=0
#mtu=0
#r2q=10
#quantum=1500
#moderate-quantum=1
#hightspeed shaper
ifb=ifb0
cburst=1534
up-limiter=htb
down-limiter=htb
#low speed shaper
#up-limiter=police
#down-limiter=tbf
#leaf-qdisc=sfq perturb 10
#leaf-qdisc=fq_codel [limit PACKETS] [flows NUMBER] [target TIME] [interval TIME] [quantum BYTES] [[no]ecn]
#rate-multiplier=1
#fwmark=1
attr-down=PPPD-Downstream-Speed-Limit
attr-up=PPPD-Upstream-Speed-Limit
verbose=10

[pppd-compat]
#ip-up=/etc/ppp/ip-up
#ip-down=/etc/ppp/ip-down
#radattr-prefix=/var/run/radattr
verbose=1

[cli]
verbose=100
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001
password=radsecret

[snmp]
master=0
agent-name=accel-ppp

[connlimit]
limit=10/min
burst=3
timeout=60

Добавить пары в словарь radius

raddb/dictionary

ATTRIBUTE DHCP-Router-IP-Address 241 ipaddr
ATTRIBUTE DHCP-Mask              242 integer
ATTRIBUTE L4-Redirect      243 integer
ATTRIBUTE L4-Redirect-ipset      244 string
ATTRIBUTE DHCP-Option82          245 octets
# Limit session traffic
ATTRIBUTE Session-Octets-Limit 227 integer
# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
ATTRIBUTE Octets-Direction 228 integer
# Connection Speed Limit
ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-1 232 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-1 233 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-2 234 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-2 235 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-3 236 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-3 237 integer
ATTRIBUTE Acct-Interim-Interval 85 integer
ATTRIBUTE Acct-Input-Gigawords    52      integer
ATTRIBUTE Acct-Output-Gigawords   53      integer

Быстрая настройка

cd /usr/abills/misc/
./autoconf PROGRAMS=accel_ppp

**accel-ppp.conf**

FREERADIUS выдает только ip адреса поэтому для каждого раздаваемого пула в разделе [ipoe] указывайте шлюз и маску.

gw-ip-address=10.0.0.1/24

Настройка ABillS

/ Настройки / Сервера доступа

Alive: Время между RADIUS Alive пакетами. Рекомендуется 300
Nas-Identifier Если совместно используете PPPoE и IPoE в это поле нужно ввести ipoe
Type: Linux accel-ipoe
IP:PORT: Ип адрес и порт сервера. Порт по умолчанию 3799 и 2001 для telnet. (127.0.0.1:3799:2001)
Password: пароль для Disconnect Message указывается в параметре конфигурационного файла /etc/accel-ppp.conf, также этот пароль используется как RADIUS secret

Внимание

Если совместно используются на одном физическом сервере accel ipoe и pppoe или pptp тогда для каждого сервиса нужно завести отдельный NAS в биллинге, а в поле Nas-Identifier настроек сервера доступа указать тип сервиса (ipoe, pppoe или pptp) ив поле Тип выбрать для IPOE - accel_ipoe, а для pppoe и pptp - accel_ppp

config.pl

Дополнительные опции

$conf{NAS_PORT_AUTH}=1; Авторизоваться абонента с учётом его порта подключения (SWITCH,PORT). Мак адрес не учитывается. Система следит что бы на порту было не больше 1 автоматизированного абонента.
$conf{DHCPHOSTS_SWITCH_MAC_AUTH}='1,2,…'; Список коммутаторов в которых принудительно авторизировать по мак адресу при включённой опции $conf{DHCPHOSTS_PORT_BASE}
$conf{AUTH_EXPR_DEBUG}=1; Режимы отладки
1 - Режим сессий (файл: /tmp/rad_dhcp)
2 - Режим ответов авторизации. (Файл: /tmp/rad_reply)
3 - Режим выражений для проверки параметров Option 82 (Файл /tmp/dhcphosts_expr)
$conf{AUTH_EXPR}='-'; Так как производители оборудования (коммутаторов) не всегда придерживаются стандартов при формирование запросов DHCP Option 82 в системе была создана возможность задать регулярное выражение для получения нужных параметров из DHCP запроса . Использовать дополнительные выражения для получения корректных данных с запросов от коммутаторов в которых параметры опции 82 отличаются от стандартных.
формат выражения через точку с запятой:
радиус_пара:условия:переменные:hex2ansii;условия переменные….

радиус_пара - радиус пара запроса
условия - условия поиска Perl выражение
переменные - переменные результата VLAN PORT MAC MAC_DEC (если мак не нужно преобразовывать в шестнадцатеричный из десятеричного) PORT_DEC (если не нужно преобразовывать порт из десятеричного в шестнадцатеричный формата)
hex2ansii - если указан єтот параметр система перед вычислением нужных переменных преобразует строку с шестнадцатеричного формата в текстовый


система м получении параметра проверяет нужно ли использовать внешние выражения если да начинает проходится по списку при попадании в параметры перебор прекращается и система подставляет выбранные VLAN PORT MAC MAC_DEC (если мак не нужно приобразовывать в десятичный форма из шестнадцатиричного) PORT_DEC (если не нужно приобразовывать порт из десятеричного шестнадцатиричного формата) в DHCP-Agent-Circuit-Id и DHCP-Agent-Remote-Id дальше уже идут стандартные процедуры работы с DHCP. При включении выражений система отключает шаблон по умолчанию для распознавания коммутаторов. Примеры выражений
$conf{AUTH_PARAMS}=1; Авторизация по совокупности заполненных параметров MAC,PORT,VLAN,NAS_ID
При использовании данной опции отключите $conf{DHCPHOSTS_PORT_BASE}

После внесения каких либо изменений по модулю в конфигурационный файл перезагружайте RADIUS

Ошибки

Если что то работает не так как планировалось смотрите логи в /var/log/accel-ppp/

Дополнительно

Who's online

There are currently 0 users and 2 guests online.