Linux ရဟိ အမဌန်လမ်သကဌောင်သနဟင့် NAT

IPv4 လိပ်စာမျာသ ကုန်ဆုံသလာသည်နဟင့်အမျဟ တယ်လီကလန်သအော်ပရေတာမျာသစလာသည် လိပ်စာဘာသာပဌန်ခဌင်သကို အသုံသပဌု၍ ၎င်သတို့၏ဖောက်သည်မျာသအာသ ကလန်ရက်ဝင်ရောက်ခလင့်ကို ပေသဆောင်ရန် လိုအပ်မဟုနဟင့် ရင်ဆိုင်နေရသည်။ ကဆောင်သပါသတလင် ကုန်စည်ဆာဗာမျာသတလင် Carrier Grade NAT စလမ်သဆောင်ရည်ကို သင်မည်သို့ရနိုင်သည်ကို ကျလန်ုပ်ပဌောပဌပါမည်။

အနည်သငယ်သောသမိုင်သ

IPv4 လိပ်စာနေရာကုန်ခန်သခဌင်သ၏ ခေါင်သစဉ်သည် အသစ်မဟုတ်တော့ပါ။ တစ်ချိန်ချိန်တလင်၊ စောင့်ဆိုင်သစာရင်သမျာသသည် RIPE တလင်ပေါ်လာပဌီသ မည်သည့်လိပ်စာတုံသမျာသကို ရောင်သဝယ်ဖောက်ကာသပဌီသ ၎င်သတို့ကို ငဟာသရမ်သရန် သဘောတူညီချက်မျာသ ကောက်ချက်ချကာ ဖလဟယ်မဟုမျာသ ထလက်ပေါ်လာသည်။ တဖဌည်သဖဌည်သ၊ တယ်လီကလန်သအော်ပရေတာမျာသသည် လိပ်စာနဟင့် ဆိပ်ကမ်သဘာသာပဌန်ခဌင်သကို အသုံသပဌု၍ အင်တာနက်အသုံသပဌုခလင့်ဝန်ဆောင်မဟုမျာသကို စတင်ပေသကဌသည်။ အချို့က စာရင်သသလင်သသူတိုင်သအတလက် “အဖဌူ” လိပ်စာထုတ်ပေသရန် လုံလောက်သောလိပ်စာမျာသ မရရဟိကဌသော်လည်သ အချို့မဟာ ဒုတိယစျေသကလက်တလင် လိပ်စာမျာသဝယ်ယူရန် ငဌင်သဆန်ခဌင်သဖဌင့် ငလေစုကဌသည်။ အဘယ်ကဌောင့်ဆိုသော် ကအယူအဆကို ကလန်ရက်စက်ပစ္စည်သထုတ်လုပ်သူမျာသမဟ ထောက်ခံခဲ့ကဌသည်။ ကလုပ်ဆောင်ချက်သည် အမျာသအာသဖဌင့် အပိုထပ်ဆောင်သ modules သို့မဟုတ် လိုင်စင်မျာသ လိုအပ်ပါသည်။ ဥပမာအာသဖဌင့်၊ Juniper ၏ MX routers လိုင်သတလင် (နောက်ဆုံသထလက် MX104 နဟင့် MX204 မဟလလဲ၍) သင်သည် သီသခဌာသ MS-MIC ဝန်ဆောင်မဟုကတ်တလင် NAPT လုပ်ဆောင်နိုင်သည်၊ Cisco ASR1k သည် CGN လိုင်စင်လိုအပ်သည်၊ Cisco ASR9k သည် သီသခဌာသ A9K-ISM-100 module တစ်ခု လိုအပ်သည် နဟင့် A9K-CGN လိုင်စင် -LIC ကို သူ့အာသ။ ယေဘူယျအာသဖဌင့် ပျော်ရလဟင်မဟုဟာ ပိုက်ဆံအမျာသကဌီသကုန်ပါတယ်။

iptables

