Задача переноса отдельно стоящего nat сервера на BRAS сервер

14 мин на чтение

На BRAS accel-ppp был отключен connection tracking для абонентских сетей, который нужен для NAT

1) Нужно либо переписать правило NOTRACK all 0.0.0.0/0 на ACCEPT, либо удалить его. Оптимальнее всего убрать все правила из цепочки RAW.

Выполним через консоль:

iptables -t raw -F PREROUTING
iptables -t raw -F OUTPUT

2) согласно схемы L3switch(pbr на интерфейсе для серых адресов)<–>NAT было прописано правило

l3#ip route 91.197.0.0 255.255.254.0 192.168.1.1 нужно переписать в сторону bras l3#ip router 91.197.0.0 255.255.254.0 192.168.1.2

в моем случае я забрал не все адреса из пула 91.197.0.0-91.197.0.127, а только часть изменив iptables -t nat -R PREROUTING 47 -to-source 91.197.0.0-91.197.0.63 –persistent так как на стороне BRAS еще не все готово. обязательно сделать conntrack -F , так как соединения будут висеть на всем диапазаное указанном ранее 91.197.0.0-91.197.0.127 (к примеру можно проверить через conntrack -L | grep 91.197.0.120)

3) на bras создать sub интерфейсы в файле interfaces.

eth0.2000:1  91.197.0.64
eth0.2000:2  91.197.0.65
eth0.2000:3  91.197.0.66

и так далее.

3.1) подождем пока все абоненты отключаться telnet 127.0.0.1 2000 shutdown soft

4) правило NAT iptables -t nat -A POSTROUTING -s 10.1.0.0/19 -o ens6f1.2004 -j SNAT –to-source 91.197.0.64-91.197.76.0.127 –persistent

5) за одно можно обновить сервер :-)

w
 12:16:40 up 608 days,  3:15,  1 user,  load average: 0,09, 0,04, 0,06

lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.11 (wheezy)
Release:	7.11
Codename:	wheezy

Сохраним все изменеия в скриптах который подгружает правила при старте.

  • best practics https://fasterdata.es.net/host-tuning/linux/

  • best practics https://habr.com/company/mailru/blog/314168/

Если сервер работает только маршрутизатором, то тюнинг TCP стека особого значения не имеет, кроме тюнинга параметров касаемых производительности сетевой карты (буфера, очередей, распределения прерывайни и т.д.)

Планируемая нагрузка будет в районе 2Gbit, стандартные параметры ядра на это не расчитаны, они выбраны средние между nat/web-server/gw. Нам нужно все это оптимизировать под наши задачи.

Будет рассмотрена два этапа.

1) тюнинг сетевого стека https://opensourceforu.com/2016/10/network-performance-monitoring/

2) тюнинг работы системы касаемо cpu, а производительность самой системы нам не важа. cpu governor

Этап 1

1) Interrupt Coalescence

После того как сетевой адаптер получает пакеты, драйвер устройства выдает одно жесткое прерывание, за которым следуют программные прерывания (обрабатываются NAPI). Объединение прерываний - это количество пакетов, которые сетевой адаптер получает до выдачи жесткого прерывания. Изменение значения для быстрого прерывания может привести к большим накладным расходам и, следовательно, к снижению производительности, но высокое значение может привести к потере пакетов. По умолчанию ваши настройки находятся в режиме адаптивной ИС, который автоматически балансирует значение в соответствии с сетевым трафиком. Но поскольку новые ядра используют NAPI, что делает быстрые прерывания гораздо менее затратными (с точки зрения производительности), вы можете отключить эту функцию.

ethtool -c eth0
ethtool -C eth0 adaptive-rx off

ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: off  TX: off
stats-block-usecs: 0
sample-interval: 0

2) Пауза кадров

Кадр паузы - это длительность паузы в миллисекундах, которую адаптер выдает сетевому коммутатору для остановки отправки пакетов, если кольцевой буфер заполнен. Если включен режим паузы, потеря пакетов будет минимальной.

ethtool -a eth0
Pause parameters for eth0:
Autonegotiate:	off
RX:		off
TX:		off
ethtool -A eth0   tx on rx on

