====== Установка на Debian 8 [чистовик]======
===== Подготовка сервера =====
Установим необходимые для работы новой системы, пакеты:\\
apt-get install mtr atop htop mc tcpdump vlan ethtool sudo chkconfig
Установим header для текущего ядра:\\
apt-cache search linux-image
Из предложенного списка:\\
linux-headers-3.16.0-4-amd64 - Header files for Linux 3.16.0-4-amd64
linux-image-3.16.0-4-amd64 - Linux 3.16 for 64-bit PCs
linux-image-3.16.0-4-amd64-dbg - Debugging symbols for Linux 3.16.0-4-amd64
linux-image-amd64 - Linux for 64-bit PCs (meta-package)
linux-image-amd64-dbg - Debugging symbols for Linux amd64 configuration (meta-package)
нас интересует **linux-headers-3.16.0-4-amd64 - Header files for Linux 3.16.0-4-amd64**, ставим его:\\
apt-get install linux-headers-3.16.0-4-amd64
===== Установка Accel-ppp =====
Установим необходимые пакеты:
apt-get install git make vlan libnl-utils gcc cmake git libcrypto++-dev libcrypto++9 libcrypto++-utils lua5.1 liblua5.1-0-dev libpcre++-dev libpcre++0 libpcre3 libpcrecpp0 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 =====
[[http://accel-ppp.org/wiki/doku.php?id=ru:configfile|Полное описание конфига Accel-ppp]].\\
[[config:nas_servers:accel:utility:accel_config_pppoe_ipoe_qinq|Примеры других вариантов авторизации]]\\
Пример конфига 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
}
===== Настройка NAT =====
Изменим размер хеша 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
===== Подключение модулей =====
nano /etc/modules
# модуль ipoe для L2/L3
ipoe
# модуль для QinQ
#vlan_mon
# для работы vlan
8021q
# для корректной работы шейперов
sch_netem
# для работы VPN
ip_gre
ip_nat_pptp
ip_conntrack_pptp
===== Init скрипт =====
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
Если возникают проблемы с запуском через systemd, выполните:
nano /etc/systemd/system/multi-user.target.wants/accel-ppp.service
[Unit]
Description=Accel-PPP
After=network.target
[Service]
ExecStart=/usr/local/sbin/accel-pppd -d -p /var/run/accel-pppd.pid -c /etc/accel-ppp.conf
StandardOutput=null
ExecReload=/bin/kill -SIGUSR1 $MAINPID
PIDFile=/var/run/accel-pppd.pid
Type=forking
Restart=always
[Install]
WantedBy=multi-user.target
Alias=accel-ppp.service
update-rc.d accel defaults
===== Настройка автозагрузки =====
Автозапуск 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
===== Настройка сетевых карт =====
Для лучшей производительности сетевой карты, необходимо подкорректировать некоторые из её стандартных значений.\\
Не все сетевые карты поддерживают эти значения, так что будьте аккуратны [[config:nas_servers:accel:utility:accel_nic_settings]]
===== IRQ Affinity (Прерывания) =====
Для настройки можно использовать [[config:nas_servers:accel:utility:accel_nic_settings| данный скрипт]]
===== GRUB ( для 2+ процессоров ) =====
Для корректной работы Accel на серверах с 2+ процессорами, в параметры GRUB следует добавить:
nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet processor.max_cstate=1 intel_idle.max_cstate=0"
после чего выполнить:
update-grub
===== Настройка страниц "заглушек" =====
[[config:nas_servers:accel:utility:accel_users_page|]]