accelipoe_sample (устарел)

Установку Accel PPP можно осуществить практически на любой линукс, но предпочтительнее, согласно рекомендации разработчиков программы, использвать Debian. И мы рассмотрим процедуру установки именно на Debian 7 Wheezy.

1. Дистрибутив

Устанавливаем Debian последней стабильной версии (7.7) (Тестировалось также и на версии 7.6)

Для amd64

Для i386

2. Набор пакетов

Устанавливаем первоначально-необходимый набор пакетов, желательно на чистую ОС во избежании проблем со сборкой, зависимостями и т.д.

apt-get update

apt-get install git make vlan libnl-dev libnl-utils cmake git libcrypto++-dev libcrypto++9 libcrypto++-utils lua5.1 
liblua5.1-0-dev  libpcre++-dev  libpcre++0 libpcre3  libpcrecpp0 libsnmp-dev libipset-dev

apt-get install linux-headers-`uname -r` build-essential 

apt-get install cmake libssl-dev libpcre3-dev libnet-snmp-perl libtritonus-bin 

apt-get install mc wget sudo nload atop git tcpdump snmp snmpd  mtr tcpdump iftop iptraf atop ipset rcconf

3. Подготовка

Вы можете скачать последнюю версию исходного кода из https://sourceforge.net/projects/accel-ppp/files/latest/download?source=files или получить его из git

Выполним это из папки /opt/

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

Создаём директорию в которой cmake выполнит генерацию исходных кодов для компиляции

mkdir /opt/accel-ppp-code/build

Переходим в созданную директорию

cd /opt/accel-ppp-code/build

3.1 Сборка и установка:

Выполняем генерацию cmake

cmake [options] /path/to/accel-ppp-source

Опции сборки:

Вы можете настроить проект, чтобы включить или отключить некоторые функции, используя следующие параметры. Параметры не являются обязательными.

-DBUILD_PPTP_DRIVER=TRUE
    Данная опция позволяет включить в сборку модуль ядра PPTP. Если у вас версия ядра 2.6.37 или более поздней версии этот вариант не нужен, поскольку, начиная с 2.6.37 PPTP включен в исходный код ядра.
-DBUILD_IPOE_DRIVER=TRUE
    Данная опция позволяет включить в сборку модуль ядра IPoE. Этот модуль необходим, если вы хотите использовать IPoE в режиме общего интерфейса, или если вы намерены использовать vlan-mon для автоматического создания vlan
-DKDIR=/usr/src/linux
    Задает путь к директории исходного кода ядра Linux. Необходим, только для построения модуля ядра PPTP
-DCMAKE_INSTALL_PREFIX=/some/location
    Задает путь для установки accel-ppp. По умолчанию /usr/local.
-DLOG_PGSQL=TRUE
    Данная опция позволяет включить модуль сборки логов log_pgsql, для сохранения журнала событий в базе данных PostreSQL.
-DRADIUS=FALSE
    Отключение сборки модуля радиуса.
-DNETSNMP=TRUE
    Включает сборку модуля SNMP-агента.
-DLUA=TRUE
    Включает поддержку Lua (полезно только для IPoE DHCP option 82).
-DCMAKE_BUILD_TYPE=Debug
    Указывает, что сборка должна включать отладочную информацию. Необходима для выявления падений accel-ppp.
-DMEMDEBUG=TRUE
    Указывает, что сборка должна включать дополнительную информацию, для выявления утечки памяти. 

Итак выполняем поочередно (пути правим под свои):

а)

cmake -DBUILD_DRIVER=FALSE -DKDIR=/usr/src/linux-headers-`uname -r`/ -DSHAPER=TRUE -DRADIUS=TRUE /opt/accel-ppp-code -DNETSNMP=TRUE -DSHAPER=TRUE -DLOG_PGSQL=FALSE -DLUA=TRUE -DBUILD_IPOE_DRIVER=TRUE

Пример успешной подготовки

-- The C compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- 'x86_64'
-- Looking for timerfd_create
-- Looking for timerfd_create - found
-- Found Lua51: /usr/lib/x86_64-linux-gnu/liblua5.1.so;/usr/lib/x86_64-linux-gnu/libm.so (found version "5.1.5")
-- Looking for linux/netfilter/ipset/ip_set.h
-- Looking for linux/netfilter/ipset/ip_set.h - found
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    BUILD_DRIVER

