Slighe luath agus NAT ann an Linux

Mar a bhios seòlaidhean IPv4 a’ fàs nas lugha, tha feum aig mòran de ghnìomhaichean cian-chonaltraidh air ruigsinneachd lìonra a thoirt don luchd-dèiligidh aca a’ cleachdadh eadar-theangachadh seòladh. San artaigil seo innsidh mi dhut mar a gheibh thu coileanadh Carrier Grade NAT air frithealaichean bathar.

Pàirt de dh'eachdraidh

Chan eil an cuspair mu shàrachadh fànais seòladh IPv4 ùr tuilleadh. Aig àm air choreigin, nochd liostaichean feitheimh ann an RIPE, an uairsin nochd iomlaidean air an deach blocaichean seòlaidhean a mhalairt agus chaidh cùmhnantan a cho-dhùnadh airson an toirt air màl. Mean air mhean, thòisich luchd-obrachaidh telecom air seirbheisean ruigsinneachd eadar-lìn a thoirt seachad a’ cleachdadh seòladh agus eadar-theangachadh puirt. Cha deach aig cuid air seòlaidhean gu leòr fhaighinn airson seòladh “geal” a chuir gu gach neach-aontachaidh, agus thòisich cuid eile air airgead a shàbhaladh le bhith a’ diùltadh seòlaidhean a cheannach air margaidh na h-àrd-sgoile. Thug luchd-dèanamh uidheamachd lìonra taic don bheachd seo, oir mar as trice feumaidh an gnìomh seo modalan leudachaidh no ceadan a bharrachd. Mar eisimpleir, ann an loidhne Juniper de routers MX (ach a-mhàin an MX104 agus MX204 as ùire), faodaidh tu NAPT a dhèanamh air cairt seirbheis MS-MIC air leth, feumaidh Cisco ASR1k cead CGN, feumaidh Cisco ASR9k modal A9K-ISM-100 air leth agus cead A9K-CGN -LIC dha. San fharsaingeachd, tha an tlachd a 'cosg tòrr airgid.

IPTables

Chan fheum an obair NAT goireasan coimpiutaireachd sònraichte; faodar a rèiteachadh le pròiseasairean adhbhar coitcheann, a tha air an stàladh, mar eisimpleir, ann an router dachaigh sam bith. Air sgèile gnìomhaiche cian-chonaltraidh, faodar an duilgheadas seo fhuasgladh le bhith a’ cleachdadh frithealaichean bathar a tha a’ ruith FreeBSD (ipfw/pf) no GNU/Linux (iptables). Cha bheachdaich sinn air FreeBSD, oir... Sguir mi a’ cleachdadh an OS seo o chionn fhada, agus mar sin cumaidh sinn ri GNU/Linux.

Chan eil e idir doirbh eadar-theangachadh sheòlaidhean a chomasachadh. An toiseach feumaidh tu riaghailt a chlàradh ann an iptables anns a 'chlàr nat:

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

Luchdaichidh an siostam obrachaidh am modal nf_conntrack, a chumas sùil air a h-uile ceangal gnìomhach agus a nì na h-atharrachaidhean riatanach. Tha grunn subtleties an seo. An toiseach, leis gu bheil sinn a’ bruidhinn air NAT air sgèile gnìomhaiche cian-chonaltraidh, feumar na h-amannan-ama atharrachadh, oir le luachan bunaiteach bidh meud a’ chlàr eadar-theangachaidh a’ fàs gu luath gu luachan tubaisteach. Gu h-ìosal tha eisimpleir de na roghainnean a chleachd mi air na frithealaichean agam:

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

Agus san dàrna h-àite, leis nach eil meud bunaiteach a’ chlàr eadar-theangachaidh air a dhealbhadh gus obrachadh fo chumhachan gnìomhaiche cian-chonaltraidh, feumar a mheudachadh:

net.netfilter.nf_conntrack_max = 3145728

Feumar cuideachd an àireamh de bhucaid airson a ’bhòrd hash a stòradh a’ stòradh a h-uile craoladh (tha seo na roghainn anns a ’mhodal nf_conntrack):

