မြန်နှုန်းမြင့် routing နှင့် NAT တွင် Linux

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 အကောင်အထည်ဖော်မှုသည် အထူးပြုကွန်ပျူတာအရင်းအမြစ်များ မလိုအပ်ပါ။ ၎င်းကို မည်သည့်အိမ်သုံး router တွင်မဆိုတွေ့ရှိရသည့် အထွေထွေရည်ရွယ်ချက်ပရိုဆက်ဆာများဖြင့် ကိုင်တွယ်နိုင်သည်။ တယ်လီကွန်းအော်ပရေတာစကေးတွင်၊ ဤအလုပ်ကို FreeBSD (ipfw/pf) သို့မဟုတ် GNU/ ကို အသုံးပြုသော commodity server များကို အသုံးပြု၍ ပြီးမြောက်နိုင်သည်။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

ဤရိုးရှင်းသော ကိုင်တွယ်မှုများအပြီးတွင်၊ client address အများအပြားကို external address အစုအဝေးသို့ broadcast လုပ်နိုင်သည့် အပြည့်အဝလုပ်ဆောင်နိုင်သော ဒီဇိုင်းတစ်ခုကို ရရှိသည်။ သို့သော်၊ ဤဖြေရှင်းချက်၏ စွမ်းဆောင်ရည်မှာ မျှော်လင့်ထားသည့်အတိုင်း မရှိပါ။ GNU/ ကို အသုံးပြုရန် ကျွန်ုပ်၏ ပထမဆုံးကြိုးပမ်းမှုများတွင်Linux NAT အတွက် (၂၀၁၃ ခုနှစ်ဝန်းကျင်)၊ single server (Xeon E5-1650v2) မှာ 7Gbit/s ဝန်းကျင် 0.8Mpps စွမ်းဆောင်ရည်ကို ရရှိခဲ့ပါတယ်။ အဲဒီနောက်ပိုင်း GNU kernel network stack/Linux အကောင်းဆုံးဖြစ်အောင် အများအပြား ပြုလုပ်ခဲ့ပြီး တူညီသော hardware ပေါ်ရှိ server တစ်ခုတည်း၏ စွမ်းဆောင်ရည်သည် 18-19 Mpps (၎င်းတို့သည် အမြင့်ဆုံးတန်ဖိုးများဖြစ်သည်) တွင် 1.8-1.9 Gbit/s နီးပါးအထိ မြင့်တက်လာခဲ့သော်လည်း server တစ်ခုတည်းမှ ကိုင်တွယ်သော traffic အတွက် চাহিদာမှာ ပိုမိုမြန်ဆန်စွာ မြင့်တက်လာခဲ့သည်။ နောက်ဆုံးတွင်၊ မတူညီသော server များအတွက် load balancing စနစ်များကို တီထွင်ခဲ့သော်လည်း ဤအရာအားလုံးသည် setup၊ ပြုပြင်ထိန်းသိမ်းမှုနှင့် ပေးအပ်သော ဝန်ဆောင်မှုများ၏ အရည်အသွေးကို ထိန်းသိမ်းခြင်း၏ ရှုပ်ထွေးမှုကို တိုးမြှင့်ပေးခဲ့သည်။

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 ဇယားထဲသို့ကျလာပြီး ပိုမိုမြန်ဆန်စွာ လုပ်ဆောင်နိုင်မည်ဖြစ်သည်။

ရလဒ်များကို

ဒါဘယ်လောက်မြန်လဲဆိုတာ ရှင်းရှင်းလင်းလင်းသိစေဖို့အတွက်၊ တူညီတဲ့ hardware (Xeon E5-1650v2) ကို တူညီတဲ့ core ကိုအသုံးပြုပြီး configure လုပ်ထားတဲ့ တကယ့် server နှစ်ခုမှာ load လုပ်နေတဲ့ screenshot ကို ပူးတွဲပေးပါမယ်။ Linuxဒါပေမယ့် iptables (NAT4) နဲ့ nftables (NAT5) မှာ NAT ကို လုပ်ဆောင်နေပါတယ်။

မြန်နှုန်းမြင့် routing နှင့် NAT တွင် Linux

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

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

source: www.habr.com

DDoS ကာကွယ်ရေး၊ VPS VDS ဆာဗာများပါသည့် ဆိုက်များအတွက် ယုံကြည်စိတ်ချရသော hosting ကို ဝယ်ယူပါ။ 🔥 DDoS ကာကွယ်မှု၊ VPS VDS ဆာဗာများပါရှိသော ယုံကြည်စိတ်ချရသော ဝဘ်ဆိုက် hosting ကို ဝယ်ယူပါ | ProHoster