Ródú tapa agus NAT i Linux

De réir mar a laghdaítear seoltaí IPv4, tá go leor oibreoirí teileachumarsáide ag tabhairt aghaidhe ar an ngá rochtain líonra a sholáthar dá gcliaint ag baint úsáide as aistriú seoltaí. San Airteagal seo inseoidh mé duit conas is féidir leat feidhmíocht Iompróra Grád NAT a fháil ar fhreastalaithe tráchtearraí.

A Stair beag

Níl ábhar nua ídithe spáis seoltaí IPv4 a thuilleadh. Ag pointe éigin, bhí liostaí feithimh le feiceáil in RIPE, ansin tháinig malartuithe chun cinn ar a ndearnadh trádáil ar bhlocanna seoltaí agus tugadh margaí chun críche chun iad a léasú. De réir a chéile, thosaigh oibreoirí teileachumarsáide ag soláthar seirbhísí rochtana Idirlín ag baint úsáide as aistriú seoltaí agus poirt. Níor éirigh le roinnt acu go leor seoltaí a fháil chun seoladh “bán” a eisiúint do gach síntiúsóir, agus thosaigh daoine eile ag coigilt airgid trí dhiúltú seoltaí a cheannach ar an margadh tánaisteach. Thacaigh monaróirí trealaimh líonra leis an smaoineamh seo, mar gheall ar Éilíonn an fheidhmiúlacht seo modúil bhreise nó ceadúnais bhreise de ghnáth. Mar shampla, i líne Juniper de ródairí MX (seachas an MX104 agus MX204 is déanaí), is féidir leat NAPT a dhéanamh ar chárta seirbhíse MS-MIC ar leith, éilíonn Cisco ASR1k ceadúnas CGN, tá modúl A9K-ISM-9 ar leith ag teastáil ó Cisco ASR100k. agus ceadúnas A9K-CGN -LIC dó. Go ginearálta, cosnaíonn an pléisiúr go leor airgid.

IPTables

Ní bhíonn acmhainní speisialaithe ríomhaireachta ag teastáil chun NAT a fheidhmiú; is féidir le próiseálaithe ilfheidhmeacha é a réiteach, atá suiteáilte, mar shampla, in aon ródaire baile. Ar scála oibreora teileachumarsáide, is féidir an fhadhb seo a réiteach trí úsáid a bhaint as freastalaithe tráchtearraí a ritheann FreeBSD (ipfw/pf) nó GNU/Linux (iptables). Ní mheasfaimid FreeBSD, mar... Stop mé ag baint úsáide as an OS seo i bhfad ó shin, mar sin beidh muid ag cloí le GNU/Linux.

Níl sé deacair ar chor ar bith aistriú seoltaí a chumasú. Ar dtús is gá duit riail a chlárú in iptables sa tábla nat:

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

Luchtóidh an córas oibriúcháin an modúl nf_conntrack, a dhéanfaidh monatóireacht ar gach nasc gníomhach agus a dhéanfaidh na tiontuithe riachtanacha. Tá roinnt subtleties anseo. Ar an gcéad dul síos, ós rud é go bhfuilimid ag caint faoi NAT ar scála oibreora teileachumarsáide, is gá na hamanna ama a choigeartú, mar le luachanna réamhshocraithe méadóidh méid an tábla aistriúcháin go tapa go luachanna tubaisteacha. Seo thíos sampla de na socruithe a d’úsáid mé ar mo fhreastalaithe:

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 ar an dara dul síos, ós rud é nach bhfuil méid réamhshocraithe an tábla aistriúcháin deartha chun oibriú faoi choinníollacha oibreora teileachumarsáide, ní mór é a mhéadú:

net.netfilter.nf_conntrack_max = 3145728

Is gá freisin líon na buicéid a mhéadú don tábla hash chun gach craoltaí a stóráil (is rogha é seo sa mhodúl nf_conntrack):

options nf_conntrack hashsize=1572864

Tar éis na n-ionramhálacha simplí seo, faightear dearadh oibre iomlán a fhéadfaidh líon mór seoltaí cliant a aistriú isteach i linn seoltaí seachtracha. Mar sin féin, fágann feidhmíocht an réitigh seo go leor le bheith inmhianaithe. I mo chéad iarrachtaí ar GNU/Linux a úsáid le haghaidh NAT (circa 2013), bhí mé in ann feidhmíocht de thart ar 7Gbit/s a fháil ag 0.8Mpps in aghaidh an fhreastalaí (Xeon E5-1650v2). Ón am sin, rinneadh go leor optamaithe éagsúla i gcruach líonra eithne GNU/Linux, tá feidhmíocht freastalaí amháin ar na crua-earraí céanna méadaithe go dtí beagnach 18-19 Gbit/s ag 1.8-1.9 Mpps (b’iad seo na huasluachanna) , ach d'fhás an t-éileamh ar mhéid tráchta, arna phróiseáil ag freastalaí amháin i bhfad níos tapúla. Mar thoradh air sin, forbraíodh scéimeanna chun an t-ualach ar fhreastalaithe éagsúla a chothromú, ach chuir sé seo go léir le castacht na seirbhísí a cuireadh ar fáil a bhunú, a chothabháil agus a chothabháil.

NTFables

