Ntugharị ngwa ngwa na NAT na Linux

Ka adreesị IPv4 na-agwụ agwụ, ọtụtụ ndị na-arụ ọrụ ekwentị na-eche mkpa ịnye ndị ahịa ha ohere netwọkụ site na iji ntụgharị asụsụ adreesị. N'isiokwu a, m ga-agwa gị otu ị ga-esi nweta arụmọrụ Carrier Grade NAT na sava ngwa ahịa.

A bit nke akụkọ ihe mere eme

Isiokwu nke ike ọgwụgwụ oghere adreesị IPv4 abụghịzi ọhụrụ. N'oge ụfọdụ, ndepụta echere pụtara na RIPE, mgbe ahụ mgbanwe pụtara na nke a na-ere ihe ngọngọ nke adreesị ma kwubie nkwekọrịta ịgbazinye ha. Nke nta nke nta, ndị na-ahụ maka telecom malitere ịnye ọrụ ịnweta ịntanetị site na iji adreesị na ntụgharị ọdụ ụgbọ mmiri. Ụfọdụ enweghị ike ịnweta adreesị zuru ezu iji nye adreesị "ọcha" nye onye ọ bụla debanyere aha, ebe ndị ọzọ malitere ịchekwa ego site n'ịjụ ịzụta adreesị na ahịa nke abụọ. Ndị na-emepụta akụrụngwa netwọk kwadoro echiche a, n'ihi na ọrụ a na-achọkarị modul ndọtị agbakwunyere ma ọ bụ ikikere. Dịka ọmụmaatụ, n'ahịrị Juniper nke MX router (ma e wezụga MX104 na MX204 kachasị ọhụrụ), ị nwere ike ịrụ NAPT na kaadị ọrụ MS-MIC dị iche, Cisco ASR1k chọrọ ikikere CGN, Cisco ASR9k chọrọ modul A9K-ISM-100 dị iche. na ikike A9K-CGN -LIC nye ya. N'ozuzu, obi ụtọ na-efu nnukwu ego.

IPTables

Ọrụ nke ịrụ NAT anaghị achọ akụrụngwa kọmpụta pụrụ iche; enwere ike idozi ya site na ndị na-arụ ọrụ izugbe, nke etinyere, dịka ọmụmaatụ, na rawụta ụlọ ọ bụla. N'ọnụ ọgụgụ nke onye na-ahụ maka telecom, enwere ike idozi nsogbu a site na iji sava ngwa ahịa na-agba ọsọ FreeBSD (ipfw/pf) ma ọ bụ GNU/Linux (iptables). Anyị agaghị atụle FreeBSD, n'ihi na ... Akwụsịrị m iji OS a ogologo oge gara aga, yabụ anyị ga-arapara na GNU/Linux.

Ịkwa ntụgharị asụsụ adreesị esighị ike ma ọlị. Mbụ ị ga-edebanye aha iwu na iptables na tebụl nat:

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

Sistemụ arụmọrụ ga-ebu modul nf_conntrack, nke ga-enyocha njikọ niile na-arụ ọrụ ma mee mgbanwe ndị dị mkpa. Enwere ọtụtụ aghụghọ ebe a. Nke mbụ, ebe ọ bụ na anyị na-ekwu maka NAT n'ogo nke onye na-arụ ọrụ telecom, ọ dị mkpa ịhazigharị oge, n'ihi na site na ụkpụrụ ndabara, nha nke tebụl ntụgharị ga-eto ngwa ngwa na ụkpụrụ ọdachi. N'okpuru bụ ọmụmaatụ ntọala m jiri na sava m:

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

Ma nke abụọ, ebe ọ bụ na emeghị nha nke ndabara nke tebụl ntụgharị ka ọ rụọ ọrụ n'okpuru ọnọdụ onye na-ahụ maka telecom, ọ kwesịrị ịbawanye:

net.netfilter.nf_conntrack_max = 3145728

