Установка Accel-ppp на Debian 7

Установим необходимые для работы новой системы, пакеты:

apt-get install mtr atop htop mc tcpdump vlan ethtool sudo chkconfig


Обновим ядро системы:
Добавим репозиторий backports в /etc/apt/sources.list

deb http://ftp.ru.debian.org/debian wheezy-backports main


Обновим данные о пакетах

apt-get update


Обновим все пакеты в системе до актуальных версий из backports

apt-get -t wheezy-backports upgrade


Выясним, доступен ли необходимый набор пакетов в репозитории

apt-cache search linux-image


В результате будет что-то подобное:

linux-headers-3.2.0-4-amd64 - Header files for Linux 3.2.0-4-amd64
linux-headers-3.2.0-4-rt-amd64 - Header files for Linux 3.2.0-4-rt-amd64
linux-image-3.2.0-4-amd64 - Linux 3.2 for 64-bit PCs
linux-image-3.2.0-4-amd64-dbg - Debugging symbols for Linux 3.2.0-4-amd64
linux-image-3.2.0-4-rt-amd64 - Linux 3.2 for 64-bit PCs, PREEMPT_RT
linux-image-3.2.0-4-rt-amd64-dbg - Debugging symbols for Linux 3.2.0-4-rt-amd64
linux-image-2.6-amd64 - Linux for 64-bit PCs (dummy package)
linux-image-amd64 - Linux for 64-bit PCs (meta-package)
linux-image-rt-amd64 - Linux for 64-bit PCs (meta-package), PREEMPT_RT
linux-headers-3.16.0-0.bpo.4-amd64 - Header files for Linux 3.16.0-0.bpo.4-amd64
linux-image-3.16.0-0.bpo.4-amd64 - Linux 3.16 for 64-bit PCs
linux-image-3.16.0-0.bpo.4-amd64-dbg - Debugging symbols for Linux 3.16.0-0.bpo.4-amd64
linux-image-amd64-dbg - Debugging symbols for Linux amd64 configuration (meta-package)


Из всего этого разнообразия нас интересуют только 2 пакета:

linux-headers-3.16.0-0.bpo.4-amd64 - Header files for Linux 3.16.0-0.bpo.4-amd64
linux-image-3.16.0-0.bpo.4-amd64 - Linux 3.16 for 64-bit PCs


Устанавливаем:

apt-get install linux-image-3.16.0-0.bpo.4-amd64 linux-headers-3.16.0-0.bpo.4-amd64


Перезагружаем сервер

reboot


После проверяем версию ядра:

uname -a
Linux bras-pppoe 3.16.0-0.bpo.4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3~bpo70+1 (2016-01-19) x86_64 GNU/Linux

Установим необходимые пакеты:

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


Создадим и перейдем в директорию для исходников accel:

mkdir -p /var/accel-ppp/
cd /var/accel-ppp/


Скачаем последнюю версию accel:

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


Конфигурируем исходники:

cd /usr/local/src
cmake /var/accel-ppp/accel-ppp.git -DKDIR=/usr/src/linux-headers-`uname -r` -DBUILD_DRIVER=FALSE -DRADIUS=TRUE -DNETSNMP=FALSE -DSHAPER=TRUE -DLOG_PGSQL=FALSE -DLUA=TRUE -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE
make
make install

Добавляем собранный модуль ipoe в систему:

cp /usr/local/src/drivers/ipoe/driver/ipoe.ko /lib/modules/`uname -r`/kernel/net

если нужен vlan_mon:

cp /usr/local/src/drivers/vlan_mon/driver/vlan_mon.ko /lib/modules/`uname -r`/kernel/net

Обновляем информацию о модулях системы:

depmod -a


Установим опции для роутинга и L4-Redirect:

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

Полное описание конфига Accel-ppp.
Примеры других вариантов авторизации
Пример конфига Accel для работы в режиме IPoE L2, start=dhcp

nano /etc/accel-ppp.conf
[modules]
log_file
radius
shaper
sigchld
ipoe
 
