Auala vave ma le NAT i Linux

A'o fa'aumatia tuatusi IPv4, o lo'o feagai le tele o kamupani telefoni feavea'i ma le mana'oga e tu'uina atu ia latou tagata fa'atau feso'ota'iga e fa'aaoga ai le fa'aliliuga o tuatusi. I lenei tusiga o le a ou taʻuina atu ia te oe le auala e mafai ai ona e maua le faʻatinoga o le Carrier Grade NAT i luga o faʻatau oloa.

Se vaega o talafaasolopito

O le autu o le IPv4 tuatusi avanoa vaivai e le o toe fou. I se taimi, na faʻaalia ai lisi faʻatali i le RIPE, ona aliaʻe mai lea o fefaʻatauaiga lea na fefaʻatauaʻi ai poloka o tuatusi ma faʻaiʻu ai fefaʻatauaiga e lisi ai. Na faasolosolo malie, na amata ona tuʻuina atu e le aufaipisinisi fesoʻotaʻiga auaunaga faʻaoga Initaneti e faʻaaoga ai le tuatusi ma le faʻaliliuga o le taulaga. O nisi e leʻi mafai ona maua ni tuatusi e tuʻuina atu ai se tuatusi "paʻepaʻe" i tagata fai saofaga taʻitasi, ae o isi na amata faʻasaoina tupe e ala i le mumusu e faʻatau tuatusi i luga o le maketi lona lua. Na lagolagoina e le au gaosiga o masini fesoʻotaʻiga lenei manatu, aua o lenei galuega e masani ona manaʻomia faʻaopoopoga modules poʻo laisene. Mo se faʻataʻitaʻiga, i le laina a Juniper o MX routers (sei vagana ai le MX104 ma le MX204 sili ona lata mai), e mafai ona faia le NAPT i luga o se isi kata tautua MS-MIC, Cisco ASR1k e manaʻomia se laisene CGN, Cisco ASR9k e manaʻomia se isi A9K-ISM-100 module. ma se laisene A9K-CGN -LIC ia te ia. I se tulaga lautele, o le fiafiaga e alu ai le tele o tupe.

IPTables

O le galuega o le faʻatinoina o le NAT e le manaʻomia ni faʻamatalaga faʻapitoa faʻapitoa; e mafai ona foia e ala i le faʻaogaina lautele, faʻapipiʻiina, mo se faʻataʻitaʻiga, i soʻo se alalaupapa fale. I luga o le fua o le telefoni feaveaʻi, e mafai ona foia lenei faʻafitauli i le faʻaaogaina o sapalai oloa o loʻo faʻaogaina FreeBSD (ipfw/pf) poʻo GNU/Linux (iptables). Matou te le mafaufau i le FreeBSD, aua ... Na ou taofi le faʻaaogaina o lenei OS i se taimi ua leva, o lea o le a matou pipii i le GNU/Linux.

O le fa'aagaoioia o le fa'aliliuga o tuatusi e le'o faigata lava. Muamua e te manaʻomia le resitalaina o se tulafono i iptables i le laulau nat:

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

O le faiga faʻaogaina o le a faʻapipiʻiina le module nf_conntrack, lea o le a mataʻituina uma fesoʻotaʻiga malosi ma faʻatino suiga talafeagai. O lo'o i ai le tele o mea fa'apitoa iinei. Muamua, talu ai o loʻo matou talanoa e uiga i le NAT i luga o le fua o le telefoni feaveaʻi, e tatau ona fetuʻunaʻi taimi faʻagata, aua o le faʻaogaina o tau o le tele o le laulau faʻaliliuga o le a vave ona tupu i faʻalavelave faʻalavelave. Lalo o se faʻataʻitaʻiga o tulaga na ou faʻaogaina i luga o laʻu 'auʻaunaga:

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 lona lua, talu ai e le o fuafuaina le lapopoa o le laulau faaliliu e galue i lalo o tuutuuga o le telefoni feaveaʻi, e manaʻomia le faʻateleina:

