====== Установка на 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|]]