Ọ dịkwa mkpa ịbawanye ọnụ ọgụgụ bọket maka tebụl hash na-echekwa mgbasa ozi niile (nke a bụ nhọrọ na nf_conntrack modul):

options nf_conntrack hashsize=1572864

Mgbe nhazi ndị a dị mfe, a na-enweta nhazi zuru oke nke nwere ike ịsụgharị ọnụ ọgụgụ dị ukwuu nke adreesị ndị ahịa n'ime ọdọ mmiri nke mpụga. Otú ọ dị, arụmọrụ nke ngwọta a na-ahapụ ọtụtụ ihe a chọrọ. Na mbọ mbụ m mere iji GNU/Linux maka NAT (ihe dị ka 2013), enwere m ike nweta arụmọrụ gburugburu 7Gbit/s na 0.8Mpps kwa nkesa (Xeon E5-1650v2). Kemgbe oge ahụ, emela ọtụtụ nkwalite dị iche iche na nchịkọta GNU/Linux kernel network, arụmọrụ nke otu ihe nkesa na otu ngwaike abawanyela ruo ihe fọrọ nke nta ka ọ bụrụ 18-19 Gbit/s na 1.8-1.9 Mpps (ndị a bụ ụkpụrụ kachasị). , mana ọchịchọ maka olu okporo ụzọ, nke otu sava na-ahazi na-eto ngwa ngwa. N'ihi ya, e mepụtara atụmatụ iji dozie ibu dị na sava dị iche iche, ma ihe a nile na-eme ka mgbagwoju anya nke ịtọlite, na-ejigide na ịnọgide na-enwe àgwà nke ọrụ ndị a na-enye.

NTT

N'oge a, usoro ejiji na ngwanrọ "akpa mgbanwe" bụ ojiji nke DPDK na XDP. Edewo ọtụtụ akụkọ banyere isiokwu a, ọtụtụ okwu dị iche iche ka ekwuru, na ngwaahịa azụmahịa na-apụta (dịka ọmụmaatụ, SKAT sitere na VasExperts). Mana n'inye obere akụrụngwa mmemme nke ndị na-ahụ maka telecom, ọ bụ nnukwu nsogbu imepụta “ngwaahịa” ọ bụla dabere na usoro ndị a n'onwe gị. Ọ ga-esi ike karị ịrụ ọrụ ngwọta dị otú ahụ n'ọdịnihu; karịsịa, a ga-emepụta ngwaọrụ nyocha. Dịka ọmụmaatụ, tcpdump ọkọlọtọ na DPDK agaghị arụ ọrụ dị ka nke ahụ, ọ gaghịkwa "hụ" ngwugwu ezigara na wires site na iji XDP. N'ime okwu niile a na-ekwu maka teknụzụ ọhụrụ maka mbupụ ngwugwu na oghere onye ọrụ, a hụghị ha akụkọ и edemede Pablo Neira Ayuso, onye na-elekọta iptables, gbasara mmepe nke mbupu na-erute na nftables. Ka anyị lebakwuo anya na usoro a.

Isi echiche bụ na ọ bụrụ na rawụta gafere ngwugwu site na otu nnọkọ n'akụkụ abụọ nke eruba (TCP nnọkọ wee banye na steeti guzosiri ike), mgbe ahụ ọ dịghị mkpa ịgafe na-esote ngwugwu nke nnọkọ a site na niile firewall iwu, n'ihi na. Ntụle ego ndị a niile ka ga-akwụsị site na ibufe ngwugwu ahụ gaa n'ihu na njem. Ma anyị adịghị mkpa n'ezie ịhọrọ ụzọ - anyị amaraworị nke interface na onye ọbịa anyị kwesịrị iziga ngwugwu n'ime nnọkọ a. Naanị ihe fọdụrụ bụ ịchekwa ozi a ma jiri ya mee njem n'oge mmalite nke nhazi ngwugwu. Mgbe ị na-eme NAT, ọ dị mkpa ịchekwa ozi gbasara mgbanwe na adreesị na ọdụ ụgbọ mmiri nke nf_conntrack modul tụgharịrị. Ee, n'ezie, na nke a dị iche iche uwe ojii na ozi ndị ọzọ na ọnụ ọgụgụ iwu na iptables kwụsị ịrụ ọrụ, ma n'ime kpuchie nke ọrụ nke a iche iche guzo NAT ma ọ bụ, ihe atụ, a ókè-ala, nke a abụghị otú dị mkpa, n'ihi na ọrụ. na-ekesa n'ofe ngwaọrụ.