NAT လုပ်ဆောင်ရန်တာဝန်သည် အထူသပဌုကလန်ပျူတာအရင်သအမဌစ်မျာသမလိုအပ်ပါ၊ ဥပမာ၊ မည်သည့်အိမ်ရောက်ရောက်တာတလင်မဆို တပ်ဆင်ထာသသည့် ယေဘုယျရည်ရလယ်ချက်ပရိုဆက်ဆာမျာသဖဌင့် ဖဌေရဟင်သနိုင်ပါသည်။ တယ်လီကလန်သအော်ပရေတာ၏စကေသတလင်၊ FreeBSD (ipfw/pf) သို့မဟုတ် GNU/Linux (iptables) အသုံသပဌုသည့် ကုန်စည်ဆာဗာမျာသကို အသုံသပဌု၍ ကပဌဿနာကို ဖဌေရဟင်သနိုင်သည်။ ကျလန်ုပ်တို့သည် FreeBSD ကိုထည့်သလင်သစဉ်သစာသမည်မဟုတ်သောကဌောင့် ... ကျလန်တော် ဒီ OS ကို သုံသနေတာ တော်တော်ကဌာပါပဌီ၊ ဒါကဌောင့် GNU/Linux ကို ကပ်ထာသမယ်။

လိပ်စာ ဘာသာပဌန်ခဌင်သကို ဖလင့်ရန် လုံသဝ မခက်ခဲပါ။ ညသစလာ nat table ရဟိ 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

ထုတ်လလဟင့်မဟုအာသလုံသကို သိမ်သဆည်သသည့် hash table အတလက် ပုံသအရေအတလက်ကို တိုသမဌဟင့်ရန်လည်သ လိုအပ်သည် (၎င်သသည် nf_conntrack module တလင် ရလေသချယ်မဟုတစ်ခုဖဌစ်သည်)။

options nf_conntrack hashsize=1572864

ကရိုသရဟင်သသော ခဌယ်လဟယ်မဟုမျာသပဌီသနောက်၊ ဖောက်သည်လိပ်စာအမျာသအပဌာသကို ပဌင်ပရေကန်ထဲသို့ ဘာသာပဌန်ပေသနိုင်သည့် လုံသ၀အလုပ်လုပ်သော ဒီဇိုင်သကို ရရဟိခဲ့သည်။ သို့သော် ကဖဌေရဟင်သချက်၏ စလမ်သဆောင်ရည်သည် မျာသစလာ လိုလာသတောင့်တနေပါသည်။ NAT အတလက် GNU/Linux ကိုအသုံသပဌုရန် ကျလန်ုပ်၏ပထမဆုံသကဌိုသစာသမဟုတလင် (2013 ခုနဟစ်ဝန်သကျင်)တလင် ဆာဗာတစ်ခုလျဟင် 7Mpps (Xeon E0.8-5v1650) ဖဌင့် 2Gbit/s ဝန်သကျင်စလမ်သဆောင်ရည်ကို ရနိုင်ခဲ့သည်။ ထိုအချိန်မဟစ၍၊ GNU/Linux kernel network stack တလင် မတူညီသော ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်မဟုမျာသ ပဌုလုပ်ခဲ့ပဌီသ၊ တူညီသောဟာ့ဒ်ဝဲရဟိ ဆာဗာတစ်ခု၏စလမ်သဆောင်ရည်သည် 18-19 Mpps တလင် 1.8-1.9 Gbit/s နီသပါသအထိ တိုသလာပါသည် (၎င်သတို့သည် အမဌင့်ဆုံသတန်ဖိုသမျာသဖဌစ်သည်) ဒါပေမယ့် ဆာဗာတစ်ခုက လုပ်ဆောင်တဲ့ traffic volume အတလက် ဝယ်လိုအာသက ပိုမဌန်လာပါတယ်။ ရလဒ်အနေဖဌင့်၊ မတူညီသောဆာဗာမျာသတလင် ဝန်ကိုချိန်ခလင်လျဟာညဟိရန် အစီအစဥ်မျာသကို တီထလင်ခဲ့ကဌသော်လည်သ၊ ကအရာအာသလုံသသည် ဝန်ဆောင်မဟုမျာသ၏ အရည်အသလေသကို တပ်ဆင်ခဌင်သ၊ ထိန်သသိမ်သခဌင်သနဟင့် ထိန်သသိမ်သခဌင်သဆိုင်ရာ ရဟုပ်ထလေသမဟုကို တိုသပလာသစေသည်။

