لينڪس ۾ فاسٽ روٽنگ ۽ NAT

جيئن ته IPv4 ايڊريس ختم ٿي ويا آهن، ڪيترن ئي ٽيليڪ آپريٽرن کي منهن ڏيڻ جي ضرورت آهي ته انهن جي گراهڪن کي مهيا ڪرڻ جي نيٽ ورڪ تائين رسائي سان ايڊريس ترجمو استعمال ڪندي. هن آرٽيڪل ۾ آئون توهان کي ٻڌائيندس ته توهان ڪئين حاصل ڪري سگهو ٿا ڪيريئر گريڊ NAT ڪارڪردگي ڪموڊٽي سرورز تي.

تاريخ جو هڪ سا

IPv4 ايڊريس اسپيس ايڪسائيشن جو موضوع هاڻي نئون ناهي. ڪجهه نقطي تي، ويٽنگ لسٽون RIPE ۾ ظاهر ٿيون، پوء ايڪسچينج ظاهر ٿيو جنهن تي پتي جا بلاڪ واپار ڪيا ويا ۽ انهن کي ليز ڏيڻ لاء ڊيل ڪيا ويا. تدريجي طور تي، ٽيليڪ آپريٽرز ايڊريس ۽ پورٽ ترجمي کي استعمال ڪندي انٽرنيٽ رسائي جون خدمتون مهيا ڪرڻ شروع ڪيو. ڪجهه هر رڪن کي "سفيد" ايڊريس جاري ڪرڻ لاء ڪافي ايڊريس حاصل ڪرڻ جو انتظام نه ڪيو، جڏهن ته ٻين ثانوي مارڪيٽ تي ايڊريس خريد ڪرڻ کان انڪار ڪندي پئسا بچائڻ شروع ڪيو. نيٽ ورڪ سامان جي ٺاهيندڙن هن خيال جي حمايت ڪئي، ڇاڪاڻ ته هي ڪارڪردگي عام طور تي اضافي توسيع ماڊلز يا لائسنس جي ضرورت آهي. مثال طور، Juniper's line of MX routers ۾ (سواءِ جديد 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 (circa 2013) لاءِ GNU/Linux استعمال ڪرڻ جي منهنجي پهرين ڪوشش ۾، مان 7Mpps في سرور (Xeon E0.8-5v1650) تي تقريبن 2Gbit/s جي ڪارڪردگي حاصل ڪرڻ جي قابل ٿيس. ان وقت کان وٺي، GNU/Linux kernel نيٽ ورڪ اسٽيڪ ۾ ڪيتريون ئي مختلف اصلاحون ڪيون ويون آهن، ساڳئي هارڊويئر تي هڪ سرور جي ڪارڪردگي تقريبن 18-19 Gbit/s تائين وڌي وئي آهي 1.8-1.9 Mpps (اهي وڌ ۾ وڌ قدر هئا) ، پر ٽرئفڪ جي مقدار جي طلب، ھڪڙي سرور پاران پروسيس ٿيل تمام تيز ٿي وئي. نتيجي طور، مختلف سرورز تي لوڊ کي توازن ڪرڻ لاء اسڪيمون ٺاهيا ويا، پر اهو سڀ ڪجهه مهيا ڪيل خدمتن جي معيار کي ترتيب ڏيڻ، برقرار رکڻ ۽ برقرار رکڻ جي پيچيدگي کي وڌايو.

اين ايف ٽيبل

اڄڪلهه، سافٽ ويئر ۾ هڪ فيشني رجحان "شفٽنگ بيگز" 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 فارميٽ ۾ iptables ضابطن کي ٻيهر لکو nftables جو تازو نسخو استعمال ڪندي. بلڪل ورجن 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

تبصرو شامل ڪريو