Nhazi

Iji jiri ọrụ a anyị chọrọ:

  • Jiri mkpụrụ ndụ ọhụrụ. N'agbanyeghị na ọrụ ahụ n'onwe ya pụtara na kernel 4.16, ogologo oge ọ bụ "raw" ma na-akpata ụjọ kernel mgbe niile. Ihe niile kwụsiri ike na Disemba 2019, mgbe ewepụtara LTS kernels 4.19.90 na 5.4.5.
  • Tinyegharịa iwu iptables n'ụdị nftables site na iji ụdị nftables na-adịbeghị anya. Na-arụ ọrụ kpọmkwem na ụdị 0.9.0

Ọ bụrụ na ihe niile dị n'ụkpụrụ doro anya na isi ihe mbụ, isi ihe bụ ịghara ichefu itinye modul na nhazi n'oge mgbakọ (CONFIG_NFT_FLOW_OFFLOAD = m), mgbe ahụ, isi ihe nke abụọ chọrọ nkọwa. A na-akọwa iwu nftables kpamkpam dị iche iche karịa na iptables. Документация na-ekpughe fọrọ nke nta niile isi, e nwekwara pụrụ iche ndị ntụgharị iwu site iptables ruo nftables. Ya mere, m ga-enye naanị ihe atụ nke ịtọlite ​​​​NAT na erugharị offload. Obere akụkọ ifo dịka ọmụmaatụ: , - ndị a bụ netwọk netwọk nke okporo ụzọ na-agafe; n'eziokwu enwere ike inwe ihe karịrị abụọ n'ime ha. , - mmalite na njedebe adreesị nke nso nke "ọcha" adreesị.

Nhazi NAT dị nnọọ mfe:

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

Site na mbupụ mbugharị ọ dị ntakịrị mgbagwoju anya, mana enwere nghọta:

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

Nke ahụ, n'ezie, bụ nhazi niile. Ugbu a okporo ụzọ TCP / UDP niile ga-adaba na tebụl fastnat ma hazie ya ngwa ngwa.

Результаты

Iji mee ka o doo anya otu "ngwa ngwa" nke a si dị, m ga-etinye nseta ihuenyo nke ibu na ezigbo sava abụọ, nwere otu ngwaike (Xeon E5-1650v2), ahaziri ya, na-eji otu Linux kernel, mana na-arụ ọrụ NAT na iptables. (NAT4) na nftables (NAT5).

Ntugharị ngwa ngwa na NAT na Linux

Enweghị eserese nke ngwugwu kwa nkeji na nseta ihuenyo, mana na profaịlụ ibu nke sava ndị a, nkezi nha nha dị gburugburu 800 bytes, yabụ ụkpụrụ ahụ ruru 1.5Mpps. Dị ka ị na-ahụ, ihe nkesa nwere nftables nwere nnukwu ọrụ nchekwa. Ugbu a, ihe nkesa a na-arụ ọrụ ruo 30Gbit/s na 3Mpps ma nwee ike imezu oke netwọk anụ ahụ nke 40Gbps, ebe ọ nwere akụrụngwa CPU n'efu.

Enwere m olileanya na ihe a ga-aba uru nye ndị injinia netwọk na-agbalị imeziwanye arụmọrụ nke sava ha.

isi: www.habr.com

Tinye a comment