3) Изменение параметров Offload feature через ethtool.

Часть статей готоврит что сетевые карты затрудительно работают с этими включенными параметрами.

ethtool -K eth1 tx off rx off sg off tso off ufo off gso off lro off rxvlan off txvlan off

4) Некоторые сетевые карты и их драйверы

поддерживают настройку размера очереди приёма. Конкретная реализация зависит от оборудования, но, к счастью, ethtool обеспечивает стандартный метод настройки. Увеличение размера позволяет предотвратить отбрасывание сетевых данных при большом количестве входящих фреймов. Правда, данные ещё могут быть отброшены на уровне ПО, так что для полного исключения или снижения отбрасывания необходимо будет провести дополнительную настройку.

Проверка текущего размера очереди сетевой карты с помощью ethtool –g:

$ sudo ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:   4096
RX Mini:  0
RX Jumbo: 0
TX:   4096
Current hardware settings:
RX:   512
RX Mini:  0
RX Jumbo: 0
TX:   512

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

Увеличим размер каждой очереди до 4096:

$ sudo ethtool -G eth0 rx 4096

5) Количесвто очередей можно настривать разными способами.

если сетевая карта поддерживает передачу параметров через ethtool - l то вывод будет:

ethtool -l eth0
Channel parameters for eth0:
Pre-set maximums:
RX:		0
TX:		0
Other:		1
Combined:	63
Current hardware settings:
RX:		0
TX:		0
Other:		1
Combined:	24

или

ethtool -l eth0
Channel parameters for eth0:
Cannot get device channel parameters
: Operation not supported

Для того, чтобы равномерно распределить прерывания на сетевом интерфейсе необходимо изменить количество очередей.Например, у нас имеется 6-ти ядерный процессор, а сетевая карта поддерживает 8 очередей.(Очень важно! Для того чтобы установить именно то значение, которое требуется, необходимо сбросить значение количества очередей до 1. Так как ethtool -L прибавляет количество очередей.http://docs.carbonsoft.ru/ )

ethtool -L eth1 rx 1 tx 1
ethtool -L eth1 rx 5 tx 5

Получаем (в поле Combined):

ethtool -l eth1
Channel parameters for eth1:
Pre-set maximums:
RX:		16
TX:		16
Other:		1
Combined:	16
Current hardware settings:
RX:		0
TX:		0
Other:		1
Combined:	6

6) распределение прерыванйи между ядрами ,

в инете есть скрипт который привязывает прерывания к ядрам smp_affinity но можно сделать и вручную.

