په لینکس کې چټک روټینګ او NAT

لکه څنګه چې د IPv4 پتې له مینځه وړل کیږي، ډیری مخابراتي چلونکي د دې اړتیا سره مخ دي چې د ادرس ژباړې په کارولو سره خپلو پیرودونکو ته د شبکې لاسرسي چمتو کړي. پدې مقاله کې زه به تاسو ته ووایم چې تاسو څنګه کولی شئ د توکو سرورونو کې د کیریر درجې NAT فعالیت ترلاسه کړئ.

یو څه تاریخ

د IPv4 پته د ځای ختمولو موضوع نوره نوې نه ده. په ځینو وختونو کې، د انتظار لیستونه په RIPE کې ښکاره شول، بیا تبادلې راڅرګندې شوې چې په هغې کې د پتې بلاکونه تجارت شوي او د اجارې لپاره معاملې پای ته رسیدلي. په تدریجي ډول، د مخابراتو آپریټرانو د ادرس او پورټ ژباړې په کارولو سره د انټرنیټ لاسرسي خدمات چمتو کول پیل کړل. ځینې ​​​​د هر پیرودونکي ته د "سپینې" پتې د صادرولو لپاره کافي پتې ترلاسه کولو اداره نه وه کړې، پداسې حال کې چې نورو په ثانوي بازار کې د پتې اخیستلو څخه انکار کولو سره پیسې خوندي کول پیل کړل. د شبکې تجهیزاتو جوړونکو د دې نظر ملاتړ وکړ، ځکه دا فعالیت معمولا اضافي توسیع ماډلونو یا جوازونو ته اړتیا لري. د مثال په توګه، د جونیپر د MX روټرونو په لیکه کې (د وروستي MX104 او MX204 پرته)، تاسو کولی شئ په جلا MS-MIC خدمت کارت کې NAPT ترسره کړئ، Cisco ASR1k د CGN جواز ته اړتیا لري، د Cisco ASR9k جلا A9K-ISM-100 ماډل ته اړتیا لري او هغه ته د A9K-CGN جواز -LIC. په عموم کې، خوښۍ ډیرې پیسې لګوي.

IPTables

د NAT ترسره کول ځانګړي کمپیوټري سرچینو ته اړتیا نلري؛ دا د عمومي هدف پروسیسرونو لخوا حل کیدی شي، کوم چې نصب شوي، د بیلګې په توګه، په هر کور روټر کې. د مخابراتو آپریټر په پیمانه ، دا ستونزه د فری بی ایس ډی (ipfw/pf) یا GNU/Linux (iptables) چلولو کموډیټ سرورونو په کارولو سره حل کیدی شي. موږ به FreeBSD په پام کې ونیسو، ځکه چې ... ما ډیر وخت دمخه د دې OS کارول بند کړل، نو موږ به GNU/Linux ته ولاړ شو.

د پتې ژباړې فعالول هیڅ ستونزمن ندي. لومړی تاسو اړتیا لرئ په نیټ جدول کې په iptables کې قواعد ثبت کړئ:

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

عملیاتي سیسټم به د nf_conntrack ماډل پورته کړي، کوم چې به ټولې فعالې اړیکې وڅاري او اړین تبادلې ترسره کړي. دلته څو لنډیزونه شتون لري. لومړی، له هغه ځایه چې موږ د مخابراتي آپریټر په پیمانه د NAT په اړه خبرې کوو، نو اړینه ده چې د مهال ویش تنظیم کړئ، ځکه چې د ډیفالټ ارزښتونو سره د ژباړې میز اندازه به په چټکۍ سره ناورین ارزښتونو ته وده ورکړي. لاندې د ترتیباتو یوه بیلګه ده چې ما په خپلو سرورونو کې کارولې:

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

او دوهم، له دې امله چې د ژباړې جدول ډیفالټ اندازه د مخابراتي آپریټر شرایطو لاندې کار کولو لپاره ډیزاین شوې نه ده ، نو دا باید ډیر شي:

net.netfilter.nf_conntrack_max = 3145728