-- Build files have been written to: /opt/accel-ppp-code/build

б)

make

Пример успешной компиляции Посмотреть можно здесь

Обязательно сравните с примером успешной сборки, ворнингов и ошибок быть не должно. Проверьте чтобы драйвер ipoe.ko скомпилировался без ошибок.

Scanning dependencies of target ipoe_drv
[100%] Generating driver/ipoe.ko
[100%] Built target ipoe_drv

Если что-то пошло не так, нехватает какой-то библиотеки или пакета, устранить ошибку и повторить процедуру сборки, удалив всё в каталоге build.

в)

make install

Пример успешной установки:

После установки можно посмотреть примеры настроек /etc/accel-ppp.conf.dist

Запускаем модули

insmod /opt/accel-ppp-code/build/drivers/ipoe/driver/ipoe.ko
modprobe 8021q

Включим модуль в автозагрузку

cat /etc/rc.local

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

4. Предварительная настройка.

4.1 Скрипт запуска

В каталоге с исходниками, что git'ом выкачивали, есть папка contrib. там лежит init-скрипт для Debian'а. Копируем его в папку /etc/init.d. Теперь в нем надо сделать небольшие изменения. Смотрим где у нас лежит accel-ppp:

# which accel-pppd
/usr/local/sbin/accel-pppd

Если ничего нет, то поищем его

find /usr | grep accel-pppd | less

Открываем /etc/init.d/accel-ppp-init в редакторе и заменяем /usr/sbin/accel-pppd на то, что показал вывод which.

Добавляем в автозагрузку скприпт accel-ppp-init через rcconf:

 [*] accel-ppp-init

4.2 Задаем оцпии для роутинга и L4-редиректа:

Делаем 1 РАЗ!

echo "100     accel/ipoe"  >> /etc/iproute2/rt_protos
echo "100     accel/ipoe"  >> /etc/iproute2/rt_tables

4.3 Поменяем некоторые опции стека TCP/IP

mcedit /etc/sysctl.conf

Форвардинг между интерфейсами и кол-во открытых соединений обязязательно

net.ipv4.ip_forward=1
net.ipv4.netfilter.ip_conntrack_max=9548576
net.netfilter.nf_conntrack_max=9548576

Далее по желанию и Вашим нуждам, что-то типа такого:

net.ipv4.neigh.default.gc_thresh1 = 1024
net.ipv4.neigh.default.gc_thresh2 = 2048
net.ipv4.neigh.default.gc_thresh3 = 4096
# turn off selective ACK and timestamps
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0

# memory allocation min/pressure/max.
# read buffer, write buffer, and buffer space
net.ipv4.tcp_rmem = 10000000 10000000 10000000
net.ipv4.tcp_wmem = 10000000 10000000 10000000
net.ipv4.tcp_mem = 10000000 10000000 10000000

net.core.rmem_max = 524287
net.core.wmem_max = 524287
net.core.rmem_default = 524287
net.core.wmem_default = 524287
net.core.optmem_max = 524287
net.core.netdev_max_backlog = 300000
net.core.netdev_tstamp_prequeue = 0

5. Настройка

В /etc есть болванка конфига accel-ppp.conf.dist, которую переименовываем в accel-ppp.conf, открываем в редакторе и настраиваем. Пример можно взять отсюда Настройка Accel-PPTP/Accel-PPoE как NAS для MikBiLL.

Описание конфигурационного файла

Ещё один пример минимальной настройки Q in Q влан на пользователя.

[modules]
#Бывает иногда нужно указать путь к библиотекам libradius.so, libipoe.so и т.д.
path=/usr/local/lib64/accel-ppp 
ipoe
log_file
radius
ippool
shaper

[core]
#При первом старте обязательно проверьте лог, загрузились ли все библиотеки указанные выше
log-error=/var/log/accel-ppp/core.log 
#Потоки = колличество ядер на процессорах
thread-count=4

[ipoe]
verbose=100
username=ifname
lease-time=100
max-lease-time=100

#Передача атрибутов радиусом:

