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 и 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. aâ nochdadh cha mhòr a h-uile puing, tha sònraichte ann cuideachd 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).

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