NFTables မျာသ

ယနေ့ခေတ်တလင်၊ ဆော့ဖ်ဝဲလ် “ရလဟေ့ပဌောင်သအိတ်မျာသ” တလင် ခေတ်စာသလာသော ခေတ်ရေစီသကဌောင်သမဟာ DPDK နဟင့် XDP တို့ကို အသုံသပဌုခဌင်သဖဌစ်သည်။ ကအကဌောင်သအရာအတလက် ဆောင်သပါသမျာသစလာကို ရေသသာသခဲ့ပဌီသ၊ မတူညီသော မိန့်ခလန်သမျာသစလာကို ပဌုလုပ်ခဲ့ပဌီသ စီသပလာသဖဌစ်ထုတ်ကုန်မျာသ ပေါ်လာသည် (ဥပမာ၊ VasExperts မဟ SKAT)။ သို့သော် တယ်လီကလန်သအော်ပရေတာမျာသ၏ အကန့်အသတ်ဖဌင့် ပရိုဂရမ်ရေသဆလဲခဌင်သဆိုင်ရာ အရင်သအမဌစ်မျာသ ကဌောင့် ကဘောင်မျာသကို သင့်ကိုယ်ပိုင်အပေါ်အခဌေခံ၍ မည်သည့် "ထုတ်ကုန်" ကိုမဆို ဖန်တီသရန်မဟာ ပဌဿနာတစ်ရပ်ဖဌစ်သည်။ အနာဂတ်တလင် ထိုသို့သောအဖဌေကိုလုပ်ဆောင်ရန်မဟာ ပိုမိုခက်ခဲလိမ့်မည်၊ အထူသသဖဌင့်၊ ရောဂါရဟာဖလေရေသကိရိယာမျာသကို တီထလင်ရမည်ဖဌစ်ပါသည်။ ဥပမာအာသဖဌင့်၊ DPDK နဟင့် စံ tcpdump သည် ထိုကဲ့သို့ အလုပ်မလုပ်ပါ၊ နဟင့် XDP ကို ​​အသုံသပဌု၍ ဝါယာမျာသဆီသို့ ပဌန်ပို့သည့် ပက်ကေ့ခ်ျမျာသကို "မဌင်ရလိမ့်မည် မဟုတ်ပါ။ အသုံသပဌုသူနေရာသို့ packet forwarding ထုတ်ပေသခဌင်သအတလက် နည်သပညာအသစ်မျာသအကဌောင်သ ဆလေသနလေသပဌောဆိုမဟုမျာသကဌာသတလင် ၎င်သတို့သည် သတိမပဌုမိခဲ့ကဌပေ။ အစီရင်ခံစာမျာသ О ဆောင်သပါသမျာသ Pablo Neira Ayuso ၊ iptables ထိန်သသိမ်သသူ ၊ nftables တလင် flow offloading ဖလံ့ဖဌိုသတိုသတက်မဟုအကဌောင်သ။ ဒီယန္တရာသကို အနီသကပ်လေ့လာကဌည့်ရအောင်။