net.netfilter.nf_conntrack_max = 3145728

E manaʻomia foʻi le faʻaopoopoina o le aofaʻi o pakete mo le laulau hash e teu ai faʻasalalauga uma (o se filifiliga lea i le module nf_conntrack):

options nf_conntrack hashsize=1572864

A maeʻa nei togafiti faigofie, e maua ai se mamanu galue atoatoa e mafai ona faʻaliliuina le tele o tuatusi o tagata o tausia i totonu o se vaitaele o fafo. Ae ui i lea, o le faʻatinoga o lenei fofo e tele mea e manaʻomia. I aʻu taumafaiga muamua i le faʻaaogaina o le GNU / Linux mo NAT (circa 2013), na mafai ona ou maua le faʻatinoga o le 7Gbit / s i le 0.8Mpps i le server (Xeon E5-1650v2). Talu mai lena taimi, e tele suʻesuʻega eseese na faia i le GNU / Linux kernel network stack, o le faʻatinoga o le tasi server i luga o meafaigaluega tutusa ua faʻateleina i le toetoe lava 18-19 Gbit / s i le 1.8-1.9 Mpps (o le maualuga o tau) , ae o le manaʻoga mo le tele o feoaiga, faʻatautaia e le tasi server na faʻatupulaia vave. O le iʻuga, na faʻatupuina fuafuaga e faapaleni ai le uta i luga o 'auʻaunaga eseese, ae o nei mea uma na faʻateleina ai le lavelave o le faʻatulagaina, tausia ma le tausia o le lelei o auaunaga na tuʻuina atu.

NTFables

I aso nei, o se faiga masani i polokalama "fesoʻotaʻiga ato" o le faʻaaogaina lea o le DPDK ma le XDP. E tele tala na tusia i lenei autu, tele lauga eseese na faia, ma o loʻo faʻaalia oloa faʻapisinisi (mo se faʻataʻitaʻiga, SKAT mai VasExperts). Ae ona o le utiuti o punaoa faʻapolokalame a le telefoni feaveaʻi, e fai lava si faʻafitauli le fatuina o soʻo se "oloa" e faʻavae i luga o nei faʻavae na o oe. O le a sili atu ona faigata le faʻaogaina o sea fofo i le lumanaʻi; aemaise lava, o meafaigaluega faʻapitoa e tatau ona atiaʻe. Mo se faʻataʻitaʻiga, o le tcpdump masani ma le DPDK o le a le galue pei o lena, ma o le a le "vaai" paʻu e toe faʻafoʻi atu i uaea e faʻaaoga ai le XDP. I le lotolotoi o tala uma e uiga i tekinolosi fou mo le faʻauluina o pepa e lafo atu i le avanoa faʻaoga, na latou le iloa. lipoti и tusiga Pablo Neira Ayuso, iptables maintainer, e uiga i le atinaʻeina o le tafe mai fafo i nftables. Se'i o tatou va'ava'ai toto'a i lenei masini.

O le manatu autu e faapea afai na pasia e le alalaupapa afifi mai le tasi vasega i itu uma e lua o le tafe (TCP session na alu i le ESTABLISHED state), ona leai lea o se mea e manaʻomia e pasi atu ai pepa mulimuli o lenei vasega i tulafono uma o le firewall, aua o nei siaki uma o le a fa'ai'u pea i le fa'aliliuina atu o le afifi i le auala. Ma e matou te le manaʻomia moni lava ona filifili se auala - ua uma ona matou iloa poʻo fea faʻaoga ma poʻo ai le talimalo e manaʻomia ona matou lafo atu i totonu o lenei vasega. Pau lava le mea o loʻo totoe o le teuina lea o faʻamatalaga ma faʻaaogaina mo le faʻaogaina i le amataga o le faʻaogaina o pusa. A fa'atino le NAT, e mana'omia le fa'aopoopoina o fa'amatalaga e uiga i suiga i tuatusi ma ports ua fa'aliliuina e le module nf_conntrack. Ioe, ioe, i lenei tulaga leoleo eseese ma isi faʻamatalaga ma tulafono faʻafuainumera i iptables taofi le galue, ae i totonu o le faʻavae o le galuega a se NAT tu ese poʻo, mo se faʻataʻitaʻiga, o se tuaoi, e le taua tele, aua o auaunaga. e tufatufa atu i masini.

