TÄ kÄ IPv4 adreses izsÄ«kst, daudzi telekomunikÄciju operatori saskaras ar nepiecieÅ”amÄ«bu nodroÅ”inÄt saviem klientiem piekļuvi tÄ«klam, izmantojot adreÅ”u tulkoÅ”anu. Å ajÄ rakstÄ es jums pastÄstÄ«Å”u, kÄ jÅ«s varat iegÅ«t Carrier Grade NAT veiktspÄju preÄu serveros.
Nedaudz vÄstures
IPv4 adreÅ”u telpas izsmelÅ”anas tÄma vairs nav jauna. KÄdÄ brÄ«dÄ« RIPE parÄdÄ«jÄs gaidÄ«Å”anas saraksti, tad radÄs biržas, kurÄs tika tirgoti adreÅ”u bloki un noslÄgti darÄ«jumi par to nomu. PamazÄm telekomunikÄciju operatori sÄka nodroÅ”inÄt interneta piekļuves pakalpojumus, izmantojot adreÅ”u un portu tulkoÅ”anu. Dažiem neizdevÄs iegÅ«t pietiekami daudz adreÅ”u, lai katram abonentam izsniegtu ābaltoā adresi, savukÄrt citi sÄka taupÄ«t naudu, atsakoties iegÄdÄties adreses otrreizÄjÄ tirgÅ«. TÄ«kla iekÄrtu ražotÄji atbalstÄ«ja Å”o ideju, jo Å”ai funkcionalitÄtei parasti ir nepiecieÅ”ami papildu paplaÅ”inÄjumu moduļi vai licences. PiemÄram, Juniper MX marÅ”rutÄtÄju lÄ«nijÄ (izÅemot jaunÄkos MX104 un MX204) NAPT var veikt atseviÅ”Ä·Ä MS-MIC servisa kartÄ, Cisco ASR1k nepiecieÅ”ama CGN licence, Cisco ASR9k ir nepiecieÅ”ams atseviŔķs A9K-ISM-100 modulis. un viÅam A9K-CGN licence -LIC. KopumÄ prieks maksÄ daudz naudas.
IPTables
NAT veikÅ”anas uzdevumam nav nepiecieÅ”ami specializÄti skaitļoÅ”anas resursi, to var atrisinÄt ar vispÄrÄjas nozÄ«mes procesoriem, kas tiek uzstÄdÄ«ti, piemÄram, jebkurÄ mÄjas marÅ”rutÄtÄjÄ. TelekomunikÄciju operatora mÄrogÄ Å”o problÄmu var atrisinÄt, izmantojot preÄu serverus, kuros darbojas FreeBSD (ipfw/pf) vai GNU/Linux (iptables). MÄs neapsvÄrsim FreeBSD, jo... Es pÄrtraucu lietot Å”o OS diezgan sen, tÄpÄc mÄs paliksim pie GNU/Linux.
Adreses tulkoÅ”anas iespÄjoÅ”ana nepavisam nav grÅ«ta. Vispirms nat tabulÄ ir jÄreÄ£istrÄ kÄrtula iptables:
iptables -t nat -A POSTROUTING -s 100.64.0.0/10 -j SNAT --to <pool_start_addr>-<pool_end_addr> --persistent
OperÄtÄjsistÄma ielÄdÄs moduli nf_conntrack, kas uzraudzÄ«s visus aktÄ«vos savienojumus un veiks nepiecieÅ”amÄs konvertÄcijas. Å eit ir vairÄki smalkumi. PirmkÄrt, tÄ kÄ mÄs runÄjam par NAT telekomunikÄciju operatora mÄrogÄ, ir nepiecieÅ”ams pielÄgot taimautus, jo ar noklusÄjuma vÄrtÄ«bÄm tulkoÅ”anas tabulas lielums Ätri pieaugs lÄ«dz katastrofÄlÄm vÄrtÄ«bÄm. TÄlÄk ir sniegts savos serveros izmantoto iestatÄ«jumu piemÄrs:
net.ipv4.ip_forward = 1
net.ipv4.ip_local_port_range = 8192 65535
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
Un, otrkÄrt, tÄ kÄ tulkoÅ”anas tabulas noklusÄjuma lielums nav paredzÄts darbam telekomunikÄciju operatora apstÄkļos, tas ir jÄpalielina:
net.netfilter.nf_conntrack_max = 3145728
Ir arÄ« jÄpalielina segmentu skaits hash tabulai, kurÄ tiek glabÄti visi raidÄ«jumi (Ŕī ir opcija modulÄ« nf_conntrack):
options nf_conntrack hashsize=1572864
PÄc Ŕīm vienkÄrÅ”ajÄm manipulÄcijÄm tiek iegÅ«ts pilnÄ«bÄ funkcionÄjoÅ”s dizains, kas var pÄrvÄrst lielu skaitu klientu adreÅ”u ÄrÄjo adreÅ”u pÅ«lÄ. TomÄr Ŕī risinÄjuma veiktspÄja atstÄj daudz ko vÄlÄties. Pirmajos mÄÄ£inÄjumos izmantot GNU/Linux operÄtÄjsistÄmai NAT (apmÄram 2013. gadÄ), man izdevÄs iegÅ«t veiktspÄju aptuveni 7 Gbit/s ar Ätrumu 0.8 Mpps uz vienu serveri (Xeon E5-1650v2). KopÅ” tÄ laika GNU/Linux kodola tÄ«kla stekÄ ir veiktas daudzas dažÄdas optimizÄcijas, viena servera veiktspÄja uz vienas aparatÅ«ras ir palielinÄjusies lÄ«dz gandrÄ«z 18-19 Gbit/s pie 1.8-1.9 Mpps (tÄs bija maksimÄlÄs vÄrtÄ«bas) , taÄu pieprasÄ«jums pÄc trafika apjoma, ko apstrÄdÄ viens serveris, pieauga daudz straujÄk. RezultÄtÄ tika izstrÄdÄtas shÄmas dažÄdu serveru slodzes lÄ«dzsvaroÅ”anai, taÄu tas viss palielinÄja sniegto pakalpojumu iestatÄ«Å”anas, uzturÄÅ”anas un kvalitÄtes uzturÄÅ”anas sarežģītÄ«bu.
NFTabulas
MÅ«sdienÄs programmatÅ«ras āpÄrslÄgÅ”anÄs somuā modes tendence ir DPDK un XDP izmantoÅ”ana. Par Å”o tÄmu ir rakstÄ«ts daudz rakstu, izteiktas dažÄdas runas, parÄdÄs komercprodukti (piemÄram, SKAT no VasExperts). Bet, Åemot vÄrÄ telekomunikÄciju operatoru ierobežotos programmÄÅ”anas resursus, ir diezgan problemÄtiski patstÄvÄ«gi izveidot jebkuru āproduktuā, pamatojoties uz Å”iem ietvariem. NÄkotnÄ ar Å”Ädu risinÄjumu darboties bÅ«s daudz grÅ«tÄk, jo Ä«paÅ”i bÅ«s jÄizstrÄdÄ diagnostikas instrumenti. PiemÄram, standarta tcpdump ar DPDK nedarbosies tÄpat vien, un tas "neredzÄs" paketes, kas tiek nosÅ«tÄ«tas atpakaļ uz vadiem, izmantojot XDP. VisÄs runÄs par jaunajÄm tehnoloÄ£ijÄm pakeÅ”u pÄrsÅ«tÄ«Å”anas izvadÄ«Å”anai lietotÄja telpÄ tÄs palika nepamanÄ«tas
GalvenÄ ideja ir tÄda, ka, ja marÅ”rutÄtÄjs nodod paketes no vienas sesijas abos plÅ«smas virzienos (TCP sesija pÄrgÄja stÄvoklÄ« ESTABLISHED), tad nav nepiecieÅ”ams nodot nÄkamÄs Ŕīs sesijas paketes caur visiem ugunsmÅ«ra noteikumiem, jo visas Ŕīs pÄrbaudes joprojÄm beigsies ar paketes pÄrsÅ«tÄ«Å”anu tÄlÄk uz marÅ”rutÄÅ”anu. Un mums faktiski nav jÄizvÄlas marÅ”ruts ā mÄs jau zinÄm, uz kuru saskarni un uz kuru resursdatoru mums ir jÄnosÅ«ta paketes Ŕīs sesijas laikÄ. Atliek tikai saglabÄt Å”o informÄciju un izmantot to marÅ”rutÄÅ”anai agrÄ«nÄ pakeÅ”u apstrÄdes stadijÄ. Veicot NAT, nepiecieÅ”ams papildus glabÄt informÄciju par moduļa nf_conntrack tulkotajÄm adreÅ”u un portu izmaiÅÄm. JÄ, protams, Å”ajÄ gadÄ«jumÄ iptables pÄrstÄj darboties dažÄdi policisti un citi informÄcijas un statistikas noteikumi, bet atseviŔķa pastÄvÄ«gÄ NAT vai, piemÄram, robežas uzdevuma ietvaros tas nav tik svarÄ«gi, jo dienesti tiek izplatÄ«ti starp ierÄ«cÄm.
KonfigurÄcija
Lai izmantotu Ŕo funkciju, mums ir nepiecieŔams:
- Izmantojiet svaigu kodolu. Neskatoties uz to, ka pati funkcionalitÄte parÄdÄ«jÄs kodolÄ 4.16, diezgan ilgu laiku tÄ bija ļoti āneapstrÄdÄtaā un regulÄri izraisÄ«ja kodola paniku. Viss stabilizÄjÄs ap 2019. gada decembri, kad tika izlaisti LTS kodoli 4.19.90 un 5.4.5.
- PÄrrakstiet iptables noteikumus nftables formÄtÄ, izmantojot diezgan jaunÄku nftables versiju. Darbojas tieÅ”i versijÄ 0.9.0
Ja ar pirmo punktu principÄ viss ir skaidrs, galvenais neaizmirst montÄjot moduli iekļaut konfigurÄcijÄ (CONFIG_NFT_FLOW_OFFLOAD=m), tad otrais punkts prasa paskaidrojumu. nftables noteikumi ir aprakstÄ«ti pavisam savÄdÄk nekÄ iptables.
NAT konfigurÄcija ir ļoti vienkÄrÅ”a:
#! /usr/sbin/nft -f
table nat {
chain postrouting {
type nat hook postrouting priority 100;
oif <o_if> snat to <pool_addr_start>-<pool_addr_end> persistent
}
}
Ar plÅ«smas noslodzi ir nedaudz sarežģītÄk, bet diezgan saprotami:
#! /usr/sbin/nft -f
table inet filter {
flowtable fastnat {
hook ingress priority 0
devices = { <i_if>, <o_if> }
}
chain forward {
type filter hook forward priority 0; policy accept;
ip protocol { tcp , udp } flow offload @fastnat;
}
}
Tas patiesÄ«bÄ ir viss uzstÄdÄ«jums. Tagad visa TCP/UDP trafika nonÄks fastnat tabulÄ un tiks apstrÄdÄta daudz ÄtrÄk.
rezultÄtus
Lai bÅ«tu skaidrs, cik tas ir ādaudz ÄtrÄkā, pievienoÅ”u ekrÄnuzÅÄmumu, kurÄ redzama slodze uz diviem reÄliem serveriem ar vienÄdu aparatÅ«ru (Xeon E5-1650v2), identiski konfigurÄtu, izmantojot to paÅ”u Linux kodolu, bet veic NAT iptables. (NAT4) un nftables (NAT5).
EkrÄnuzÅÄmumÄ nav pakeÅ”u diagrammas sekundÄ, taÄu Å”o serveru slodzes profilÄ vidÄjais pakeÅ”u lielums ir aptuveni 800 baiti, tÄpÄc vÄrtÄ«bas sasniedz pat 1.5 Mpps. KÄ redzat, serverim ar nftables ir milzÄ«ga veiktspÄjas rezerve. PaÅ”laik Å”is serveris apstrÄdÄ lÄ«dz 30Gbit/s ar Ätrumu 3Mpps un nepÄrprotami spÄj izpildÄ«t fiziskÄ tÄ«kla ierobežojumu 40Gbps, vienlaikus nodroÅ”inot brÄ«vus CPU resursus.
Ceru, ka Å”is materiÄls bÅ«s noderÄ«gs tÄ«kla inženieriem, kuri cenÅ”as uzlabot savu serveru veiktspÄju.
Avots: www.habr.com