Fandrosoana haingana sy NAT amin'ny Linux

Rehefa lany ny adiresin'ny IPv4, maro ireo mpandraharahan'ny fifandraisandavitra no miatrika ny filana hanome ny mpanjifany fidirana amin'ny tambajotra amin'ny alàlan'ny fandikana adiresy. Amin'ity lahatsoratra ity dia holazaiko aminao ny fomba hahazoanao ny fahombiazan'ny Carrier Grade NAT amin'ny mpizara entana.

Tantaran'ny tantara

Tsy vaovao intsony ny lohahevitra momba ny faharerahan'ny habaka adiresy IPv4. Tamin'ny fotoana iray, nipoitra tao amin'ny RIPE ny lisitry ny fiandrasana, avy eo nipoitra ny fifanakalozam-bola izay nivarotana ny adiresin'ny adiresy ary nifarana ny fifanarahana hanofana azy ireo. Tsikelikely, nanomboka nanome tolotra fidirana amin'ny Internet amin'ny alàlan'ny fandikana adiresy sy seranan-tsambo ireo mpandraharahan'ny fifandraisandavitra. Ny sasany dia tsy nahavita nahazo adiresy ampy hanomezana adiresy "fotsy" ho an'ny mpanjifa tsirairay, ny hafa kosa nanomboka nanangom-bola tamin'ny fandavana ny hividy adiresy amin'ny tsena faharoa. Ny mpanamboatra fitaovana tambajotra dia nanohana io hevitra io, satria ity fampiasa ity matetika dia mitaky modules na fahazoan-dàlana fanampiny. Ohatra, ao amin'ny tsipika MX router an'i Juniper (afa-tsy ny MX104 sy MX204 farany), azonao atao ny manao NAPT amin'ny karatra serivisy MS-MIC mitokana, ny Cisco ASR1k dia mitaky fahazoan-dàlana CGN, Cisco ASR9k dia mitaky module A9K-ISM-100 misaraka. ary fahazoan-dàlana A9K-CGN -LIC ho azy. Amin'ny ankapobeny, mandany vola be ny fahafinaretana.

IPTables

Ny andraikitry ny NAT dia tsy mitaky loharanon-karena informatika manokana, azo vahana amin'ny processeurs an-tserasera, izay apetraka, ohatra, amin'ny router an-trano. Amin'ny halehiben'ny mpandraharahan'ny fifandraisan-davitra, ity olana ity dia azo vahana amin'ny alàlan'ny serivisy entana mandeha amin'ny FreeBSD (ipfw/pf) na GNU/Linux (iptables). Tsy handinika ny FreeBSD izahay, satria... Efa ela aho no nijanona tsy nampiasa ity OS ity, ka hifikitra amin'ny GNU/Linux izahay.

Tsy sarotra mihitsy ny mamela ny fandikana adiresy. Voalohany dia mila misoratra anarana fitsipika ao amin'ny iptables ao amin'ny latabatra nat ianao:

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

Ny rafitra miasa dia hampiditra ny môdely nf_conntrack, izay hanara-maso ny fifandraisana mavitrika rehetra ary hanao ny fiovam-po ilaina. Misy subtleties maromaro eto. Voalohany indrindra, satria miresaka momba ny NAT amin'ny haavon'ny mpandraharahan'ny fifandraisan-davitra isika, dia ilaina ny manitsy ny fe-potoana, satria miaraka amin'ny soatoavina default ny haben'ny latabatra fandikan-teny dia hitombo haingana amin'ny soatoavina mampidi-doza. Ity ambany ity ny ohatra iray amin'ny fanovana nampiasaiko tamin'ny mpizarako:

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

Ary faharoa, satria ny haben'ny latabatra fandikan-teny dia tsy natao hiasa ao anatin'ny fepetran'ny mpandraharahan'ny telecom, dia mila ampitomboina izany:

net.netfilter.nf_conntrack_max = 3145728

