====== 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