[core]
log-error=/var/log/accel-ppp/core.log
thread-count=2
 
[ipoe]
#check-mac-change=0
username=lua:macuser
lua-file=/etc/accel-ppp.lua
lease-time=300
max-lease-time=302
#attr-dhcp-opt82=DHCP-Option82
#attr-dhcp-opt82-remote-id=AccelRemoteId
#attr-dhcp-opt82-circuit-id=AccelCircuitId
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
attr-l4-redirect-ipset=L4-Redirect-ipset
l4-redirect-ipset=l4
shared=1
ifcfg=1
mode=L2
start=dhcpv4
proto=100
#proxy-arp=1
interface=re:^eth1\.[0-9][0-9][0-9]$
verbose=1
 
[dns]
dns1=4.2.2.2
dns2=8.8.8.8
 
[radius]
dictionary=/usr/local/share/accel-ppp/radius/dictionary
nas-identifier=Accel-IPoE
nas-ip-address=10.0.0.2
server=10.0.0.1,secret,auth-port=1812,acct-port=1813,req-limit=0,fail-time=0
dae-server=0.0.0.0:3799,secret
verbose=1
timeout=10
max-try=9
acct-timeout=0
acct-delay-time=0
 
[shaper]
attr=Filter-Id
#Day/Night shaper
#time-range=1,1:00-3:00
#time-range=2,3:00-5:00
#time-range=3,5:00-7:00
ifb=ifb0
up-limiter=htb
down-limiter=htb
cburst=1375000
r2q=10
quantum=1500
leaf-qdisc=sfq perturb 10
verbose=0
 
[client-ip-range]
disable
 