Fetuunaiga

Mo le faʻaaogaina o lenei galuega matou te manaʻomia:

  • Fa'aaoga se fatu fou. E ui lava i le mea moni o le gaioiga lava ia na faʻaalia i le kernel 4.16, mo se taimi umi na matua "mata" ma masani ona mafua ai le popole o le fatu. Na faʻamautu mea uma ia Tesema 2019, ina ua faʻasaʻolotoina LTS kernels 4.19.90 ma le 5.4.5.
  • Toe tusi tulafono iptables i le faatulagaga nftables e faʻaaoga ai se faʻamatalaga lata mai o nftables. E galue tonu ile version 0.9.0

Afai o mea uma i le mataupu faavae e manino ma le manatu muamua, o le mea autu e le faʻagaloina e aofia ai le module i le faʻatulagaga i le taimi o le faʻapotopotoga (CONFIG_NFT_FLOW_OFFLOAD = m), ona manaʻomia lea o le faʻamatalaga lona lua. Nftables tulafono o loʻo faʻamatalaina e matua ese lava nai lo iptables. Tusi fa'aalia toetoe lava o itu uma, e iai fo'i mea fa'apitoa tagata liliu mai tulafono mai iptables i nftables. O le mea lea, o le a ou tuʻuina atu naʻo se faʻataʻitaʻiga o le faʻatulagaina o le NAT ma tafe le uta. O se tama'i talatu'u mo se fa'ata'ita'iga: , - o fesoʻotaʻiga fesoʻotaʻiga ia e ui atu ai feoaiga; o le mea moni e mafai ona sili atu ma le lua. , - o le tuatusi amata ma le fa'ai'uga o le tele o tuatusi "pa'epa'e".

Ole faʻatulagaina ole NAT e matua faigofie lava:

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

Faatasi ai ma le tafe mai le uta e fai si lavelave, ae e malamalama lelei lava:

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

O le mea moni, o le seti atoa lena. Ole taimi nei ole TCP/UDP fefa'ataua'iga ole a pa'u ile laulau fa'atosina ma fa'agasolo vave.

Iʻuga

Ina ia faʻamalamalama manino le "tele vave" o lenei, o le a ou faʻapipiʻiina se faʻamalama o le uta i luga o ni 'auʻaunaga moni se lua, faʻatasi ai ma meafaigaluega tutusa (Xeon E5-1650v2), faʻapipiʻi tutusa, faʻaaoga le fatu Linux tutusa, ae faʻatino NAT i iptables (NAT4) ma i nftables (NAT5).

Auala vave ma le NAT i Linux

E leai se kalafi o pepa i le sekone i le faʻamalama, ae i le faʻamatalaga o uta o nei sapalai o le averesi o le paʻu e tusa ma le 800 bytes, o lea e oʻo atu ai le tau i le 1.5Mpps. E pei ona e vaʻaia, o le 'auʻaunaga ma nftables o loʻo i ai se faʻaagaaga tele. I le taimi nei, o lenei 'auʻaunaga e faʻagasolo atu i le 30Gbit / s i le 3Mpps ma e manino lava le mafai ona faʻafeiloaʻi le faʻatapulaʻaina o fesoʻotaʻiga faaletino o le 40Gbps, aʻo maua fua punaoa CPU.

Ou te faʻamoemoe o le a aoga lenei mea i inisinia fesoʻotaʻiga o loʻo taumafai e faʻaleleia le faʻatinoga o latou 'auʻaunaga.

puna: www.habr.com

Faaopoopo i ai se faamatalaga