options nf_conntrack hashsize=1572864

Às deidh na h-atharrachaidhean sìmplidh sin, gheibhear dealbhadh làn-obrach a dh’ fhaodas àireamh mhòr de sheòlaidhean teachdaiche a thionndadh gu cruinneachadh de sheòlaidhean taobh a-muigh. Ach, tha coileanadh an fhuasglaidh seo a 'fàgail mòran ri bhith air a mhiannachadh. Anns na ciad oidhirpean agam air GNU / Linux a chleachdadh airson NAT (circa 2013), bha e comasach dhomh coileanadh timcheall air 7Gbit / s fhaighinn aig 0.8Mpps gach frithealaiche (Xeon E5-1650v2). Bhon àm sin, chaidh mòran optimizations eadar-dhealaichte a dhèanamh ann an stac lìonra kernel GNU/Linux, tha coileanadh aon fhrithealaiche air an aon bhathar-cruaidh air a dhol suas gu faisg air 18-19 Gbit / s aig 1.8-1.9 Mpps (b’ iad sin na luachan as àirde) , ach dh'fhàs an t-iarrtas airson meud trafaig, air a phròiseasadh le aon fhrithealaiche, mòran nas luaithe. Mar thoradh air an sin, chaidh sgeamaichean a leasachadh gus an luchd air diofar luchd-frithealaidh a chothromachadh, ach mheudaich seo uile iom-fhillteachd stèidheachadh, cumail suas agus cumail suas càileachd nan seirbheisean a chaidh a thoirt seachad.

NTFables

An-diugh, is e gluasad fasanta ann am “bagaichean gluasad” bathar-bog cleachdadh DPDK agus XDP. Chaidh tòrr artaigilean a sgrìobhadh air a 'chuspair seo, chaidh mòran òraidean eadar-dhealaichte a dhèanamh, agus tha stuthan malairteach a' nochdadh (mar eisimpleir, SKAT bho VasExperts). Ach leis cho beag de ghoireasan prògramaidh a tha aig luchd-obrachaidh cian-chonaltraidh, tha e gu math duilich “toradh” sam bith a chruthachadh stèidhichte air na frèaman sin leat fhèin. Bidh e tòrr nas duilghe a leithid de fhuasgladh obrachadh san àm ri teachd; gu sònraichte, feumar innealan sgrùdaidh a leasachadh. Mar eisimpleir, chan obraich tcpdump àbhaisteach le DPDK dìreach mar sin, agus chan fhaic e pacaidean “air an cur air ais gu na uèirichean a’ cleachdadh XDP. Am measg a h-uile còmhradh mu theicneòlasan ùra airson a bhith a’ cur a-mach pacaid a chuir air adhart gu àite luchd-cleachdaidh, cha deach iad gun mhothachadh aithisgean и artaigilean Pablo Neira Ayuso, neach-gleidhidh iptables, mu leasachadh sruthadh sruthadh ann an nftables. Bheir sinn sùil nas mionaidiche air an uidheamachd seo.

Is e am prìomh bheachd ma chaidh an router seachad air pacaidean bho aon seisean air gach taobh den t-sruth (thàinig seisean TCP a-steach don stàit STABLISHED), cha leig thu leas pacaidean an t-seisein seo a thoirt seachad tro na riaghailtean balla-teine ​​​​gu lèir, oir thig na sgrùdaidhean sin uile gu crìch fhathast leis a’ phacaid ga ghluasad nas fhaide chun t-slighe. Agus chan fheum sinn slighe a thaghadh - tha fios againn mu thràth dè an eadar-aghaidh agus dè an aoigh a dh'fheumas sinn pacaidean a chuir taobh a-staigh an t-seisein seo. Chan eil air fhàgail ach am fiosrachadh seo a stòradh agus a chleachdadh airson slighe aig ìre thràth de ghiollachd pacaidean. Nuair a bhios tu a’ coileanadh NAT, feumar cuideachd fiosrachadh a stòradh mu atharrachaidhean ann an seòlaidhean agus puirt air an eadar-theangachadh leis a’ mhodal nf_conntrack. Tha, gu dearbh, anns a 'chùis seo bidh diofar phoileasairean agus fiosrachadh eile agus riaghailtean staitistigeil ann an iptables a' stad a bhith ag obair, ach taobh a-staigh frèam obair NAT seasamh air leth no, mar eisimpleir, crìoch, chan eil seo cho cudromach, oir tha na seirbheisean air an sgaoileadh thairis air innealan.

