Kev nrawm nrawm thiab NAT hauv Linux

Raws li IPv4 chaw nyob dhau los lawm, ntau tus neeg siv xov tooj tau ntsib nrog qhov xav tau los muab lawv cov neeg siv khoom siv network siv qhov chaw nyob txhais lus. Hauv tsab xov xwm no kuv yuav qhia koj li cas koj tuaj yeem tau txais Carrier Qib NAT kev ua tau zoo ntawm cov khoom lag luam.

Ib me ntsis keeb kwm

Lub ntsiab lus ntawm IPv4 chaw nyob qhov chaw qaug zog tsis yog tshiab lawm. Qee lub sij hawm, cov npe tos tau tshwm sim hauv RIPE, tom qab ntawd kev sib pauv tau tshwm sim ntawm qhov chaw nyob qhov twg tau pauv thiab cov kev sib cog lus tau xaus rau kev xauj lawv. Maj mam, cov tswv lag luam hauv xov tooj tau pib muab cov kev pab cuam nkag hauv Is Taws Nem siv qhov chaw nyob thiab chaw nres nkoj txhais lus. Qee tus tsis tau tswj kom tau txais chaw nyob txaus los muab qhov chaw nyob "dawb" rau txhua tus neeg siv khoom, thaum lwm tus pib txuag nyiaj los ntawm kev tsis kam yuav qhov chaw nyob ntawm lub khw thib ob. Cov neeg tsim khoom ntawm cov khoom siv network txhawb lub tswv yim no, vim tias qhov no functionality feem ntau yuav tsum tau ntxiv extension modules los yog daim ntawv tso cai. Piv txwv li, hauv Juniper's kab ntawm MX routers (tshwj tsis yog qhov tseeb MX104 thiab MX204), koj tuaj yeem ua NAPT ntawm ib daim npav tshwj xeeb MS-MIC, Cisco ASR1k xav tau daim ntawv tso cai CGN, Cisco ASR9k yuav tsum muaj cais A9K-ISM-100 module. thiab daim ntawv tso cai A9K-CGN -LIC rau nws. Feem ntau, kev txaus siab raug nqi ntau heev.

IPTables

Lub luag haujlwm ntawm kev ua haujlwm NAT tsis tas yuav tsum muaj kev pabcuam tshwjxeeb; nws tuaj yeem daws tau los ntawm cov txheej txheem dav dav, uas tau teeb tsa, piv txwv li, hauv ib lub router hauv tsev. Ntawm qhov ntsuas ntawm tus neeg teb xov tooj, qhov teeb meem no tuaj yeem daws tau siv cov khoom lag luam uas khiav FreeBSD (ipfw / pf) lossis GNU / Linux (iptables). Peb yuav tsis xav txog FreeBSD, vim tias ... Kuv tsis siv qhov OS no ntev dhau los, yog li peb yuav lo rau GNU / Linux.

Enabling chaw nyob txhais tsis yog qhov nyuaj. Ua ntej koj yuav tsum sau npe rau txoj cai hauv iptables hauv lub rooj nat:

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

Lub operating system yuav thauj cov nf_conntrack module, uas yuav saib xyuas tag nrho cov kev sib txuas nquag thiab ua qhov tsim nyog hloov pauv. Muaj ob peb subtleties ntawm no. Ua ntej, txij li thaum peb tab tom tham txog NAT ntawm qhov ntsuas ntawm tus neeg teb xov tooj, nws yog ib qho tsim nyog yuav tsum tau kho lub sijhawm, vim tias nrog cov txiaj ntsig zoo li qhov loj ntawm cov lus txhais lus yuav loj hlob sai sai rau qhov muaj txiaj ntsig zoo. Hauv qab no yog ib qho piv txwv ntawm qhov chaw kuv siv ntawm kuv cov servers:

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

Thiab qhov thib ob, txij li qhov loj me me ntawm cov lus txhais lus tsis yog tsim los ua haujlwm raws li cov neeg siv xov tooj, nws yuav tsum tau nce ntxiv:

net.netfilter.nf_conntrack_max = 3145728

Nws tseem yog ib qho tsim nyog los nce tus naj npawb ntawm cov thoob rau lub rooj hash khaws tag nrho cov kev tshaj tawm (qhov no yog ib qho kev xaiv hauv nf_conntrack module):