Sa lá atá inniu ann, treocht faiseanta i “málaí aistrithe” bogearraí is ea úsáid DPDK agus XDP. Scríobhadh go leor alt ar an ábhar seo, rinneadh go leor óráidí éagsúla, agus tá táirgí tráchtála le feiceáil (mar shampla, SKAT ó VasExperts). Ach mar gheall ar acmhainní teoranta ríomhchláraithe na n-oibreoirí teileachumarsáide, is fadhb an-mhór é aon “táirge” a chruthú bunaithe ar na creataí sin leat féin. Beidh sé i bhfad níos deacra a leithéid de réiteach a oibriú amach anseo; go háirithe, beidh gá le huirlisí diagnóiseacha a fhorbairt. Mar shampla, ní oibreoidh tcpdump caighdeánach le DPDK díreach mar sin, agus ní “fheicfear” paicéid a sheoltar ar ais chuig na sreanga ag baint úsáide as XDP. I measc na cainte ar fad faoi theicneolaíochtaí nua chun seoladh paicéad a chur ar aghaidh chuig spás úsáideora, níor tugadh faoi deara iad tuarascálacha и Airteagal Pablo Neira Ayuso, cothaitheoir iptables, faoi fhorbairt díluchtaithe sreafa i nftables. Breathnaímis ar an meicníocht seo.

Is é an príomh-smaoineamh má rith an ródaire paicéid ó seisiún amháin sa dá threo an tsreafa (seisiún TCP chuaigh isteach sa stát BUNAITHE), ansin níl aon ghá chun pas a fháil paicéid ina dhiaidh sin den seisiún seo trí na rialacha balla dóiteáin, mar gheall ar críochnóidh na seiceálacha seo go léir agus an paicéad á aistriú níos faide chuig an ródú. Agus ní gá dúinn bealach a roghnú i ndáiríre - tá a fhios againn cheana féin cén comhéadan agus cén óstach a gcaithfimid paicéid a sheoladh laistigh den seisiún seo. Níl fágtha ach an fhaisnéis seo a stóráil agus í a úsáid le haghaidh ródú ag céim luath de phróiseáil na bpaicéad. Agus NAT á dhéanamh, is gá freisin faisnéis a stóráil faoi athruithe ar sheoltaí agus ar phoirt aistrithe ag an modúl nf_conntrack. Sea, ar ndóigh, sa chás seo stopann póilíní éagsúla agus rialacha faisnéise agus staidrimh eile in iptables ag obair, ach faoi chuimsiú an chúraim maidir le NAT a sheasann ar leithligh nó, mar shampla, teorainn, níl sé seo chomh tábhachtach, mar gheall ar na seirbhísí. a dháileadh ar na feistí.

Cumraíocht

Chun an fheidhm seo a úsáid ní mór dúinn:

  • Bain úsáid as eithne úr. In ainneoin go raibh an fheidhmiúlacht féin le feiceáil in eithne 4.16, ar feadh i bhfad bhí sé an-"amh" agus ba chúis le scaoll eithne go rialta. Chobhsaigh gach rud thart ar mhí na Nollag 2019, nuair a scaoileadh kernels LTS 4.19.90 agus 5.4.5.
  • Athscríobh rialacha iptables i bhformáid nftables ag baint úsáide as leagan cothrom le déanaí de nftables. Oibríonn sé go díreach i leagan 0.9.0

Má tá gach rud i bprionsabal soiléir leis an gcéad phointe, is é an rud is mó ná dearmad a dhéanamh ar an modúl a chur san áireamh sa chumraíocht le linn an tionóil (CONFIG_NFT_FLOW_OFFLOAD=m), ansin is gá míniú a thabhairt ar an dara pointe. Déantar cur síos go hiomlán difriúil ar rialacha nftables ná mar a dhéantar in iptables. Doiciméadú nochtann beagnach gach pointe, tá speisialta freisin tiontairí rialacha ó iptables go nftables. Mar sin, ní thabharfaidh mé ach sampla de bhunú NAT agus díluchtú sreabhadh. Finscéal beag mar shampla: , - is iad seo na comhéadain líonra trína dtéann an trácht; i ndáiríre is féidir níos mó ná dhá cheann acu a bheith ann. , — seoladh tosaigh agus seoladh deiridh raon na seoltaí “bána”.

Tá cumraíocht NAT an-simplí:

#! /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 díluchtú sreafa tá sé beagán níos casta, ach intuigthe go leor:

#! /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 é sin, i ndáiríre, an socrú iomlán. Anois tiocfaidh an trácht TCP/UDP ar fad isteach sa tábla mearbhia agus déanfar é a phróiseáil i bhfad níos tapúla.

Torthaí

Chun é a dhéanamh soiléir cé chomh “i bhfad níos tapúla” atá sé seo, cuirfidh mé gabháil scáileáin den ualach ar dhá fhreastalaí fíor, leis na crua-earraí céanna (Xeon E5-1650v2), cumraithe go comhionann, ag baint úsáide as an eithne Linux céanna, ach ag feidhmiú NAT in iptables (NAT4) agus i nftables (NAT5).

Ródú tapa agus NAT i Linux

Níl aon ghraf paicéid in aghaidh an tsoicind sa scáileán, ach i bpróifíl ualaigh na bhfreastalaithe seo tá meánmhéid na bpaicéad timpeall 800 beart, mar sin sroicheann na luachanna suas le 1.5Mpps. Mar a fheiceann tú, tá cúlchiste feidhmíochta ollmhór ag an bhfreastalaí le nftables. Faoi láthair, próiseálann an freastalaí seo suas le 30Gbit/s ag 3Mpps agus is léir go bhfuil sé in ann an teorainn líonra fisiciúil de 40Gbps a chomhlíonadh, agus acmhainní LAP saor in aisce aige.

Tá súil agam go mbeidh an t-ábhar seo úsáideach d'innealtóirí líonra atá ag iarraidh feabhas a chur ar fheidhmíocht a gcuid freastalaithe.

Foinse: will.com

Add a comment