Rèiteachadh

Gus an gnìomh seo a chleachdadh feumaidh sinn:

  • Cleachd kernel ùr. A dh 'aindeoin gun do nochd an comas-gnìomh fhèin ann an kernel 4.16, airson ùine mhòr bha e gu math "amh" agus gu cunbhalach ag adhbhrachadh clisgeadh kernel. Shocraich a h-uile càil timcheall air an Dùbhlachd 2019, nuair a chaidh kernels LTS 4.19.90 agus 5.4.5 a leigeil ma sgaoil.
  • Ath-sgrìobh riaghailtean iptables ann an cruth nftables a’ cleachdadh dreach gu math o chionn ghoirid de nftables. Ag obair gu dìreach ann an dreach 0.9.0

Ma tha a h-uile dad ann am prionnsapal soilleir leis a’ chiad phuing, is e am prìomh rud gun a bhith a’ dìochuimhneachadh am modal a thoirt a-steach don rèiteachadh aig àm co-chruinneachadh (CONFIG_NFT_FLOW_OFFLOAD = m), feumaidh an dàrna puing mìneachadh. Tha riaghailtean nftables air am mìneachadh gu tur eadar-dhealaichte seach ann an iptables. Sgrìobhainnean a’ nochdadh cha mhòr a h-uile puing, tha sònraichte ann cuideachd luchd-tionndaidh riaghailtean bho iptables gu nftables. Mar sin, cha toir mi ach eisimpleir de bhith a’ stèidheachadh NAT agus a’ sruthadh dheth. Uirsgeul beag mar eisimpleir: , - is iad sin na h-eadar-aghaidh lìonra tro bheil trafaic a’ dol seachad; ann an da-rìribh faodaidh barrachd air dhà dhiubh a bhith ann. , - seòladh tòiseachaidh is crìochnachaidh an raon de sheòlaidhean “geal”.

Tha rèiteachadh NAT gu math sìmplidh:

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

Le sruthadh sruthadh tha e beagan nas iom-fhillte, ach gu math so-thuigsinn:

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

Is e sin, gu dearbh, an rèiteachadh gu lèir. A-nis tuitidh a h-uile trafaic TCP / UDP a-steach don chlàr fastnat agus thèid a phròiseasadh fada nas luaithe.

Toraidhean

Gus a dhèanamh soilleir dè cho “fada nas luaithe” a tha seo, ceangailidh mi dealbh-sgrìn den luchd air dà fhìor fhrithealaiche, leis an aon bhathar-cruaidh (Xeon E5-1650v2), air a rèiteachadh san aon dòigh, a’ cleachdadh an aon kernel Linux, ach a’ coileanadh NAT ann an iptables (NAT4) agus ann an nftables (NAT5).

Slighe luath agus NAT ann an Linux

Chan eil graf de phacaid gach diog san ath-sgrìn, ach ann am pròifil luchd nan frithealaichean sin tha meud pacaid cuibheasach timcheall air 800 bytes, agus mar sin ruigidh na luachan suas ri 1.5Mpps. Mar a chì thu, tha tèarmann coileanaidh mòr aig an fhrithealaiche le nftables. An-dràsta, bidh an frithealaiche seo a’ pròiseasadh suas ri 30Gbit / s aig 3Mpps agus tha e soilleir gu bheil e comasach dha coinneachadh ri cuingealachadh lìonra corporra 40Gbps, fhad ‘s a tha goireasan CPU an-asgaidh aige.

Tha mi an dòchas gum bi an stuth seo feumail do innleadairean lìonraidh a tha a’ feuchainn ri coileanadh an luchd-frithealaidh a leasachadh.

Source: www.habr.com

Cuir beachd ann