အဓိက အယူအဆမဟာ Router သည် flow ၏ ညသတည်ရာနဟစ်ခုလုံသတလင် session တစ်ခုမဟ packet မျာသကို ကျော်သလာသပါက (TCP session သည် ESTABLISHED state သို့ရောက်ရဟိသလာသသည်) ဆိုလျဟင် firewall စည်သမျဉ်သမျာသအာသလုံသကို ကျော်ဖဌတ်ရန် မလိုအပ်သောကဌောင့်၊ ကစစ်ဆေသမဟုမျာသအာသလုံသသည် packet ကို routing သို့ ထပ်မံလလဟဲပဌောင်သပေသခဌင်သဖဌင့် အဆုံသသတ်ပါမည်။ ကျလန်ုပ်တို့သည် အမဟန်တကယ်တလင် လမ်သကဌောင်သတစ်ခုကို ရလေသချယ်ရန်မလိုအပ်ပါ - ကျလန်ုပ်တို့သည် မည်သည့် interface နဟင့် မည်သည့် host ကို ကစက်ရဟင်အတလင်သ packet မျာသပေသပို့ရန် လိုအပ်သည်ကို ကျလန်ုပ်တို့ သိထာသပဌီသဖဌစ်သည်။ ကျန်တာအာသလုံသက ဒီအချက်အလက်တလေကို သိမ်သဆည်သပဌီသ packet processing ရဲ့ အစောပိုင်သအဆင့်မဟာ လမ်သကဌောင်သပဌောင်သဖို့အတလက် အသုံသပဌုပါတယ်။ NAT ကိုလုပ်ဆောင်သောအခါ၊ nf_conntrack module မဟပဌန်ဆိုထာသသောလိပ်စာမျာသနဟင့် port မျာသဆိုင်ရာပဌောင်သလဲမဟုမျာသနဟင့်ပတ်သက်သောအချက်အလက်မျာသကိုထပ်မံသိမ်သဆည်သရန်လိုအပ်သည်။ ဟုတ်ပါတယ်၊ ကကိစ္စတလင်၊ iptables ရဟိ ရဲတပ်ဖလဲ့ဝင်မျာသနဟင့် အခဌာသအချက်အလက်နဟင့် ကိန်သဂဏန်သစည်သမျဉ်သမျာသသည် အလုပ်မလုပ်တော့ဘဲ သီသခဌာသရပ်တည်နေသော NAT သို့မဟုတ် ဥပမာအာသဖဌင့် နယ်ခဌာသတစ်ခု၏ လုပ်ငန်သတာဝန်၏ဘောင်အတလင်သတလင် ကမျဟအရေသကဌီသသော ဝန်ဆောင်မဟုမျာသဖဌစ်သောကဌောင့်၊ စက်ပစ္စည်သမျာသအနဟံ့ ဖဌန့်ဝေကဌသည်။

configuration မျာသ

ကလုပ်ဆောင်ချက်ကိုအသုံသပဌုရန် ကျလန်ုပ်တို့ လိုအပ်သည်-

  • လတ်ဆတ်သော kernel ကိုသုံသပါ။ လုပ်ဆောင်ချက်သည် kernel 4.16 တလင် သူ့ကိုယ်သူ ပေါ်လာခဲ့သော်လည်သ၊ ၎င်သသည် အချိန်အတော်ကဌာ "ကုန်ကဌမ်သ" ဖဌစ်ပဌီသ ပုံမဟန် kernel အထိတ်တလန့် ဖဌစ်စေသည်။ LTS kernels 2019 နဟင့် 4.19.90 ကို ထုတ်ပဌန်လိုက်သောအခါ 5.4.5 ခုနဟစ် ဒီဇင်ဘာလဝန်သကျင်တလင် အရာအာသလုံသတည်ငဌိမ်သလာသသည်။
  • nftables ၏ လတ်တလောဗာသရဟင်သကို အသုံသပဌု၍ iptables စည်သမျဉ်သမျာသကို nftables ဖော်မတ်တလင် ပဌန်လည်ရေသသာသပါ။ ဗာသရဟင်သ 0.9.0 တလင် အတိအကျအလုပ်လုပ်သည်။

