====== accelipoe_sample (устарел) ======
Установку Accel PPP можно осуществить практически на любой линукс, но предпочтительнее, согласно рекомендации разработчиков программы, использвать Debian. И мы рассмотрим процедуру установки именно на Debian 7 Wheezy.
======1. Дистрибутив======
Устанавливаем Debian последней стабильной версии (7.7) (Тестировалось также и на версии 7.6)
Для [[http://cdimage.debian.org/debian-cd/7.7.0/amd64/iso-cd/debian-7.7.0-amd64-CD-1.iso|amd64]]
Для [[http://cdimage.debian.org/debian-cd/7.7.0/i386/iso-cd/debian-7.7.0-i386-CD-1.iso|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
**Пример успешной компиляции**
[[http://pastebin.mozilla-russia.org/111651|Посмотреть можно здесь]]
**Обязательно сравните с примером успешной сборки, ворнингов и ошибок быть не должно.
Проверьте чтобы драйвер ipoe.ko скомпилировался без ошибок.**
Scanning dependencies of target ipoe_drv
[100%] Generating driver/ipoe.ko
[100%] Built target ipoe_drv
Если что-то пошло не так, нехватает какой-то библиотеки или пакета, устранить ошибку и повторить процедуру сборки, удалив всё в каталоге build.
в)
make install
[[http://pastebin.mozilla-russia.org/111652|Пример успешной установки:]]
После установки можно посмотреть примеры настроек /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, открываем в редакторе и настраиваем. Пример можно взять отсюда [[http://wiki.mikbill.ru/billing/nas_access_server/accel_ppp|Настройка Accel-PPTP/Accel-PPoE как NAS для MikBiLL.]]
[[http://pastebin.mozilla-russia.org/111657|Описание конфигурационного файла]]
**Ещё один пример минимальной настройки 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