Предпочтительнее использовать прерывания MSI-X, особенно для сетевых карт, поддерживающих несколько очередей приёма. Причина в том, что каждой очереди присвоено собственное аппаратное прерывание, которая может быть обработано конкретным CPU (с помощью irqbalance или модифицирования /proc/irq/IRQ_NUMBER/smp_affinity). Как мы скоро увидим, прерывание и пакет обрабатывает один и тот же CPU. Таким образом, входящие пакеты будут обрабатываться разными CPU в рамках всего сетевого стека, начиная с уровня аппаратных прерываний(https://habr.com/company/mailru/blog/314168/).

Пример распределение прерываний вручную : При подготовке в эксплуатацию сервера с Intel Xeon E5520 (8 ядер, каждое с HyperThreading) я выбрал такую схему распределения прерыванийв(зято с https://habr.com/post/108240/ :


#CPU6
echo 40 > /proc/irq/71/smp_affinity
echo 40 > /proc/irq/84/smp_affinity

#CPU7
echo 80 > /proc/irq/72/smp_affinity
echo 80 > /proc/irq/85/smp_affinity

#CPU8
echo 100 > /proc/irq/73/smp_affinity
echo 100 > /proc/irq/86/smp_affinity

#CPU9
echo 200 > /proc/irq/74/smp_affinity
echo 200 > /proc/irq/87/smp_affinity

#CPU10
echo 400 > /proc/irq/75/smp_affinity
echo 400 > /proc/irq/80/smp_affinity

#CPU11
echo 800 > /proc/irq/76/smp_affinity
echo 800 > /proc/irq/81/smp_affinity

#CPU12
echo 1000 > /proc/irq/77/smp_affinity
echo 1000 > /proc/irq/82/smp_affinity

#CPU13
echo 2000 > /proc/irq/78/smp_affinity
echo 2000 > /proc/irq/83/smp_affinity

#CPU14
echo 4000 > /proc/irq/70/smp_affinity
#CPU15
echo 8000 > /proc/irq/79/smp_affinit

Распределение с помощью скрипта

я использую скрипт https://gist.github.com/SaveTheRbtz/8875474 с параметрами

/usr/local/sbin/set_irq_affinity.sh -x 1,2,4,6,8,10,12,14,16,18,20,22 eth2

в моем случаея два процессора 6 ядерных по 2 потока , итого 24 потока . привязыват очереди к разным процессорам нет смысла. так как мы тогда будет еще и передавать часть пакеты принадлежащие к одному пакеты на разные процессоры . вывод из пакета netitils

NUMA node(s): 2
NUMA node0 CPU(s): 1,2,4,6,8,10,12,14,16,18,20,22
NUMA node1 CPU(s): 0,3,5,7,9,11,13,15,17,19,21,23

Какой номер ядра принадлежит какому cpu можно узнать выполнив

lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2
0,0,0,0,,0,0,0
1,1,1,0,,1,1,1
2,2,0,0,,2,2,2
3,3,1,0,,3,3,3
4,4,0,0,,4,4,0
5,5,1,0,,5,5,1
6,6,0,0,,6,6,2
7,7,1,0,,7,7,3

Визульано представить связь между pci-cpu-numa.

Пример вывода

lstopo --logical --output-format png > `hostname`.png

lstopo входит в пакет hwloc

После обновления драйверов для igb/ixgb перестал писать кол. потоков/очередей при загрузке модуля (/etc/modprode.d/ixgb.conf options igb IntMode=2,2 RSS=4,4). раньше были параметры InterruptThrottleRate IntMode RSS, но сейчас их нет .Но на одной из карт поддержки нет и через ethtool -l .

Получается что по умолчанию у меня 8 очередей на 2 cpu / по 4 потока.

filename:       /lib/modules/3.2.0-4-amd64/kernel/drivers/net/ethernet/intel/ixgb/ixgb.ko
version:        1.0.135-k2-NAPI
vermagic:       3.2.0-4-amd64 SMP mod_unload modversions 
parm:           TxDescriptors:Number of transmit descriptors (array of int)
parm:           RxDescriptors:Number of receive descriptors (array of int)
parm:           FlowControl:Flow Control setting (array of int)
parm:           XsumRX:Disable or enable Receive Checksum offload (array of int)
parm:           TxIntDelay:Transmit Interrupt Delay (array of int)
parm:           RxIntDelay:Receive Interrupt Delay (array of int)
parm:           RxFCHighThresh:Receive Flow Control High Threshold (array of int)
parm:           RxFCLowThresh:Receive Flow Control Low Threshold (array of int)
parm:           FCReqTimeout:Flow Control Request Timeout (array of int)
parm:           IntDelayEnable:Transmit Interrupt Delay Enable (array of int)
parm:           copybreak:Maximum size of packet that is copied to a new buffer on receive (uint)
parm:           debug:Debug level (0=none,...,16=all) (int)
  64:    1388811   37523023   37121220   12979080   36422018   37399840   13902475   38582741   PCI-MSI-edge      cciss0
  68: 4111931200   40442814   41129363   38146147   43957327   36241924   42664243   35142543   PCI-MSI-edge      eth0-TxRx-0
  69:   17637913  145926613   14680315   15605848   12290519   19817252   10551118   19846568   PCI-MSI-edge      eth0-TxRx-1
  70:    9943951   19936292 1324475156   17126835   15995107   14101462   21042158   11678913   PCI-MSI-edge      eth0-TxRx-2
  71:   19385777   10269389   17160019 1816592674   14383590   15722375   12047918   19636239   PCI-MSI-edge      eth0-TxRx-3
  72:   11729115   20677828   10012525   20474639 3461855270   17560992   15708121   14319310   PCI-MSI-edge      eth0-TxRx-4
  73:   19673810   12010188   19357842   10238283   17271863 3371117118   14462045   15707642   PCI-MSI-edge      eth0-TxRx-5
  74:   14272599   15911616   11798962   20360337   10190675   20238526  426848144   17544489   PCI-MSI-edge      eth0-TxRx-6
  75:   16343183   14722220   20381173   12285766   20122065   10600197   17668610 2267346210   PCI-MSI-edge      eth0-TxRx-7

и пока оставлю так.

UPD Все примеры привожу для карт построенных на чипах с поддержкой драйверов igb, ixgb.

Если мы не хотим разбираться со всем этим идем на https://habr.com/post/331720/ и скачиваем скрипт netutils-linux

6.1 ) при перераспределении прерывайний не совсем было понятно по какой причине нужно использовать RPS(RFS) при работе bras в качестве pppoe сервера.

echo "0" > /sys/class/net/ens2f0/queues/rx-0/rps_cpus
echo "1" > /sys/class/net/ens2f0/queues/rx-0/rps_cpus
echo "2" > /sys/class/net/ens2f0/queues/rx-1/rps_cpus
echo "4" > /sys/class/net/ens2f0/queues/rx-2/rps_cpus
echo "8" > /sys/class/net/ens2f0/queues/rx-3/rps_cpus
echo "10" > /sys/class/net/ens2f0/queues/rx-4/rps_cpus
echo "20" > /sys/class/net/ens2f0/queues/rx-5/rps_cpus
echo "40" > /sys/class/net/ens2f0/queues/rx-6/rps_cpus
echo "80" > /sys/class/net/ens2f0/queues/rx-7/rps_cpus
sysctl -w net.core.rps_sock_flow_entries=32768
echo 2048 > /sys/class/net/ens2f0/queues/rx-0/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-1/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-2/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-3/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-4/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-5/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-6/rps_flow_cnt
echo 2048 > /sys/class/net/ens2f0/queues/rx-7/rps_flow_cnt

Сетевые параметры ядра описаны на странице : https://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt

sysctl.conf intel ixgb 10 https://downloadmirror.intel.com/5874/eng/README.txt

### IPV4 specific settings
# turn TCP timestamp support off, default 1, reduces CPU use
net.ipv4.tcp_timestamps = 0 
# turn SACK support off, default on
# on systems with a VERY fast bus -> memory interface this is the big gainer
net.ipv4.tcp_sack = 0 
# set min/default/max TCP read buffer, default 4096 87380 174760
net.ipv4.tcp_rmem = 10000000 10000000 10000000 
# set min/pressure/max TCP write buffer, default 4096 16384 131072
net.ipv4.tcp_wmem = 10000000 10000000 10000000 
# set min/pressure/max TCP buffer space, default 31744 32256 32768
net.ipv4.tcp_mem = 10000000 10000000 10000000 

### CORE settings (mostly for socket and UDP effect)
# set maximum receive socket buffer size, default 131071 
net.core.rmem_max = 524287 
# set maximum send socket buffer size, default 131071
net.core.wmem_max = 524287 
# set default receive socket buffer size, default 65535
net.core.rmem_default = 524287 
# set default send socket buffer size, default 65535
net.core.wmem_default = 524287 
# set maximum amount of option memory buffers, default 10240
net.core.optmem_max = 524287 
# set number of unprocessed input packets before kernel starts dropping them; default 300
net.core.netdev_max_backlog = 300000 
- END sysctl_ixgb.conf

Resolving Slow UDP Traffic

If your server does not seem to be able to receive UDP traffic as fast as it can receive TCP traffic, it could be because Linux, by default, does not set the network stack buffers as large as they need to be to support high UDP transfer rates. One way to alleviate this problem is to allow more memory to be used by the IP stack to store incoming data.

For instance, use the commands: sysctl -w net.core.rmem_max=262143 and sysctl -w net.core.rmem_default=262143 to increase the read buffer memory max and default to 262143 (256k - 1) from defaults of max=131071 (128k - 1) and default=65535 (64k - 1). These variables will increase the amount of memory used by the network stack for receives, and can be increased significantly more if necessary for your application.

network/interfaces

        up ethtool -K ens2f1 tx off rx off sg off tso off gso off gro off rxvlan off txvlan off ntuple on
        up ethtool -G ens2f1 rx 4096 tx 4096
        up ip link set  ens2f1 txqueuelen 10000
        up ethtool -A ens2f1 rx off tx off adaptive-rx off
        up ethtool -L ens2f1 combined 4 # default combined 8

/etc/init.d/cpufrequtils

GOVERNOR="performance"

прописал правила ip_set для оптимизации скорости работы

 #!/bin/sh
 ipset -N bogons nethash
 ipset -A bogons 224.0.0.0/4
 ipset -A bogons 240.0.0.0/4
 ipset -A bogons 198.18.0.0/15
 ipset -A bogons 192.88.99.0/24
 ipset -A bogons 192.0.2.0/24
 ipset -A bogons 198.51.100.0/24
 ipset -A bogons 203.0.113.0/24
 ipset -A bogons 192.0.0.0/24
 ipset -A bogons 169.254.0.0/16
 ipset -A bogons 100.64.0.0/10
 ipset -A bogons 10.0.0.0/8
 ipset -A bogons 172.16.0.0/12
 ipset -A bogons 192.168.0.0/16

 ipset -N tarpit_limit  nethash
 ipset -A tarpit_limit  10.1.0.0/19

 -A PREROUTING -s 10.1.0.0/19 -m set --match-set bogons dst -j DROP

при написании правил рекомедуется писать их по очереди к примеру правила tcp идут следом за tcp, также и udp udp.

  Generated by iptables-save v1.6.0 on Wed Jan  9 15:16:08 2019
*raw
:PREROUTING ACCEPT [83547165651:91759375064762]
:OUTPUT ACCEPT [222632359:280636653477]
-A PREROUTING -s 91.197.76.0/22 -m set --match-set bogons dst -j DROP
-A PREROUTING -s 10.1.0.0/19 -m set --match-set bogons dst -j DROP
COMMIT
# Completed on Wed Jan  9 15:16:08 2019
# Generated by iptables-save v1.6.0 on Wed Jan  9 15:16:08 2019
*nat
:PREROUTING ACCEPT [2700167709:208611542910]
:INPUT ACCEPT [2381611:143690845]
:OUTPUT ACCEPT [46736935:10250023123]
:POSTROUTING ACCEPT [422649522:37978347663]
-A PREROUTING -s 10.10.10.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination 91.197.0.254
-A POSTROUTING -s 10.1.0.0/19 -o ens2f0.2004 -j SNAT --to-source 195.178.0.64-195.178.0.127 --persistent
COMMIT
# Completed on Wed Jan  9 15:16:08 2019
# Generated by iptables-save v1.6.0 on Wed Jan  9 15:16:08 2019
*filter
:INPUT DROP [13666139:974350046]
:FORWARD ACCEPT [45357769:5088365309]
:OUTPUT ACCEPT [4225370:5268721732]
:tcpchk - [0:0]
-A INPUT -s 127.0.0.1/32 -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -j ACCEPT
-A INPUT -s 10.2.1.0/24 -m state --state NEW -j ACCEPT
-A INPUT -p udp -m multiport --dports 33435:33525 -m limit --limit 1/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/sec -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/sec -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/sec -m icmp --icmp-type 11 -j ACCEPT
-A INPUT -p icmp -j DROP
-A FORWARD -o ens2f0.2004 -j NETFLOW
-A FORWARD -i ens2f0.2004 -j NETFLOW
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m set --match-set tarpit_limit src -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 3000 --connlimit-mask 32 --connlimit-saddr -j TARPIT --tarpit
-A FORWARD -p udp -m set --match-set tarpit_limit src -m udp -m connlimit --connlimit-above 3000 --connlimit-mask 32 --connlimit-saddr -j DROP
-A FORWARD -p udp -m udp -m multiport --dports 67:68,512:514,111,161:162,445 -j DROP
-A FORWARD -p tcp -m tcp -m multiport --dports 445,137:139,512:514,11,111 -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG SYN,PSH -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG SYN,PSH,ACK -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,PSH,URG -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags SYN,ACK NONE -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags SYN,URG SYN,URG -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags PSH,ACK PSH -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
-A tcpchk -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
-A tcpchk -j RETURN
COMMIT
# Completed on Wed Jan  9 15:16:08 2019


 

----
/etc/sysctl.conf    минимальные изменения


#net.netfilter.nf_conntrack_tcp_timeout_established = 900 (default 432000 = 120 часов )
помнить сессию 5 дней если даже если по ней пробежал один байт

#для  работы GRE тунелей добавим  в debian stretch
net.netfilter.nf_conntrack_helper = 1

Проверим что бы были строки :

net.ipv4.ip_forward=1 # 

net.nf_conntrack_max=262144  #увеличение максимальноко колличества сейссий   conntrack_buckets * 4
                             #для избежания сообщений nf_conntrack: table full, dropping packet в dmesg 
                             #при ddos или flood от абонента

net.netfilter.nf_conntrack_buckets = 65536 


Вот полный systl 

s.file-max=1645766
kernel.msgmax = 65536
kernel.msgmnb = 65536
kernel.msgmni=16384
kernel.panic = 5
kernel.printk = 4 4 1 7
net.core.default_qdisc = fq
net.core.dev_weight = 16
net.core.netdev_budget = 50000
net.core.netdev_max_backlog = 100000
net.core.optmem_max = 524287
net.core.rmem_default = 56623104
net.core.rmem_max = 56623104
net.core.somaxconn = 65535
net.core.wmem_default = 56623104
net.core.wmem_max = 56623104
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.icmp_ratelimit = 100
net.ipv4.ip_forward = 1
net.ipv4.ip_local_port_range = 1000     65535
net.ipv4.neigh.default.gc_interval = 3600
net.ipv4.neigh.default.gc_stale_time = 3600
net.ipv4.neigh.default.gc_thresh1 = 2048
net.ipv4.neigh.default.gc_thresh2 = 4096
net.ipv4.neigh.default.gc_thresh3 = 8192
net.ipv4.tcp_congestion_control = htcp
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_max_syn_backlog = 30000
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 10000000 10000000 10000000
net.ipv4.tcp_rmem = 10000000 10000000 10000000
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_wmem = 10000000 10000000 10000000
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192
net.netfilter.nf_conntrack_helper = 1
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10
net.netfilter.nf_conntrack_tcp_timeout_established = 900
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10
net.netflow.natevents = 1
net.nf_conntrack_max = 500000

для тюнинга параметров conntrack_max и hash size нужно воспользоваться инструментом.

nf_conntrack_max
https://manpages.debian.org/unstable/iproute2/ctstat.8.en.html
lnstat -f nf_conntrack -i 1 -c 1000
nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|nf_connt|
 entries|searched|   found|     new| invalid|  ignore|  delete|delete_l|  insert|insert_f|    drop|early_dr|icmp_err|expect_n|expect_c|expect_d|search_r|
        |        |        |        |        |        |        |     ist|        |   ailed|        |      op|      or|      ew|   reate|   elete|  estart|
   44341|       0| 7460959|       0|2375671414|310597499|       0|       0|       0|       4|       4|       0|31828632| 1883358| 5377411| 5377394|2081137785|
   44283|       0|       0|       0|     174|       3|       0|       0|       0|       0|       0|       0|       5|       0|       1|       1|      99|
   44254|       0|       0|       0|     174|       2|       0|       0|       0|       0|       0|       0|       0|       0|       1|       1|      91|
   44083|       0|       1|       0|     227|      60|       0|       0|       0|       0|       0|       0|       2|       0|       0|       0|     134|
   43908|       0|       0|       0|     220|       2|       0|       0|       0|       0|       0|       0|       9|       0|       0|       0|     113|
   43740|       0|       0|       0|     140|       5|       0|       0|       0|       0|       0|       0|       6|       0|       0|       0|     113|

UPD tcp congestion reno cubic и т.д. https://habr.com/ru/post/168407/

Оставить комментарий