options nf_conntrack hashsize=1572864

Tom qab cov kev siv yooj yim no, kev tsim ua haujlwm tiav tau txais uas tuaj yeem txhais tau ntau tus neeg siv chaw nyob rau hauv lub pas dej ntawm sab nraud. Txawm li cas los xij, qhov kev ua tau zoo ntawm cov tshuaj no tawm ntau yam xav tau. Hauv kuv thawj zaug sim siv GNU / Linux rau NAT (circa 2013), Kuv tuaj yeem tau txais kev ua tau zoo ntawm 7Gbit / s ntawm 0.8Mpps rau ib tus neeg rau zaub mov (Xeon E5-1650v2). Txij thaum ntawd los, ntau qhov kev ua kom zoo sib txawv tau ua nyob rau hauv GNU / Linux ntsiav network pawg, kev ua haujlwm ntawm ib tus neeg rau zaub mov ntawm tib lub cuab yeej tau nce mus txog yuav luag 18-19 Gbit / s ntawm 1.8-1.9 Mpps (cov no yog qhov muaj txiaj ntsig siab tshaj plaws) , tab sis qhov kev thov rau cov tsheb ntim, ua tiav los ntawm ib tus neeg rau zaub mov tau nce sai dua. Raws li qhov tshwm sim, cov phiaj xwm tau tsim los txhawm rau sib npaug ntawm cov khoom thauj ntawm cov servers sib txawv, tab sis tag nrho cov no tau nce qhov nyuaj ntawm kev teeb tsa, tswj thiab tswj xyuas qhov zoo ntawm cov kev pabcuam.

NTFables

Niaj hnub no, ib qho kev zam hauv software "hloov hnab" yog siv DPDK thiab XDP. Ntau cov ntawv tau sau rau ntawm lub ncauj lus no, ntau cov lus sib txawv tau ua, thiab cov khoom lag luam tau tshwm sim (piv txwv li SKAT los ntawm VasExperts). Tab sis muab cov peev txheej programming tsawg ntawm cov tswv lag luam hauv xov tooj, nws muaj teeb meem heev los tsim ib qho "cov khoom lag luam" raws li cov qauv no ntawm koj tus kheej. Nws yuav nyuaj dua rau kev khiav lag luam xws li kev daws teeb meem yav tom ntej; tshwj xeeb, cov cuab yeej kuaj mob yuav tsum tau tsim. Piv txwv li, tus qauv tcpdump nrog DPDK yuav tsis ua haujlwm li ntawd, thiab nws yuav tsis "pom" pob ntawv xa rov qab mus rau cov xov hlau siv XDP. Ntawm txhua qhov kev sib tham txog cov thev naus laus zis tshiab rau kev xa tawm pob ntawv xa mus rau cov neeg siv-qhov chaw, lawv mus tsis pom qhia ΠΈ lus Pablo Neira Ayuso, tus saib xyuas iptables, hais txog kev txhim kho cov dej ntws tawm hauv nftables. Cia peb saib cov txheej txheem no hauv kev nthuav dav ntxiv.

Lub tswv yim tseem ceeb yog tias yog lub router hla cov pob ntawv los ntawm ib qho kev sib tham hauv ob qho kev qhia ntawm qhov ntws (TCP kev sib ntsib mus rau hauv ESTABLISHED lub xeev), ces tsis tas yuav tsum dhau cov ntawv txuas ntxiv ntawm qhov kev sib kho no los ntawm tag nrho cov kev cai ntawm firewall, vim tag nrho cov tshev no tseem yuav xaus nrog cov pob ntawv raug xa mus ntxiv mus rau txoj kev. Thiab peb tsis tas yuav xaiv txoj hauv kev - peb twb paub txog qhov twg interface thiab tus tswv tsev twg peb xav tau xa cov pob ntawv hauv qhov kev sib tham no. Txhua yam uas tseem tshuav yog khaws cov ntaub ntawv no thiab siv nws rau kev khiav haujlwm thaum ntxov ntawm kev ua cov pob ntawv. Thaum ua haujlwm NAT, nws yuav tsum tau khaws cov ntaub ntawv hais txog kev hloov pauv hauv chaw nyob thiab chaw nres nkoj txhais los ntawm nf_conntrack module. Yog lawm, tau kawg, qhov no ntau tus tub ceev xwm thiab lwm yam ntaub ntawv thiab cov kev cai lij choj hauv iptables tsis ua haujlwm, tab sis nyob rau hauv lub moj khaum ntawm txoj hauj lwm ntawm ib tug nyias muaj nyias ib NAT los yog, piv txwv li, ib tug ciam teb, qhov no tsis yog li ntawd tseem ceeb, vim hais tias cov kev pab cuam. tau faib thoob plaws cov khoom siv.