Ilaina ihany koa ny mampitombo ny isan'ny siny ho an'ny latabatra hash mitahiry ny fampielezam-peo rehetra (safidy ao amin'ny module nf_conntrack izany):

options nf_conntrack hashsize=1572864

Aorian'ireo fanodinkodinana tsotra ireo dia azo ny endrika miasa tanteraka izay afaka mandika adiresy mpanjifa marobe ho dobo ivelany. Na izany aza, ny fanatanterahana an'io vahaolana io dia mamela betsaka. Tamin'ny ezaka voalohany nataoko tamin'ny fampiasana GNU/Linux ho an'ny NAT (manodidina ny 2013), dia afaka nahazo fampisehoana manodidina ny 7Gbit/s aho tamin'ny 0.8Mpps isaky ny mpizara (Xeon E5-1650v2). Nanomboka tamin'izay fotoana izay, fanatsarana maro samihafa no natao tao amin'ny tamba-jotra kernel GNU/Linux, nitombo hatrany amin'ny 18-19 Gbit/s amin'ny 1.8-1.9 Mpps ny fahombiazan'ny mpizara iray amin'ny fitaovana mitovy. , saingy nitombo haingana kokoa ny fitakiana ny habetsahan'ny fifamoivoizana, nokarakarain'ny mpizara iray. Vokatr'izany dia novolavolaina ny tetika mba handanjalanjana ny enta-mavesatra amin'ny lohamilina samihafa, saingy izany rehetra izany dia nampitombo ny fahasarotan'ny fametrahana, fikojakojana ary fikojakojana ny kalitaon'ny serivisy omena.

NTFables

Amin'izao fotoana izao, fironana lamaody amin'ny rindrankajy "kitapo fifindran'ny" dia ny fampiasana DPDK sy XDP. Betsaka ny lahatsoratra nosoratana momba ity lohahevitra ity, kabary maro samihafa no natao, ary mipoitra ny vokatra ara-barotra (ohatra, SKAT avy amin'ny VasExperts). Saingy raha jerena ny loharanon-drafitra voafetra ho an'ny mpandraharaha amin'ny fifandraisan-davitra, dia tena sarotra ny mamorona "vokatra" mifototra amin'ireo rafitra ireo amin'ny tenanao manokana. Ho sarotra kokoa ny hampiasana vahaolana toy izany amin'ny ho avy, indrindra fa ny fitaovana fitiliana dia tsy maintsy amboarina. Ohatra, ny tcpdump mahazatra miaraka amin'ny DPDK dia tsy hiasa toy izany, ary tsy "hahita" fonosana alefa any amin'ny tariby mampiasa XDP. Tao anatin'ny resaka rehetra momba ny teknolojia vaovao amin'ny famoahana ny fandefasana entana amin'ny habaka mpampiasa, dia tsy voamarika izy ireo. tatitra и lahatsoratra Pablo Neira Ayuso, mpitahiry iptables, momba ny fampivoarana ny fivoahana mikoriana amin'ny nftables. Andeha hojerentsika amin'ny antsipiriany bebe kokoa ity mekanika ity.

Ny hevi-dehibe dia ny hoe raha nandalo fonosana avy amin'ny fivoriana iray ny router amin'ny lafiny roa amin'ny zotra (fivoriana TCP dia niditra tao amin'ny fanjakana ESTABLISHED), dia tsy ilaina ny mandefa ny fonosana manaraka amin'ity fivoriana ity amin'ny alàlan'ny fitsipika firewall rehetra, satria ireo fisavana rehetra ireo dia mbola hifarana amin'ny alàlan'ny fandefasana entana mankany amin'ny zotra. Ary tsy mila mifidy lalana izahay - efa fantatray ny interface tsara sy ny mpampiantrano tokony handefasana fonosana ao anatin'ity fivoriana ity. Ny hany sisa tavela dia ny fitehirizana ity fampahalalana ity sy ny fampiasana azy amin'ny fandehanana amin'ny dingana voalohan'ny fanodinana fonosana. Rehefa manao NAT dia ilaina ny mitahiry fampahalalana fanampiny momba ny fiovana amin'ny adiresy sy seranana nadikan'ny module nf_conntrack. Eny, mazava ho azy, amin'ity tranga ity dia tsy miasa intsony ny polisy isan-karazany sy ny fampahalalana hafa ary ny fitsipika momba ny statistika amin'ny iptables, fa ao anatin'ny sehatry ny asan'ny NAT misaraka na, ohatra, sisintany, dia tsy dia zava-dehibe loatra izany, satria ny serivisy dia zaraina amin'ny fitaovana.

fanahafana

Mba hampiasana ity asa ity dia mila:

  • Mampiasà kernel vaovao. Na dia eo aza ny zava-misy fa ny fiasa dia niseho tao amin'ny kernel 4.16, nandritra ny fotoana ela dia tena "manta" izany ary niteraka tahotra ny kernel. Nilamina ny zava-drehetra tamin'ny Desambra 2019, rehefa navoaka ny kernel LTS 4.19.90 sy 5.4.5.
  • Avereno soratana ny fitsipika iptables amin'ny endrika nftables amin'ny alàlan'ny dikan-teny nftables vao haingana. Miasa tsara amin'ny version 0.9.0

Raha mazava tsara ny zava-drehetra amin'ny foto-kevitra voalohany, ny zava-dehibe indrindra dia ny tsy hanadino ny hampiditra ny module ao amin'ny fanamafisana mandritra ny fivoriambe (CONFIG_NFT_FLOW_OFFLOAD=m), dia mila fanazavana ny teboka faharoa. Ny fitsipika nftables dia voafaritra amin'ny fomba hafa tanteraka noho ny ao amin'ny iptables. tahirin-kevitra manambara saika ny teboka rehetra, misy ihany koa ny manokana mpanova fitsipika avy amin'ny iptables mankany nftables. Noho izany, ohatra iray amin'ny fametrahana NAT sy ny fivoahana mikoriana ihany no homeko. Angano kely ohatra: , - ireo no fifandraisana amin'ny tambajotra izay mandalo ny fifamoivoizana, raha ny marina dia mety misy mihoatra ny roa amin'izy ireo. , - ny adiresy fanombohana sy fiafaran'ny isan'ny adiresy "fotsy".

Ny fanamafisana NAT dia tena tsotra:

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

Miaraka amin'ny fivoahana mikoriana dia sarotra kokoa, saingy azo takarina:

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

Izany, raha ny marina, dia ny setup manontolo. Amin'izao fotoana izao, ny fifamoivoizana TCP/UDP rehetra dia hianjera ao amin'ny latabatra fastnat ary hokarakaraina haingana kokoa.

vokatra

Mba hanazavana hoe "haingana kokoa" izany, dia hametaka pikantsarin'ny enta-mavesatra amin'ny mpizara roa tena izy aho, miaraka amin'ny fitaovana mitovy (Xeon E5-1650v2), namboarina mitovy, mampiasa kernel Linux mitovy, fa manao NAT amin'ny iptables. (NAT4) ary amin'ny nftables (NAT5).

Fandrosoana haingana sy NAT amin'ny Linux

Tsy misy sarin'ny fonosana isan-tsegondra ao amin'ny pikantsary, fa ao amin'ny mombamomba ny enta-mavesatr'ireo mpizara ireo dia manodidina ny 800 bytes ny haben'ny fonosana antonony, ka mahatratra 1.5Mpps ny sandany. Araka ny hitanao, ny mpizara miaraka amin'ny nftables dia manana tahiry fampisehoana lehibe. Amin'izao fotoana izao, ity mpizara ity dia miodina hatramin'ny 30Gbit/s amin'ny 3Mpps ary mazava ho azy fa afaka mahafeno ny fetran'ny tambajotra ara-batana amin'ny 40Gbps, nefa manana loharano CPU maimaim-poana.

Manantena aho fa ity fitaovana ity dia mahasoa ho an'ny injeniera amin'ny tambajotra miezaka manatsara ny fahombiazan'ny mpizara azy.

Source: www.habr.com

Add a comment