[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
log-debug=/var/log/accel-ppp/debug.log
copy=1
level=4
 
[cli]
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001


LUA скрипт, для обработки MAC / Opt82:

nano /etc/accel-ppp.lua
#!lua
function macuser(pkt)
        return pkt:hdr('chaddr')
end

function opt82_v1(pkt)
        v,b1,b2,b3,b4,b5,b6=string.unpack(pkt:agent_remote_id(),'bbbbbb')
        return string.format("%02x:%02x:%02x:%02x:%02x:%02x", b1,b2,b3,b4,b5,b6)
end

function opt82_v2(pkt)
        if pkt:agent_circuit_id() ~= nil then
                if string.len(pkt:agent_remote_id()) ~= 0 then
                        v,b1,b2,b3,b4,b5,b6=string.unpack(pkt:agent_remote_id(),'bbbbbb')
                        return string.format("%02x:%02x:%02x:%02x:%02x:%02x", b1,b2,b3,b4,b5,b6)
                elseif (string.len(pkt:agent_remote_id()) == 0 and string.len(pkt:agent_circuit_id()) ~= 0) then
                        m1=string.sub(pkt:agent_circuit_id(),'-15','-14')
                        m2=string.sub(pkt:agent_circuit_id(),'-13','-12')
                        m3=string.sub(pkt:agent_circuit_id(),'-11','-10')
                        m4=string.sub(pkt:agent_circuit_id(),'-9','-8')
                        m5=string.sub(pkt:agent_circuit_id(),'-7','-6')
                        m6=string.sub(pkt:agent_circuit_id(),'-5','-4')
                        local username=m1..':'..m2..':'..m3..':'..m4..':'..m5..':'..m6
                        return username
                end
        else
                return pkt:hdr('chaddr')
        end
end


Радиус атрибуты:

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 
#ATTRIBUTE DHCP-Agent-Circuit-Id	1 octets 
#ATTRIBUTE DHCP-Agent-Remote-Id	2 octets 
ATTRIBUTE AccelRemoteId 246 octets
ATTRIBUTE AccelCircuitId 247 octets
#ATTRIBUTE DHCP-Attr-272 272 ipaddr


Параметры для Logrotate:

nano /etc/logrotate.d/accel
/var/log/accel-ppp/*.log {
        daily
        rotate 7
        missingok
        sharedscripts
        postrotate
                test -r /var/run/accel-pppd.pid && kill -HUP `cat /var/run/accel-pppd.pid`
        endscript
}


Изменим размер хеша conntrack:

echo "options nf_conntrack hashsize=1193572" > /etc/modprobe.d/nf_conntrack.conf


в /etc/sysctl.conf добавить:

net.ipv4.ip_forward=1
 
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 12288
 
net.ipv4.netfilter.ip_conntrack_max=1572864
net.netfilter.nf_conntrack_max = 1572864
net.netfilter.nf_conntrack_generic_timeout = 300
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 60
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 600
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 45
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 60
#net.netfilter.nf_conntrack_icmpv6_timeout = 30
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_events_retry_timeout = 15
net.netfilter.nf_conntrack_checksum=0
net.ipv4.netfilter.ip_conntrack_checksum=0
net.core.dev_weight = 16
net.core.netdev_budget = 256
net.core.netdev_max_backlog = 16000

vm.swappiness = 10
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

Выполняем sysctl -p если выдало ошибки, подключите модули:

nf_conntrack
nf_conntrack_ipv4



Для создания правил iptables, можете воспользоваться скриптом создания iptables для Accel

nano /etc/modules
# модуль ipoe для L2/L3
ipoe
# модуль для QinQ
#vlan_mon
# для работы vlan
8021q
# для корректной работы шейперов
sch_netem
# для работы VPN
ip_gre
ip_nat_pptp
ip_conntrack_pptp
nano /etc/init.d/accel
#!/bin/sh
# /etc/init.d/accel-pppd: 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

. /lib/lsb/init-functions

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

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

case "$1" in
  start)
	log_daemon_msg "Starting PPtP/L2TP/PPPoE server" "accel-pppd"
	if start-stop-daemon --start --quiet --oknodo --exec /usr/local/sbin/accel-pppd -- -d -p /var/run/accel-pppd.pid $ACCEL_PPPD_OPTS; then
	    log_end_msg 0
	else
	    log_end_msg 1
	fi
  ;;
  restart)
	log_daemon_msg "Restarting PPtP/L2TP/PPPoE server" "accel-pppd"
	start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile /var/run/accel-pppd.pid
	if start-stop-daemon --start --quiet --oknodo --exec /usr/local/sbin/accel-pppd -- -d -p /var/run/accel-pppd.pid $ACCEL_PPPD_OPTS; then
	    log_end_msg 0
	else
	    log_end_msg 1
	fi
  ;;

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

  status)
	status_of_proc /usr/local/sbin/accel-pppd "accel-pppd"
  ;;
  *)
    log_success_msg "Usage: /etc/init.d/accel {start|stop|status|restart}"
    exit 1
    ;;
esac

exit 0

Даем права запуска:

chmod +x /etc/init.d/accel

Автозапуск Accel:

chkconfig accel on

Для всех реальных IP которые будут использоваться для NAT в качестве SRC-NAT для абонентов, должны быть созданы алиас интерфейсы с этими IP адресами для избежания проблем с зависанием сервера.
Пример на loopback интерфейсе:

auto lo:1
iface lo:1 inet static
address 91.92.93.1
netmask 255.255.255.255

auto lo:2
iface lo:2 inet static
address 91.92.93.2
netmask 255.255.255.255

auto lo:3
iface lo:3 inet static
address 91.92.93.3
netmask 255.255.255.255

auto lo:4
iface lo:4 inet static
address 91.92.93.4
netmask 255.255.255.255

Для лучшей производительности сетевой карты, необходимо подкорректировать некоторые из её стандартных значений.
Не все сетевые карты поддерживают эти значения, так что будьте аккуратны, ссылка на статью с настройкой.

Для настройки можно использовать данный скрипт

Для корректной работы Accel на сервераx с 2+ процессорами, в параметры GRUB следует добавить:

nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet processor.max_cstate=1 intel_idle.max_cstate=0"

после чего выполнить:

update-grub
  • billing/howto/accel_install_debian7.txt
  • Последние изменения: 4 месяц (-ев) назад
  • — Александр Дудяк