accel debian 8 заметки

ротация (когда ежедневная может вызывать сбой)
/var/log/accel-ppp/*.log {
        weekly
        rotate 2
        missingok
        sharedscripts
        postrotate
                test -r /var/run/accel-pppd.pid && kill -HUP `cat /var/run/accel-pppd.pid`
        endscript
}


Включаем proxy-arp системный
net.ipv4.conf.all.proxy_arp = 1
net.ipv4.conf.default.proxy_arp = 1


узнаем модель сетевой карты

  • lshw -class network >/tmp/tmp

производитель: vendor
имя продукта: product
используемый драйвер: driver

Установка драйвера сетевой карты
make
make CFLAGS_EXTRA="-DIXGBE_NO_LRO" install
update-initramfs -u
потом reboot

Смотрим версию драйвера

  • ethtool -i eth5

NetXtreme II BCM57810 10
установка драйвера на Deb8

  • nano /etc/apt/sources.list

deb http://security.debian.org/debian-security/ jessie/updates main contrib non-free
deb-src http://security.debian.org/debian-security/ jessie/updates main contrib non-free
  • apt-get update
  • apt-get install firmware-bnx2
или
  • apt-get install firmware-bnx2x

на пограничниках нельзя два проца E5 ставить

не ошибка, работает с этим
/usr/src/linux-headers-3.16.0-4-common/arch/x86/Makefile:136: CONFIG_X86_X32 enabled but no binutils support
/usr/src/linux-headers-3.16.0-4-common/Makefile:648: Cannot use CONFIG_CC_STACKPROTECTOR_REGULAR: -fstack-protector not supported by compiler

В конфиге должен быть отключен:
mppe=prefer

mtu должен быть 1492
но
Ошибка
Не открывает speedtest.net, privat24.ua
mtu=1372
mru=1372

В rc.local поменять на (для работы балансера)
#!/bin/bash

apt-get install sshguard

modprobe ip_conntrack
modprobe nf_conntrack_ipv4


modprobe ppp_mppe
lsmod |grep ppp_mppe
lsmod|grep ipoe
modprobe ip_gre


lsmod | grep ipoe /opt/ixgbe-5.0.4/scripts/set_irq_affinity 0-11 eth4 >/dev/null



lease-time=300
max-lease-time=302

[14:12]
вот тут я поставил 300 и 600

[14:13]
и то бывают лаги

[14:13]
поставил 600 и 660 стало меньше


делаем уход в "дыру", если есть реалки и балансировка на несколько NAS
/sbin/ip ro add blackhole 111.111.7.128/25



[modules]
log_file
radius
sigchld
ippool
shaper
pppoe
auth_pap
auth_chap
auth_mschap_v1
auth_mschap_v2
ipoe

[core]
log-error=/var/log/accel-ppp/core_ipoe.log
thread-count=12

[ppp]
verbose=0
min-mtu=1000
mtu=1492
mru=1492
mppe=prefer
ipv4=require
ipv6=deny
ipv6-intf-id=0:0:0:1
ipv6-peer-intf-id=0:0:0:2
ipv6-accept-peer-intf-id=1
lcp-echo-interval=10
lcp-echo-failure=3
lcp-echo-timeout=45

[pppoe]
verbose=1
ac-name=accelnet
ifname-in-sid=called-sid
called-sid=ifname
interface=eth4.100


[ipoe]
#check-mac-change=0
username=lua:macuser
lua-file=/etc/accel-ppp.lua
lease-time=300
max-lease-time=360
attr-dhcp-opt82=DHCP-Option82
attr-dhcp-opt82-remote-id=DHCP-Agent-Remote-Id
attr-dhcp-opt82-circuit-id=DHCP-Agent-Circuit-Id
attr-dhcp-client-ip=Framed-IP-Address
attr-l4-redirect=L4-Redirect
attr-l4-redirect-ipset=L4-Redirect-ipset
l4-redirect-ipset=l4
#attr-dhcp-router-ip=DHCP-Router-IP-Address
#attr-dhcp-mask=DHCP-Mask
shared=1
ifcfg=1
mode=L2
start=dhcpv4
proto=100
#proxy-arp=1
interface=eth4.100
#interface=re:eth1\.[0-9][0-9][0-9]
verbose=1
gw-ip-address=10.0.0.1

[ip-pool]
attr=Framed-Pool

[dns]
dns1=213.174.7.1
dns2=8.8.8.8

[radius]
gw-ip-address=10.100.254.254
dictionary=/usr/local/share/accel-ppp/radius/dictionary
nas-identifier=nas1
nas-ip-address=172.18.0.11
server=172.18.0.1,B0TLnFLsqkUi,auth-port=1812,acct-port=1813,req-limit=0,fail-time=0
dae-server=0.0.0.0:3799,B0TLnFLsqkUi
timeout=10
max-try=3
acct-timeout=0
acct-delay-time=0
verbose=1


[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
#up-limiter=police
down-limiter=tbf
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.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=7

[cli]
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001


После настроек sysctl перед применением выполняем
modprobe ip_conntrack
modprobe nf_conntrack_ipv4

failed to load ifb kernel module
Не ошибка 

Firewall

  • nano /etc/init.d/firewall
#!/bin/bash
#
# firewall
#
# chkconfig: - 97 20
#
### BEGIN INIT INFO
# Provides:          firewall
# Required-Start:    $network
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       Mikbill firewall builder
### END INIT INFO

lock_path=/var/lock/firewall.lock

# Список IPSETов
ipset_list=(
nomoney
freezee
disabled
deleted
unknown
)

IPT=`which iptables`
IPS=`which ipset`
DIG=`which dig`
CTL=`which sysctl`
DNS_lookup="213.174.7.1"

# OUT интерфейс (интернет)
out_interface1="eth4.61"

# IP SRC-NAT для пользователей
out_ext_ip1="213.174.7.65"

# IP для редиректа на страницу заглушку
REDIRECT_IP="10.0.0.1"

# IP SRC-NAT для выхода на разрешенные IP
allowed_ext_ip="1.2.3.4"

# название IPSETа для разрешенных IP
allowed_ipset="allowed"


# Список разрешенных сайтов и IP
allowed_list=(
4.2.2.2
8.8.8.8
8.8.4.4
mikbill.ru
213.174.7.1
)


postrouting() {
        # Очищаем NAT
        $IPT -t nat -F POSTROUTING

        # NAT для пользователей
        $IPT -t nat -A POSTROUTING -s 10.11.0.0/16 -o $out_interface1 -j SNAT --to-source $out_ext_ip1
        $IPT -t nat -A POSTROUTING -s 10.1.0.0/16 -o $out_interface1 -j SNAT --to-source $out_ext_ip1

        # NAT для разрешенных IP
        $IPT -t nat -A POSTROUTING -m set --match-set $allowed_ipset dst -o $out_interface1 -j SNAT --to-source $allowed_ext_ip

        echo "POSTROUTING done"
}

input() {
        $IPT -F INPUT

        # Если используете Fail2ban SSH
        #$IPT -N fail2ban-ssh
        #$IPT -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh

        echo "INPUT done"
}

raw_rules() {
        # очищаем RAW таблицы
        $IPT -t raw -F PREROUTING
        $IPT -t raw -F OUTPUT

        echo "RAW rules done"
}


forward() {
        # Очищаем FORWARD
        $IPT -F FORWARD

        # Пропускаем трафик к разрешенным IP
        $IPT -A FORWARD -m set --match-set $allowed_ipset dst -j ACCEPT

        # Блокируем трафик пользователей в IPSETах
        for ipset_name in ${ipset_list[*]}
        do
                $IPT -A FORWARD -m set --match-set $ipset_name src -j REJECT --reject-with icmp-proto-unreach
        done

        echo "FORWARD done"
}

prerouting() {
        # Очищаем PREROUTING
        $IPT -t nat -F PREROUTING

        # Пропускаем трафик к разрешенным IP
        $IPT -t nat -A PREROUTING -m set --match-set $allowed_ipset dst -j ACCEPT
        # Перенаправляем пользователей из IPSETов на страницы заглушки
        $IPT -t nat -A PREROUTING -m set --match-set nomoney src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:81
        $IPT -t nat -A PREROUTING -m set --match-set freezee src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:82
        $IPT -t nat -A PREROUTING -m set --match-set disabled src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:83
        $IPT -t nat -A PREROUTING -m set --match-set deleted src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:84
        $IPT -t nat -A PREROUTING -m set --match-set unknown src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:85

        echo "PREROUTING done"
}


allow() {
        # Очищаем IPSET разрешенных IP
        $IPS -F $allowed_ipset

        for row in ${allowed_list[*]}
        do
                # проверяем запись из списка разрешенных, явлияется ли она IP адресом
                if [[ $row =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]];
                then
                        # добавляем этот IP в список разрешенных
                        $IPS add $allowed_ipset $row > /dev/null 2>&1
                else
                        # запись оказалась доменом, резолвим его IP через dig
                        for ip in `$DIG $row +short @$DNS_lookup`
                        do
                                # добавляем полученные через dns IP адрес в список разрешенных
                                $IPS add $allowed_ipset $ip > /dev/null 2>&1
                        done
                fi
        done

        echo "ALLOWED done"
}

start() {
        if [ -f $lock_path ]; then
          echo "Firewall is running"
          exit 0
        else
          touch $lock_path
        fi

        echo "Start building firewall"

        for ipset_name in ${ipset_list[*]}
        do
          $IPS -N $ipset_name iphash > /dev/null 2>&1
        done

        $IPS -N active iphash > /dev/null 2>&1
        $IPS -N $allowed_ipset iphash > /dev/null 2>&1

        allow
        input
        forward
        prerouting
        postrouting
        raw_rules

        $CTL -p > /dev/null 2>&1
        
        echo "Firewall rules created"
}

stop() {
        if [ ! -f $lock_path ]; then
          echo "Firewall is stoped"
          exit 0
        else
          rm -f $lock_path
        fi

        $IPT -F FORWARD
        $IPT -t nat -F
        $IPT -t mangle -F
        $IPT -t raw -F PREROUTING
        $IPT -t raw -F OUTPUT

        $IPT -P FORWARD ACCEPT

        echo "FORWARD/NAT/RAW flushed"

        $CTL -p > /dev/null 2>&1
}

show() {
        $IPT -L INPUT -v -n --line-numbers
        $IPT -L FORWARD -v -n --line-numbers
        $IPT -t nat -L PREROUTING -v -n --line-numbers
        $IPT -t nat -L POSTROUTING -v -n --line-numbers
        #$IPT -t raw -v -n --line-numbers
        $IPS list $allowed_ipset
}


case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  allow)
    allow
    ;;
  input)
    input
    ;;
  forward)
    forward
    ;;
  pre)
    prerouting
    ;;
  post)
    postrouting
    ;;
  raw)
    raw_rules
    ;;
  show)
    show
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|allow|input|forward|pre|post|raw|show}"
esac


  • chmod +x /etc/init.d/firewall
  • chkconfig firewall on


Разгружаем по ядрам нагрузку

#RPS On
echo ff > /sys/class/net/eth5/queues/rx-0/rps_cpus
echo ff > /sys/class/net/eth4/queues/rx-0/rps_cpus
#RFS On
echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
echo 2048 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt

Скрипт-балансировщик
mkdir /opt/set_irq_affinity
cd /opt/set_irq_affinity
  • wget https://gist.github.com/SaveTheRbtz/8875474/raw/0c6e500e81e161505d9111ac77115a2367180d12/set_irq_affinity.sh
  • chmod +x set_irq_affinity.sh
В rc.local
/opt/set_irq_affinity/set_irq_affinity.sh 0-11 eth4
/opt/set_irq_affinity/set_irq_affinity.sh 0-11 eth5
/sbin/ifconfig ifb0 txqueuelen 10000
Проверка
cat /proc/interrupts| grep eth 


Настройки сетевых интерфейсов в rc.local

echo "`date` apply conntrack hashsize" >> /etc/rclocal.log
echo > /sys/module/nf_conntrack/parameters/hashsize 1240000 > /dev/null 2>&1
echo "`date` done" >> /etc/rclocal.log

echo "`date` changing ethtool parameters offload&others" >> /etc/rclocal.log
/sbin/ethtool -N eth5 rx-flow-hash udp4 sdfn > /dev/null 2>&1
/sbin/ethtool -K eth5 ntuple off > /dev/null 2>&1
/sbin/ethtool -A eth5 autoneg off rx off tx off > /dev/null 2>&1
/sbin/ethtool --offload eth5 rx off tx off > /dev/null 2>&1
/sbin/ethtool -K eth5 rxvlan off txvlan off > /dev/null 2>&1
/sbin/ethtool -G eth5 tx 8192 rx 8192 > /dev/null 2>&1
/sbin/ethtool -K eth5 tso off gso off gro off lro off > /dev/null 2>&1
/sbin/ethtool -C eth5 tx-usecs 0 > /dev/null 2>&1
/sbin/ifconfig eth5 txqueuelen 10000 > /dev/null 2>&1
/sbin/ethtool -K eth5 tso off gso off gro off lro off > /dev/null 2>&1

#echo "`date` changing ethtool parameters offload&others" >> /etc/rclocal.log
/sbin/ethtool -N eth4 rx-flow-hash udp4 sdfn > /dev/null 2>&1
/sbin/ethtool -K eth4 ntuple off > /dev/null 2>&1
/sbin/ethtool -A eth4 autoneg off rx off tx off > /dev/null 2>&1
/sbin/ethtool --offload eth4 rx off tx off > /dev/null 2>&1
/sbin/ethtool -K eth4 rxvlan off txvlan off > /dev/null 2>&1
/sbin/ethtool -G eth4 tx 8192 rx 8192 > /dev/null 2>&1
/sbin/ethtool -K eth4 tso off gso off gro off lro off > /dev/null 2>&1
/sbin/ethtool -C eth4 tx-usecs 0 > /dev/null 2>&1
/sbin/ifconfig eth4 txqueuelen 10000 > /dev/null 2>&1
/sbin/ethtool -K eth4 tso off gso off gro off lro off > /dev/null 2>&1
echo "`date` done" >> /etc/rclocal.log



Комментарии

Популярные сообщения из этого блога

mikbill расшифровка завершений сессий

Accel-ppp команды

Zabbix agent установка и настройка