دا هم اړینه ده چې د ټولو نشراتو ذخیره کولو لپاره د هش میز لپاره د بالټونو شمیر زیات کړئ (دا په nf_conntrack ماډل کې یو اختیار دی):

options nf_conntrack hashsize=1572864

د دې ساده لاسوهنو وروسته، یو بشپړ کاري ډیزاین ترلاسه کیږي چې کولی شي د پیرودونکو لوی شمیر پتې د بهرنیانو په حوض کې وژباړي. په هرصورت، د دې حل فعالیت ډیر څه پریږدي چې مطلوب وي. د NAT لپاره د GNU/Linux کارولو زما په لومړیو هڅو کې (سرکا 2013)، زه توانیدلی وم چې د 7Mpps په هر سرور (Xeon E0.8-5v1650) کې شاوخوا 2Gbit/s فعالیت ترلاسه کړم. له هغه وخت راهیسې، د GNU/Linux کرنل شبکې سټیک کې ډیری مختلف اصلاحونه شوي، په ورته هارډویر کې د یو سرور فعالیت په 18-19 Mpps کې نږدې 1.8-1.9 Gbit/s ته لوړ شوی (دا اعظمي ارزښتونه وو) ، مګر د ټرافیک حجم غوښتنه ، د یو سرور لخوا پروسس شوې خورا ګړندی وده کړې. د پایلې په توګه، سکیمونه په مختلفو سرورونو کې د بار د توازن لپاره رامینځته شوي، مګر دې ټولو د چمتو شوي خدماتو کیفیت ترتیب، ساتلو او ساتلو پیچلتیا زیاته کړه.

NTFables

نن ورځ، په سافټویر کې د فیشن رجحان "باغ بدلولو" د DPDK او XDP کارول دي. په دې موضوع ډیری مقالې لیکل شوي، ډیری بیلابیل ویناوې شوي، او سوداګریز محصولات څرګندیږي (د بیلګې په توګه، د VasExperts څخه SKAT). مګر د مخابراتو آپریټرانو محدود پروګرام کولو سرچینو ته په پام سره، دا خورا ستونزمن کار دی چې د دې چوکاټونو پر بنسټ خپل "محصول" جوړ کړئ. دا به ډیر ستونزمن وي چې په راتلونکي کې دا ډول حل کار وکړي؛ په ځانګړې توګه، تشخیصي وسایل باید رامینځته شي. د مثال په توګه ، د DPDK سره معیاري tcpdump به ورته کار ونکړي ، او دا به د XDP په کارولو سره تارونو ته بیرته لیږل شوي پاکټونه "وګوري" نه. د کارونکي ځای ته د پاکټ فارورډ کولو لپاره د نوي ټیکنالوژیو په اړه د ټولو خبرو په جریان کې ، دوی پام نه و شوی راپورونه и مقالې پابلو نیرا آیوسو، د iptables ساتونکی، په nftables کې د جریان آفلوډینګ پراختیا په اړه. راځئ چې دا میکانیزم په ډیر تفصیل سره وګورو.

اصلي نظر دا دی چې که چیرې روټر د جریان په دواړو لورو کې د یوې ناستې څخه پاکټونه تیر کړي (د TCP سیشن تاسیس شوي حالت ته لاړ) ، نو اړتیا نشته چې د دې ناستې راتلونکي کڅوړې د ټولو فایروال مقرراتو له لارې تیرې کړئ ، ځکه چې دا ټول چکونه به بیا هم پای ته ورسیږي چې پیکټ نور روټینګ ته لیږدول کیږي. او موږ واقعیا اړتیا نلرو چې لاره غوره کړو - موږ دمخه پوهیږو چې کوم انٹرفیس ته او کوم کوربه ته موږ اړتیا لرو چې پدې ناسته کې پاکټونه واستوو. ټول هغه څه چې پاتې دي د دې معلوماتو ذخیره کول او د پاکټ پروسس کولو په لومړي مرحله کې د روټینګ لپاره کارول دي. کله چې د NAT ترسره کول، دا اړینه ده چې د nf_conntrack ماډل لخوا ژباړل شوي پتې او بندرونو کې د بدلونونو په اړه اضافي معلومات ذخیره کړئ. هو ، البته ، پدې حالت کې مختلف پولیس او نور معلومات او احصایوي مقررات په iptables کې کار کوي ، مګر د جلا ولاړ NAT یا د مثال په توګه ، پوله د دندې په چوکاټ کې ، دا دومره مهم ندي ، ځکه چې خدمات په وسایلو ویشل شوي دي.