attr-dhcp-client-ip=Framed-IP-Address
attr-dhcp-router-ip=DHCP-Router-IP-Address
attr-dhcp-mask=DHCP-Mask
attr-l4-redirect=L4-Redirect

shared=0
proxy-arp=0
proto=100

#ifcfg=0
#mode=L2

#На этапе отладке мониторинг vlan можно установить в 20 сек.
vlan-timeout=20
vlan-name=%I.%N


vlan-mon=re:eth0\.3[0-9][0-9][0-9],1101-1159
interface=re:eth0\.3[0-9][0-9][0-9]\.11[0-9][0-9]

[ip-pool]
gw-ip-address=172.22.1.1
attr=Framed-Pool


[dns]
dns1=8.8.8.8

[radius]
dictionary=/usr/local/share/accel-ppp/radius/dictionary
#Имя сервера vpn
nas-identifier=nas16
#IP сервера vpn
nas-ip-address=10.31.255.16
#IP радиуса и пароль
server=10.31.255.16,secret,auth-port=1812,acct-port=1813,req-limit=0,fail-time=0

#Обязательно 0.0.0.0 - иначе не будет работать кнопка "Выкинуть из онлайн"
dae-server=0.0.0.0:3799,secret
timeout=3
max-try=3
acct-delay-time=0
verbose=3

[shaper]
attr=Filter-Id
up-limiter=police
down-limiter=tbf
verbose=3

[client-ip-range]
10.0.0.0/8

[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log

#Очень удобно на этапе отладке IPoE
log-fail-file=/var/log/accel-ppp/auth-fail.log
copy=1
level=5

[cli]
#Консоль управления acccel
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001

6. Радиус.

Добавьте в словарь следующее атрибуты:

mcedit /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

И пустую строку.

В секции [radius] параметр dae-server - 0.0.0.0. Т.е. слушать на любом интерфейсе.

7. IPTABLES.

Добавим правила для обычных пользователей и должников.

#Обычных натим. 
iptables -t nat -A POSTROUTING -s 10.0.21.0/24 -o eth1 -j SNAT --to-source 195.2.204.1
#Должникам разрешаем только dns 
iptables -t nat -A POSTROUTING -s 172.22.0.0/20 -d 8.8.8.8 -o eth1 -j SNAT --to-source 195.2.204.1
#и заворачиваем на страницу "заглушку"
iptables -t nat -A PREROUTING -s 172.22.0.0/20 ! -d 10.0.0.0/8 -p tcp --dport 80 -j REDIRECT --to-port 8000

Сохраним правила установив дополнительный пакет

apt-get install iptables-persistent

iptables-save > /etc/iptables/rules.v4

8. Q-in-Q (VLAN stacking) в Linux

Создадим вланы которые будем слушать accel.

vconfig add eth0 3100

Added VLAN with VID == 3100 to IF -:eth0:-

ifconfig eth0.3100 10.1.1.1 netmask 255.255.255.0 up
eth0.3100 Link encap:Ethernet  HWaddr 
          inet addr:10.1.1.1  Bcast:10.1.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Ну и чтобы убедится, что у нас нормально работает qinq сделаем ещё один влан.

	vconfig add eth0.3100 2000

Added VLAN with VID == 2000 to IF -:eth0.3100:-

ifconfig eth0.3100.2000 192.168.1.1 netmask 255.255.255.0 up

ping 192.168.1.1

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=0.044 ms

64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.015 ms

После того как Вы создали супер-влан, необходимо перезапустить accel, чтобы он его включил в свой мониторинг. Согласно выше в конфигурации vlan-mon=re:eth0\.3[0-9][0-9][0-9].

Сохраним сетевые настройки:

mcedit /etc/network/interfaces
auto eth0.3100
iface eth0.3100 inet manual
#Для примера можно дополнительно прокинуть managment vlan       
#       up /sbin/vconfig add eth0.3100 2000
#auto eth0.3106.1160
#iface eth0.3105.1160 inet static
#       address 10.20.31.1
#       netmask 255.255.255.0
  • billing/nas_acces_server/accelipoe_sample.txt
  • Последние изменения: 2 лет назад
  • — Александр Дудяк