ISPforum 2016 Jezerka NAT++
1. část Kolik to dá, když to nainstaluju?
Překlad síťových adres (NAT) Zajímalo nás jak výkonný je NAT na Linuxu (a nejen na něm) Kolik paketů za sekundu je možné odbavit? Jak se s různou zátěží mění Round Trip Time? Jak jsme to měřili Vytvořili jsme 10 000 toků Délka rámců: 128 Bytů L4: UDP Postupně jsme zvyšovali zátěž linky až do 10 Gbps Měřili jsme kolik paketů bylo skutečně přeloženo
Spirent TestCenter Testovací prostředí pro verifikaci síťových zařízení Výhody Přesné generování toků Analýza příchozích paketů Nevýhody Nedostupná podpora plnohodnotného TCP provozu Provoz je syntetický
Round Trip Time Jak dlouho trvá od odeslání paketu získat potvrzení o jeho doručení Stejně pro všechny měřené platformy:
Nastavení NATu na operačních systémech Přerušení rozložené na všechna jádra Velikost conntrack tabulky: 262140 položek v 65536 bucketech (výchozí nastavení v Debianu 8.2) NAT ve FreeBSD nastaven pomocí nástroje PF NAT na RouterOS nastaven prostřednictvím WebFig
Intel Xeon (2012) Intel Xeon E5-2620 6 jader (12 vláken) 2,00 GHz 15 MB cache 32 GB RAM NIC: Intel X520-DA2 (2x 10Gbps) Linux 3.16 Linux 4.3.0 2,4 Mpps 3,7 Mpps
Intel i7 (2015) Intel Core i7-6700 4 jádra (8 vláken) 3,40 GHz 8 MB cache 16 GB RAM NIC: Intel X520-DA2 (2x 10Gbps) Linux 3.16 Linux 4.3 FreeBSD 10.2 5,1 Mpps 5,5 Mpps 1,1 Mpps
Intel i3 (2015) Intel Core i3-6300 2 jádra (4 vlákna) 3,80 GHz 4 MB cache 16 GB RAM NIC: Intel X520-DA2 (2x 10Gbps) Linux 3.16 Linux 4.3 2,8 Mpps 2,9 Mpps
Intel Xeon (2010) Intel Xeon E5420 4 jádra (bez HT) 2,50 GHz 12 MB cache 10 GB RAM NIC: Intel X520-DA2 (2x 10Gbps) Linux 4.3 RouterOS 6.34 1,4 Mpps 0,6 Mpps
AMD Opteron AMD Opteron 6376 (2012) 4 16 jader 16 MB cache 2,30 GHz 64 GB RAM NIC: Intel X520-DA2 (2x 10Gbps) Linux 3.16 1,8 Mpps
ARM Platformy - 1Gbps rozhraní Olimex OLinuXino LIME A20 HardKernel Odroid C1+ ARM Cortex-A7 Dual-core @ 1 GHz, 512 MB DDR3 RAM Propustnost: 33 Kpps ARM Cortex-A5 Quad-core @ 1.5 GHz, 1 GB DDR3 RAM Propustnost: 154 Kpps HardKernel Odroid XU4 ARM Cortex-A15 Quad-core @ 2 GHz ARM Cortex-A7 Quad-core @ 1.4 GHz 2GB LPDDR RAM Propustnost: N/A
Shrnutí měření Linux 3.16 Linux 4.3 FreeBSD RouterOS Intel i7 (2015) 5,1 5,5 1,1 - Intel Xeon (2012) 2,4 3,7 - - Intel i3 (2015) 2,8 2,9 - - AMD Opteron 1,8 - - - Intel Xeon (2010) - 1,4-0,6
2. část Jak to zrychlit?
Ladění: CONNTRACK Tabulka pro uchování probíhajících spojení Hashovací tabulka, položky řetězeny lineárně nf_conntrack_max = maximální počet sledovaných toků (256K výchozí) nastavuje se v závislosti na dostupné paměti Velikost paměti v bytech / 16384 / (x / 32), x = 32 nebo 64 podle architektury nf_conntrack_buckets = počet bucketů v tabulce (64K výchozí) systém odvozuje podle velikosti conntrack CONNTRACK_MAX / 8 Zachovat co nejmenší poměr mezi parametry (1 bucket se chová jako seznam => pomalé vyhledávání při velkém počtu toků)
Ladění: CONNTRACK Nedostatečená kapacita silně ovlivní výkonnost, stejně tak nevhodný poměr hodnot nf_conntrack_max a nf_conntrack_buckets Vliv je více patrný u velkého počtu toků (v měření použito 1000000 toků) při nižším množství toků je rozdíl řádově menší
Ladění: Timeouty Výchozí hodnoty relativně dlouhé TCP spojení ve stavu ESTABLISHED až 5 dní! Kratší hodnoty umožní efektivně čistit tabulky => obslouží více spojení Nastavení v souborech /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_<stav>
Ladění: Nový vs. starý kernel Nové verze kernelu pomáhají s výkonností (optimalizace zpracování, ovladačů aj.) Při nasazování prověřit stabilitu
Ladění: Přerušení a CPU Každá RX/TX fronta síťové karty dostane vlastní číslo přerušení Ve výchozím nastavení přiděleny všechny na jedno jádro CPU irqbalance -- výchozí nástroj pro rozložení přerušení Rozložení lze nastavit i ručně pro RX: /proc/irq/<číslo irq>/smp_affinity pro TX: /sys/class/net/<rozhraní>/queues/tx-<číslo fronty>/xps_cpus
Ladění: Multi-CPU stroje Každý CPU má přiděleny vlastní PCI-E sloty Přenos dat mezi CPU zpomaluje (nutnost synchronizace) Intel HyperThreading - není ideální pro síťové úlohy, může mít negativní vliv na rychlost zpracování
DPDK NAT DPDK framework pro vývoj aplikací zpracovávající síťovou komunikaci obchází Linux Kernel (zpracování paketů v userspace)
3. část Co s tím dál?
Myšlenka IP koncentrátoru Jenom NAT nestačí pro nasazení u ISP Další funkce: centrální správa sítě s jednodušším nastavením (web frontend ala Mikrotik + napojitelnost na existující systémy ISP) Podpora různých adresných schémat (Statické IP adresy, DHCP, PPPoE, ještě něco?) NAT a IP filtr / firewall (SNAT, DNAT, Blokace IP, portu, přesměrováni, ) Traffic shaping VLAN Směrování (OSPF, ) SNMP Radius Postupně akcelerovat potřebné funkce (které jsou pro vás vhodné?)
Další motivace pro IP koncentrátor Pružnější správa přístupu koncových zařízení do sítě - odděluje je od správy zbytku sítě. Centralizované řešení, kde se přístup do sítě, ověření a účtování řeší v jednom bodě. Úkolem sítě je "pouze" doručit pakety na koncentrátor. Díky AAA lepší přehled o aktivitě klienta. Směruje administratora mít pořádek v síti. Obsahuje REST API pro ovládání z nadřazených billing systemů (ISP admin, FreeNet IS) Automatizuje činnosti spojené s přídáváním, konfigurováním a monitorováním klientů připojených do sítě.
Děkujeme za pozornost...a budeme rádi za náměty pro další vývoj