Vit routage ak NAT nan Linux

Kòm adrès IPv4 vin apovri, anpil operatè telecom yo ap fè fas ak bezwen pou bay kliyan yo aksè rezo lè l sèvi avèk tradiksyon adrès. Nan atik sa a mwen pral di w ki jan ou ka jwenn pèfòmans Carrier Grade NAT sou sèvè komodite.

Yon istwa ti kras

Sijè a nan espas adrès IPv4 fatige se pa nouvo ankò. Nan kèk pwen, lis datant te parèt nan RIPE, Lè sa a, echanj parèt sou ki blòk adrès yo te fè kòmès ak kontra yo te konkli pou lwe yo. Piti piti, operatè telecom yo te kòmanse bay sèvis aksè entènèt lè l sèvi avèk tradiksyon adrès ak pò. Gen kèk pa t 'jere jwenn ase adrès yo bay yon adrès "blan" nan chak abònen, pandan ke lòt moun te kòmanse ekonomize lajan lè yo refize achte adrès sou mache segondè a. Manifaktirè ekipman rezo sipòte lide sa a, paske fonksyonalite sa a anjeneral mande pou modil ekstansyon adisyonèl oswa lisans. Pou egzanp, nan liy Juniper a nan routeurs MX (eksepte pou dènye MX104 ak MX204), ou ka fè NAPT sou yon kat sèvis MS-MIC separe, Cisco ASR1k mande pou yon lisans CGN, Cisco ASR9k mande pou yon modil separe A9K-ISM-100. ak yon lisans A9K-CGN -LIC pou li. An jeneral, plezi a koute anpil lajan.

IPTables

Travay nan fè NAT pa mande pou resous enfòmatik espesyalize; li ka rezoud pa processeurs jeneral, ki enstale, pou egzanp, nan nenpòt routeur lakay ou. Sou echèl yon operatè telecom, pwoblèm sa a ka rezoud lè l sèvi avèk sèvè komodite kouri FreeBSD (ipfw/pf) oswa GNU/Linux (iptables). Nou p ap konsidere FreeBSD, paske... Mwen te sispann sèvi ak OS sa a byen lontan de sa, kidonk nou pral rete sou GNU/Linux.

Aktive tradiksyon adrès se pa ditou difisil. Premye ou bezwen anrejistre yon règ nan iptables nan tab la nat:

iptables -t nat -A POSTROUTING -s 100.64.0.0/10 -j SNAT --to <pool_start_addr>-<pool_end_addr> --persistent

Sistèm operasyon an pral chaje modil nf_conntrack, ki pral kontwole tout koneksyon aktif yo epi fè konvèsyon ki nesesè yo. Gen plizyè sibtilite isit la. Premyèman, depi nou ap pale de NAT sou echèl yon operatè telecom, li nesesè ajiste delè yo, paske ak valè default gwosè tab tradiksyon an ap grandi byen vit nan valè katastwofik. Anba a se yon egzanp anviwònman mwen te itilize sou sèvè mwen yo:

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

Ak dezyèmman, depi gwosè default tab tradiksyon an pa fèt pou travay nan kondisyon yon operatè telecom, li bezwen ogmante:

net.netfilter.nf_conntrack_max = 3145728

Li nesesè tou pou ogmante kantite bokit pou tab hash ki estoke tout emisyon (sa a se yon opsyon nan modil nf_conntrack):

options nf_conntrack hashsize=1572864

Apre manipilasyon senp sa yo, yo jwenn yon konsepsyon konplètman k ap travay ki ka tradui yon gwo kantite adrès kliyan nan yon pisin ekstèn. Sepandan, pèfòmans nan solisyon sa a kite anpil yo dwe vle. Nan premye tantativ mwen nan itilize GNU/Linux pou NAT (anviwon 2013), mwen te kapab jwenn pèfòmans nan anviwon 7Gbit/s nan 0.8Mpps pou chak sèvè (Xeon E5-1650v2). Depi lè sa a, anpil optimize diferan yo te fèt nan pile rezo nwayo GNU/Linux la, pèfòmans yon sèl sèvè sou menm pyès ki nan konpitè te ogmante a prèske 18-19 Gbit/s nan 1.8-1.9 Mpps (sa yo te valè maksimòm yo) , men demann lan pou volim trafik, trete pa yon sèl sèvè te grandi pi vit. Kòm yon rezilta, rapid yo te devlope balans chaj la sou diferan serveurs, men tout bagay sa a ogmante konpleksite nan mete kanpe, kenbe ak kenbe bon jan kalite a nan sèvis yo bay yo.

NTFables