Configuration

Txhawm rau siv cov haujlwm no peb xav tau:

  • Siv lub noob tshiab. Txawm tias muaj tseeb hais tias lub functionality nws tus kheej tau tshwm sim nyob rau hauv ntsiav 4.16, ntev heev nws yog heev "raws" thiab tsis tu ncua ua rau kernel ceeb. Txhua yam ruaj khov nyob ib puag ncig lub Kaum Ob Hlis 2019, thaum LTS kernels 4.19.90 thiab 5.4.5 raug tso tawm.
  • Rewrite iptables cov cai nyob rau hauv nftables hom siv ib tug ncaj tsis ntev los no version ntawm nftables. Ua haujlwm raws nraim hauv version 0.9.0

Yog tias txhua yam hauv cov ntsiab lus yog qhov tseeb nrog thawj lub ntsiab lus, qhov tseem ceeb yog tsis txhob hnov ​​​​qab suav nrog cov qauv hauv kev teeb tsa thaum lub rooj sib txoos (CONFIG_NFT_FLOW_OFFLOAD = m), ces qhov thib ob xav tau kev piav qhia. nftables cov cai tau piav qhia txawv kiag li hauv iptables. Ntaub ntawv qhia yuav luag tag nrho cov ntsiab lus, kuj muaj tshwj xeeb converters cov cai los ntawm iptables mus rau nftables. Yog li ntawd, kuv tsuas yog muab piv txwv ntawm kev teeb tsa NAT thiab ntws tawm. Ib zaj dab neeg me me piv txwv: , - cov no yog cov kev sib txuas hauv network los ntawm kev tsheb khiav mus los; hauv kev muaj tiag tuaj yeem muaj ntau dua ob ntawm lawv. , - qhov chaw pib thiab xaus ntawm qhov chaw nyob "dawb".

NAT configuration yog yooj yim heev:

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

Nrog ntws offload nws yog qhov nyuaj me ntsis, tab sis nkag siab zoo:

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

Qhov ntawd, qhov tseeb, yog tag nrho kev teeb tsa. Tam sim no tag nrho TCP / UDP tsheb yuav poob rau hauv lub rooj fastnat thiab ua tiav sai dua.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Txhawm rau kom paub meej tias "ntau npaum li cas" qhov no yog, kuv yuav xa ib daim duab ntawm lub nra ntawm ob lub servers tiag tiag, nrog rau tib qho khoom siv (Xeon E5-1650v2), uas tau teeb tsa, siv tib lub Linux ntsiav, tab sis ua haujlwm NAT hauv iptables. (NAT4) thiab nftables (NAT5).

Kev nrawm nrawm thiab NAT hauv Linux

Tsis muaj daim duab ntawm pob ntawv ib ob nyob rau hauv lub screenshot, tab sis nyob rau hauv lub load profile ntawm cov servers qhov nruab nrab pob ntawv loj yog nyob ib ncig ntawm 800 bytes, yog li cov nqi nce mus txog 1.5Mpps. Raws li koj tuaj yeem pom, tus neeg rau zaub mov nrog nftables muaj kev ua haujlwm loj heev. Tam sim no, cov neeg rau zaub mov no ua haujlwm txog 30Gbit / s ntawm 3Mpps thiab muaj peev xwm ua tau raws li lub cev kev txwv ntawm 40Gbps, thaum muaj cov peev txheej CPU pub dawb.

Kuv vam tias cov ntaub ntawv no yuav muaj txiaj ntsig zoo rau network engineers sim txhim kho lawv cov servers.

Tau qhov twg los: www.hab.com

Ntxiv ib saib