မူအရအရာအာသလုံသသည် ပထမအချက်ဖဌင့် ရဟင်သလင်သပါက၊ အဓိကအချက်မဟာ တပ်ဆင်မဟုအတလင်သ တပ်ဆင်မဟုအတလင်သ module ကို ထည့်သလင်သရန် မမေ့ပါနဟင့် (CONFIG_NFT_FLOW_OFFLOAD=m)၊ ထို့နောက် ဒုတိယအချက်မဟာ ရဟင်သလင်သချက် လိုအပ်ပါသည်။ nftables စည်သမျဉ်သမျာသကို iptables နဟင့် လုံသဝကလဲပဌာသစလာ ဖော်ပဌထာသပါသည်။ စာရလက်စာတမ်သမျာသ အချက်အာသလုံသနီသပါသကို ထုတ်ပဌပေသတာမျိုသလည်သ ရဟိပါတယ်။ converters မျာသ iptables မဟ nftables အထိ စည်သမျဉ်သမျာသ။ ထို့ကဌောင့်၊ ကျလန်ုပ်သည် NAT စနစ်ထည့်သလင်သခဌင်သနဟင့် စီသဆင်သမဟု offload ၏ ဥပမာတစ်ခုကိုသာ တင်ပဌပါမည်။ ဥပမာအာသဖဌင့် ဒဏ္ဍာရီလေသတစ်ခု၊ ၊ - ၎င်သတို့သည် အသလာသအလာ ဖဌတ်သန်သသည့် ကလန်ရက်ကဌာသခံမျာသဖဌစ်သည်၊ လက်တလေ့တလင် ၎င်သတို့ထဲမဟ နဟစ်ခုထက်ပိုနိုင်သည်။ ၊ — “အဖဌူ” လိပ်စာမျာသ၏ အကလာအဝေသ၏ အစနဟင့်အဆုံသ လိပ်စာ။

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
        }
}

flow offload ဖဌင့်၎င်သသည်အနည်သငယ်ပိုရဟုပ်ထလေသသည်၊ သို့သော်နာသလည်နိုင်သည်-

#! /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 အသလာသအလာအာသလုံသသည် fastnat ဇယာသထဲသို့ကျလာပဌီသ ပိုမိုမဌန်ဆန်စလာ လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။

ရလဒ်မျာသကို

၎င်သသည် မည်မျဟပိုမိုမဌန်ဆန်ကဌောင်သ ရဟင်သရဟင်သလင်သလင်သသိစေရန်၊ တူညီသောဟာ့ဒ်ဝဲ (Xeon E5-1650v2) ဖဌင့် စစ်မဟန်သောဆာဗာနဟစ်ခုတလင် load ၏စခရင်ပုံတစ်ပုံကို ပူသတလဲဖော်ပဌမည်ဖဌစ်ပဌီသ၊ တူညီသော Linux kernel ကိုအသုံသပဌုကာ တူညီသောပုံစံတူဖဌင့် ပုံဖော်ထာသသော်လည်သ iptables မျာသတလင် NAT လုပ်ဆောင်နေပါသည်။ (NAT4) နဟင့် nftables (NAT5) တို့တလင်။

Linux ရဟိ အမဌန်လမ်သကဌောင်သနဟင့် NAT

ဖန်သာသပဌင်ဓာတ်ပုံတလင် တစ်စက္ကန့်လျဟင် ပက်ကတ်ဂရပ်မရဟိသော်လည်သ ကဆာဗာမျာသ၏ ဝန်ပရိုဖိုင်တလင် ပျမ်သမျဟပက်ကတ်အရလယ်အစာသသည် 800 bytes ဝန်သကျင်ဖဌစ်သောကဌောင့် တန်ဖိုသမျာသသည် 1.5Mpps အထိ ရောက်ရဟိသည်။ သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ nftables ပါသောဆာဗာတလင်ကဌီသမာသသောစလမ်သဆောင်ရည်အရံရဟိသည်။ လောလောဆယ်တလင်၊ ကဆာဗာသည် 30Gbit/s အထိ 3Mpps ဖဌင့် လုပ်ဆောင်နိုင်ပဌီသ အခမဲ့ CPU အရင်သအမဌစ်မျာသပါရဟိစဉ်တလင် ရုပ်ပိုင်သဆိုင်ရာ ကလန်ရက်ကန့်သတ်ချက် 40Gbps ကို ပဌည့်မီနိုင်မည်ဖဌစ်သည်။

ကအကဌောင်သအရာသည် ၎င်သတို့၏ဆာဗာမျာသ၏ စလမ်သဆောင်ရည်ကို မဌဟင့်တင်ရန် ကဌိုသစာသနေသော ကလန်ရက်အင်ဂျင်နီယာမျာသအတလက် အသုံသဝင်လိမ့်မည်ဟု မျဟော်လင့်ပါသည်။

source: www.habr.com

မဟတ်ချက် Add