Sèjousi, yon tandans alamòd nan lojisyèl "chanje sak" se itilizasyon DPDK ak XDP. Anpil atik yo te ekri sou sijè sa a, anpil diskou diferan yo te fè, ak pwodwi komèsyal yo ap parèt (pa egzanp, SKAT soti nan VasExperts). Men, bay resous pwogramasyon limite operatè telecom yo, li se byen pwoblèm pou kreye nenpòt "pwodwi" ki baze sou kad sa yo poukont ou. Li pral pi difisil pou opere yon solisyon konsa nan tan kap vini an, an patikilye, zouti dyagnostik yo pral dwe devlope. Pou egzanp, estanda tcpdump ak DPDK pa pral travay jis konsa, epi li pa pral "wè" pake voye tounen nan fil yo lè l sèvi avèk XDP. Nan mitan tout pale sou nouvo teknoloji pou voye pake pake nan espas itilizatè yo, yo te pase inapèsi rapò и atik Pablo Neira Ayuso, mentèr iptables, sou devlopman dechaje koule nan nftables. Ann pran yon gade pi pre nan mekanis sa a.

Lide prensipal la se ke si routeur la te pase pake ki soti nan yon sesyon nan toude direksyon koule a (sesyon TCP te antre nan eta ETABLISHED), Lè sa a, pa gen okenn bezwen pase pake ki vin apre nan sesyon sa a nan tout règ firewall, paske tout chèk sa yo ap toujou fini ak pake a ke yo te transfere pi lwen nan routage la. Epi nou pa aktyèlman bezwen chwazi yon wout - nou deja konnen nan ki koòdone ak nan ki lame nou bezwen voye pake nan sesyon sa a. Tout sa ki rete se estoke enfòmasyon sa yo epi sèvi ak li pou routage nan yon etap bonè nan pwosesis pake. Lè w ap fè NAT, li nesesè pou tou estoke enfòmasyon sou chanjman nan adrès ak pò modil nf_conntrack tradui. Wi, nan kou, nan ka sa a divès kalite polisye ak lòt enfòmasyon ak règ estatistik nan iptables sispann travay, men nan kad travay la nan yon NAT kanpe apa oswa, pou egzanp, yon fwontyè, sa a se pa tèlman enpòtan, paske sèvis yo. yo distribye atravè aparèy yo.

Konfigirasyon

Pou itilize fonksyon sa a nou bezwen:

  • Sèvi ak yon nwayo fre. Malgre lefèt ke fonksyonalite nan tèt li te parèt nan nwayo 4.16, pou yon tan long li te trè "kri" ak regilyèman lakòz panik nwayo. Tout bagay estabilize alantou Desanm 2019, lè LTS nwayo 4.19.90 ak 5.4.5 yo te lage.
  • Reekri règ iptables yo nan fòma nftables lè l sèvi avèk yon vèsyon ki resan nan nftables. Travay egzakteman nan vèsyon 0.9.0

Si tout bagay nan prensip klè ak premye pwen an, bagay prensipal la se pa bliye mete modil la nan konfigirasyon an pandan asanble (CONFIG_NFT_FLOW_OFFLOAD = m), Lè sa a, dezyèm pwen an mande pou eksplikasyon. Règ nftables yo dekri yon fason diferan pase nan iptables. Dokimantasyon revele prèske tout pwen, gen tou espesyal konvètisè yo règ soti nan iptables rive nan nftables. Se poutèt sa, mwen pral sèlman bay yon egzanp nan mete kanpe NAT ak koule dechaje. Yon ti lejand pou egzanp: , - sa yo se koòdone rezo yo atravè ki trafik pase; an reyalite ka gen plis pase de nan yo. , - adrès la kòmanse ak fini nan seri adrès "blan".

Konfigirasyon NAT trè senp:

#! /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
        }
}

Avèk dechaj koule li se yon ti kras pi konplike, men byen konprann:

#! /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;
        }
}

Sa, an reyalite, se tout konfigirasyon an. Koulye a, tout trafik TCP/UDP pral tonbe nan tab Fastnat la epi yo pral trete anpil pi vit.

Jwenn

Pou fè li klè ki jan "pi vit" sa a ye, mwen pral tache yon Ekran nan chaj la sou de sèvè reyèl, ak pyès ki nan konpitè menm (Xeon E5-1650v2), ki idantik konfigirasyon, lè l sèvi avèk menm nwayo Linux la, men fè NAT nan iptables. (NAT4) ak nan nftables (NAT5).

Vit routage ak NAT nan Linux

Pa gen okenn graf nan pake pou chak segonn nan ekran an, men nan pwofil la chaj nan sa yo gwosè pake an mwayèn se alantou 800 bytes, kidonk valè yo rive jiska 1.5Mpps. Kòm ou ka wè, sèvè a ak nftables gen yon rezèv pèfòmans gwo. Kounye a, sèvè sa a trete jiska 30Gbit/s nan 3Mpps epi li klèman kapab satisfè limit rezo fizik la nan 40Gbps, pandan y ap gen resous CPU gratis.

Mwen espere ke materyèl sa a pral itil enjenyè rezo yo ap eseye amelyore pèfòmans nan serveurs yo.

Sous: www.habr.com

Add nouvo kòmantè