شکل بندي

د دې فنکشن کارولو لپاره موږ ته اړتیا لرو:

  • تازه دانه وکاروئ. د دې حقیقت سره سره چې فعالیت پخپله د کرنل 4.16 کې څرګند شوی ، د اوږدې مودې لپاره دا خورا "خام" و او په منظم ډول د کرنل ویره رامینځته کوي. هر څه د دسمبر 2019 په شاوخوا کې ثبات لري، کله چې د LTS دانا 4.19.90 او 5.4.5 خوشې شوي.
  • د nftables د کافي وروستي نسخې په کارولو سره په nftables فارمیټ کې د iptables قواعد بیا ولیکئ. دقیقا په 0.9.0 نسخه کې کار کوي

که په اصولو کې هرڅه د لومړي ټکي سره روښانه وي ، اصلي شی دا مه هیروئ چې د مجلس پرمهال په ترتیب کې ماډل شامل کړئ (CONFIG_NFT_FLOW_OFFLOAD=m) ، بیا دوهم ټکی توضیح ته اړتیا لري. د nftables قواعد په بشپړ ډول د iptables په پرتله په بشپړ ډول تشریح شوي. لاسوند نږدې ټول ټکي څرګندوي، ځانګړي هم شتون لري کنورټرونه له iptables څخه nftables ته قواعد. له همدې امله، زه به یوازې د NAT او فلو آفلوډ تنظیم کولو مثال ورکړم. د مثال په توګه یو کوچنی افسانه: , - دا د شبکې انٹرفیسونه دي چې له لارې یې ترافیک تیریږي؛ په حقیقت کې له دوی څخه دوه څخه ډیر کیدی شي. , - د "سپینې" پتې د لړۍ پیل او پای پته.

د NAT ترتیب خورا ساده دی:

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

د جریان آفلوډ سره دا یو څه ډیر پیچلی دی ، مګر د پوهیدو وړ دی:

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

دا، په حقیقت کې، ټول ترتیب دی. اوس به ټول TCP/UDP ټرافیک د فاسټناټ جدول ته راشي او ډیر ګړندي پروسس شي.

پایلې

د دې روښانه کولو لپاره چې دا څومره "ډیر ګړندی" دی ، زه به په دوه ریښتیني سرورونو کې د بار سکرین شاټ ضمیمه کړم ، د ورته هارډویر (Xeon E5-1650v2) سره ، په ورته ډول ترتیب شوی ، د ورته لینکس کرنل په کارولو سره ، مګر په iptables کې NAT ترسره کوي. (NAT4) او په nftables (NAT5).

په لینکس کې چټک روټینګ او NAT

په سکرین شاټ کې په هره ثانیه کې د پاکټونو ګراف شتون نلري ، مګر د دې سرورونو بار پروفایل کې د پیکټ اوسط اندازه شاوخوا 800 بایټ دی ، نو ارزښتونه یې تر 1.5Mpps پورې رسیږي. لکه څنګه چې تاسو لیدلی شئ، د nftables سره سرور د فعالیت لوی زیرمه لري. اوس مهال، دا سرور تر 30Gbit/s پورې په 3Mpps کې پروسس کوي او په ښکاره ډول د 40Gbps فزیکي شبکې محدودیت پوره کولو توان لري، پداسې حال کې چې وړیا CPU سرچینې لري.

زه امید لرم چې دا مواد به د شبکې انجینرانو لپاره ګټور وي چې هڅه کوي د دوی سرورونو فعالیت ښه کړي.

سرچینه: www.habr.com

Add a comment