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