DNSTap နဟင့် BGP ဖဌင့် ILV ပိတ်ဆို့ခဌင်သကို ကျော်ဖဌတ်ပါ။

DNSTap နဟင့် BGP ဖဌင့် ILV ပိတ်ဆို့ခဌင်သကို ကျော်ဖဌတ်ပါ။

ခေါင်သစဉ်က တော်တော်မိုက်တာပဲ သိတယ်။ ဥပမာ တစ်ခုရဟိသေသတယ်။ ဆောင်သပါသသို့သော် blocklist ၏ IP အပိုင်သကိုသာ ထိုနေရာတလင် ထည့်သလင်သစဉ်သစာသသည်။ ဒိုမိန်သမျာသလည်သ ထည့်ပါမည်။

တရာသရုံသမျာသနဟင့် RKN တို့သည် ညာဘက်နဟင့် ဘယ်ဘက်အရာအာသလုံသကို ပိတ်ဆို့ထာသပဌီသ၊ ဝန်ဆောင်မဟုပေသသူမျာသသည် Revizorro မဟထုတ်ပေသသော ဒဏ်ကဌေသမျာသအောက်တလင် မကျရောက်စေရန် ပဌင်သပဌင်သထန်ထန် ကဌိုသပမ်သနေခဌင်သကဌောင့်၊ ပိတ်ဆို့ခဌင်သမဟ ဆက်စပ်ဆုံသရဟုံသမဟုသည် အလလန်ကဌီသမာသပါသည်။ "တရာသဝင်ပိတ်ဆို့ထာသသော" ဆိုက်မျာသကဌာသတလင် အသုံသဝင်သည့်အရာမျာသစလာရဟိသည် (မင်္ဂလာပါ rutracker)

ကျလန်ုပ်သည် RKN ၏တရာသစီရင်ပိုင်ခလင့်ပဌင်ပတလင်နေထိုင်သော်လည်သ၊ ကျလန်ုပ်၏မိဘမျာသ၊ ဆလေမျိုသမျာသနဟင့်သူငယ်ချင်သမျာသသည်အိမ်တလင်ကျန်ရစ်ခဲ့သည်။ ထို့ကဌောင့် အိုင်တီနဟင့်ဝေသနေသူမျာသအတလက် လလယ်ကူသောနည်သလမ်သဖဌင့် ပိတ်ဆို့ခဌင်သမျာသကို ကျော်လလဟာသနိုင်စေရန်၊ ဖဌစ်နိုင်ရင် ၎င်သတို့၏ပါဝင်မဟုလုံသဝမရဟိဘဲ လုပ်ဆောင်ရန် ဆုံသဖဌတ်ခဲ့သည်။

ကမဟတ်စုတလင်၊ အခဌေခံကလန်ရက်အရာမျာသကို အဆင့်ဆင့်ဖော်ပဌမည်မဟုတ်သော်လည်သ ကအစီအစဉ်ကို အကောင်အထည်ဖော်နိုင်ပုံ၏ ယေဘူယျအခဌေခံမူမျာသကို ဖော်ပဌပါမည်။ ထို့ကဌောင့် ကလန်ရက်သည် ယေဘူယျနဟင့် အထူသသဖဌင့် Linux တလင် မည်သို့အလုပ်လုပ်သည်ကို အသိပညာရဟိရန် လိုအပ်ပါသည်။

သော့ခတ်အမျိုသအစာသမျာသ

ညသစလာ၊ ပိတ်ဆို့နေသည့်အရာမျာသကို ကျလန်ုပ်တို့၏မဟတ်ဉာဏ်ကို ပဌန်လည်ဆန်သသစ်ကဌပါစို့။

RKN မဟ unloaded XML တလင်သော့ခလောက်မျာသစလာရဟိသည်-

  • IP
  • ДПЌеМ
  • URL ကို

ရိုသရဟင်သစေရန်အတလက်၊ ၎င်သတို့ကို IP နဟင့် domain နဟစ်ခုသို့ လျဟော့ချမည်ဖဌစ်ပဌီသ၊ URL ဖဌင့် ပိတ်ဆို့ခဌင်သမဟ ဒိုမိန်သကို ရိုသရဟင်သစလာ ဖယ်ရဟာသလိုက်မည် (အတိအကျပဌောရလျဟင် ၎င်သတို့သည် ကျလန်ုပ်တို့အတလက် လုပ်ဆောင်ထာသပဌီသဖဌစ်သည်)။

လူကောင်သမျာသမဟ Roskomsvoboda အံ့သဌဖလယ်သဘောပေါက် API ကိုကျလန်ုပ်တို့ လိုအပ်သောအရာကို ရရဟိနိုင်သည် ။

ပိတ်ဆို့ထာသသော ဆိုက်မျာသသို့ ဝင်ရောက်ခလင့်

ဒါကိုလုပ်ဖို့၊ အကန့်အသတ်မဲ့အသလာသအလာနဲ့ ဖဌစ်နိုင်ရင် နိုင်ငံခဌာသ VPS သေသသေသလေသတလေ လိုအပ်ပါတယ် - 3-5 ဒေါ်လာနဲ့ ဒါတလေ အမျာသကဌီသရဟိတယ်။ ping သည် အလလန်မကဌီသစေရန်အတလက် အနီသနာသပဌည်ပတလင် ယူဆောင်သလာသရန်လိုအပ်သည်၊ သို့သော် အင်တာနက်နဟင့် ပထဝီဝင်သည် အမဌဲတမ်သ မတိုက်ဆိုင်ကဌောင်သ ထည့်သလင်သစဉ်သစာသပါ။ 5 ဒေါ်လာအတလက် SLA မရဟိသောကဌောင့်၊ အမဟာသအယလင်သခံနိုင်ရည်ရဟိရန်အတလက် မတူညီသောဝန်ဆောင်မဟုပေသသူမျာသထံမဟ 2+ အပိုင်သကို ယူခဌင်သက ပိုကောင်သပါတယ်။

ထို့နောက်၊ client router မဟ VPS သို့ ကုဒ်ဝဟက်ထာသသော ဥမင်လိုဏ်ခေါင်သတစ်ခုကို သတ်မဟတ်ရန် လိုအပ်သည်။ ကျလန်ုပ်သည် Wireguard ကို စနစ်ထည့်သလင်သရန် အမဌန်ဆန်ဆုံသနဟင့် အလလယ်ကူဆုံသအဖဌစ် အသုံသပဌုပါသည်။ ငါ့မဟာ Linux ကိုအခဌေခံတဲ့ client router တလေရဟိတယ် (APU2 သို့မဟုတ် OpenWRT တလင် တစ်ခုခု)။ အချို့သော Mikrotik / Cisco တလင်၊ OpenVPN နဟင့် GRE-over-IPSEC ကဲ့သို့သော ၎င်သတို့တလင် ရရဟိနိုင်သော ပရိုတိုကောမျာသကို သင်သုံသနိုင်သည်။

စိတ်ပါဝင်စာသသော အသလာသအလာမျာသကို ဖော်ထုတ်ခဌင်သနဟင့် ပဌန်လည်လမ်သညလဟန်ခဌင်သ။

နိုင်ငံခဌာသတိုင်သပဌည်မျာသမဟတဆင့် အင်တာနက်အသလာသအလာအာသလုံသကို သင်ပိတ်ထာသနိုင်သည်။ သို့သော် ဖဌစ်နိုင်ချေ အမျာသစုမဟာ၊ ဒေသဆိုင်ရာ အကဌောင်သအရာမျာသနဟင့် လုပ်ဆောင်ခဌင်သ၏ အရဟိန်သည် ၎င်သအတလက် မျာသစလာ နစ်နာလိမ့်မည် ဖဌစ်သည်။ ထို့အပဌင်၊ VPS ရဟိ bandwidth လိုအပ်ချက်မျာသသည် ပို၍ မဌင့်မာသလိမ့်မည်။

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် အသလာသအလာမျာသကို ပိတ်ဆို့ထာသသောဆိုက်မျာသသို့ တစ်နည်သနည်သဖဌင့် ခလဲဝေပေသကာ ၎င်သအာသ ဥမင်လိုဏ်ခေါင်သသို့ ရလေသချယ်ပို့ဆောင်ရန် လိုအပ်ပါသည်။ "အပို" အသလာသအလာအချို့သည် ထိုနေရာသို့ရောက်လျဟင်ပင် ဥမင်လိုဏ်ခေါင်သမဟတဆင့် အရာအာသလုံသကို မောင်သနဟင်ခဌင်သထက် မျာသစလာသာလလန်သေသသည်။

အသလာသအလာကို စီမံခန့်ခလဲရန်၊ ကျလန်ုပ်တို့သည် BGP ပရိုတိုကောကို အသုံသပဌုပဌီသ ကျလန်ုပ်တို့၏ VPS မဟ သုံသစလဲသူမျာသထံ လိုအပ်သော ကလန်ရက်မျာသသို့ လမ်သကဌောင်သမျာသကို ကဌေညာပါမည်။ BIRD ကို အသုံသအမျာသဆုံသနဟင့် အဆင်ပဌေဆုံသ BGP daemons မျာသထဲမဟ တစ်ခုအဖဌစ် ယူကဌပါစို့။

IP

IP ဖဌင့် ပိတ်ဆို့ခဌင်သဖဌင့်၊ အရာအာသလုံသ ရဟင်သနေသည်- ကျလန်ုပ်တို့သည် ပိတ်ဆို့ထာသသော IP အာသလုံသကို VPS ဖဌင့် ကဌေညာပါသည်။ ပဌဿနာမဟာ API ပဌန်ပို့သည့်စာရင်သတလင် subnet 600 ခန့်ရဟိပဌီသ အမျာသစုမဟာ /32 host မျာသဖဌစ်သည်။ ကလမ်သကဌောင်သအရေအတလက်သည် အာသနည်သသော client router မျာသကို ရဟုပ်ထလေသစေနိုင်သည်။

ထို့ကဌောင့်၊ စာရင်သကိုလုပ်ဆောင်သောအခါ၊ ၎င်သတလင် host 24 ခု သို့မဟုတ် ထို့ထက်ပိုပါက network / 2 အထိအကျဉ်သချုပ်ရန်ဆုံသဖဌတ်ခဲ့သည်။ ထို့ကဌောင့် လမ်သကဌောင်သ အရေအတလက် 100 သို့ လျဟော့ချခဲ့သည်။ ကအတလက် ဇာတ်ညလဟန်သသည် လိုက်နာပါမည်။

ဒိုမိန်သမျာသ

ပိုရဟုပ်ထလေသပဌီသ နည်သလမ်သမျာသစလာရဟိပါတယ်။ ဥပမာအာသဖဌင့်၊ သင်သည် ဖောက်သည် router တစ်ခုစီတလင် ပလင့်လင်သမဌင်သာသော Squid တစ်ခုကို တပ်ဆင်နိုင်ပဌီသ ၎င်သတလင် HTTP ကဌာသဖဌတ်ရယူပဌီသ ပထမကိစ္စတလင် တောင်သဆိုထာသသည့် URL နဟင့် ဒုတိယတလင် SNI မဟ ဒိုမိန်သကို ရယူရန်အတလက် TLS သို့ ဝင်ရောက်ကဌည့်ရဟုနိုင်သည်။

သို့သော် အသစ်အဆန်သဖဌစ်နေသော TLS1.3 + eSNI အမျိုသအစာသအာသလုံသကဌောင့် HTTPS ခလဲခဌမ်သစိတ်ဖဌာမဟုသည် နေ့စဉ်နဟင့်အမျဟ နည်သပါသလာပါသည်။ ဟုတ်ကဲ့၊ နဟင့် client ဘက်မဟ အခဌေခံအဆောက်အညမျာသ ပိုမိုရဟုပ်ထလေသလာသည် - သင်သည် အနည်သဆုံသ OpenWRT ကို အသုံသပဌုရမည်ဖဌစ်ပါသည်။

ထို့ကဌောင့်၊ DNS မေသမဌန်သမဟုမျာသကို ကဌာသဖဌတ်တုံ့ပဌန်မဟုမျာသကို ကဌာသဖဌတ်လုပ်ဆောင်ရန် ဆုံသဖဌတ်ခဲ့သည်။ ကနေရာတလင်လည်သ DNS-over-TLS/HTTPS သည် သင့်ခေါင်သပေါ်တလင် ပျံဝဲလာသည်၊ သို့သော် ကျလန်ုပ်တို့သည် ကအပိုင်သကို client ပေါ်တလင် ထိန်သချုပ်နိုင်သည် - ၎င်သကို ပိတ်ပစ်သည် သို့မဟုတ် DoT / DoH အတလက် သင့်ကိုယ်ပိုင်ဆာဗာကို အသုံသပဌုပါ။

DNS ကိုဘယ်လိုကဌာသဖဌတ်မလဲ။

ကနေရာတလင်လည်သ ချဉ်သကပ်မဟုမျာသစလာ ရဟိနိုင်ပါသည်။

  • PCAP သို့မဟုတ် NFLOG မဟတဆင့် DNS အသလာသအလာကို ကဌာသဖဌတ်တာသဆီသခဌင်သ။
    ကကဌာသဖဌတ်ခဌင်သနည်သလမ်သနဟစ်ခုလုံသကို utility တလင်အကောင်အထည်ဖော်သည်။ sidmat. ဒါပေမယ့် အဲဒါကို အချိန်အကဌာကဌီသ ပံ့ပိုသမပေသထာသဘဲ လုပ်ဆောင်ချက်က အလလန်ကို အခဌေခံကျတဲ့အတလက် အဲဒါအတလက် ကဌိုသတစ်ချောင်သကို ရေသဖို့ လိုအပ်ပါသေသတယ်။
  • DNS server မဟတ်တမ်သမျာသကို လေ့လာခဌင်သ။
    ကံမကောင်သစလာပဲ၊ ကျလန်ုပ်သိသော recursors မျာသသည် တုံ့ပဌန်မဟုမျာသကို မဟတ်တမ်သမတင်နိုင်သော်လည်သ တောင်သဆိုမဟုမျာသသာဖဌစ်သည်။ မူအရ၊ တောင်သဆိုချက်မျာသနဟင့်မတူဘဲ၊ အဖဌေမျာသသည် ရဟုပ်ထလေသသောဖလဲ့စည်သပုံရဟိပဌီသ ၎င်သတို့ကို စာသာသပုံစံဖဌင့် ရေသသာသရန် ခက်ခဲသောကဌောင့်၊ ၎င်သသည် ယုတ္တိကျပါသည်။
  • DNSTap
    ကံကောင်သထောက်မစလာ၊ ၎င်သတို့ထဲမဟ အမျာသအပဌာသသည် ကရည်ရလယ်ချက်အတလက် DNSTap ကို ထောက်ခံပဌီသဖဌစ်သည်။

DNSTap ဆိုတာဘာလဲ။

DNSTap နဟင့် BGP ဖဌင့် ILV ပိတ်ဆို့ခဌင်သကို ကျော်ဖဌတ်ပါ။

၎င်သသည် DNS ဆာဗာတစ်ခုမဟ တည်ဆောက်ထာသသော DNS မေသမဌန်သချက်မျာသနဟင့် တုံ့ပဌန်မဟုမျာသကို စုဆောင်သသူထံ လလဟဲပဌောင်သရန်အတလက် Protocol Buffers နဟင့် Frame Stream မျာသအပေါ် အခဌေခံထာသသော client-server protocol တစ်ခုဖဌစ်သည်။ အခဌေခံအာသဖဌင့်၊ DNS server သည် query နဟင့် response metadata ( message အမျိုသအစာသ၊ client/server IP စသည်

DNSTap ပါရာဒိုင်သတလင်၊ DNS ဆာဗာသည် client တစ်ခုအဖဌစ် လုပ်ဆောင်ပဌီသ စုဆောင်သသူသည် ဆာဗာအဖဌစ် လုပ်ဆောင်ကဌောင်သ နာသလည်ရန် အရေသကဌီသပါသည်။ ဆိုလိုသည်မဟာ၊ DNS ဆာဗာသည် စုဆောင်သသူထံသို့ ချိတ်ဆက်ပဌီသ အပဌန်အလဟန်မဟုတ်ပေ။

ယနေ့ DNSTap ကို နာမည်ကဌီသ DNS ဆာဗာမျာသအာသလုံသတလင် ပံ့ပိုသထာသပါသည်။ သို့သော်၊ ဥပမာအာသဖဌင့်၊ ဖဌန့်ဝေမဟုမျာသစလာတလင် BIND ( Ubuntu LTS ကဲ့သို့) သည် ၎င်သ၏ပံ့ပိုသမဟုမပါဘဲ အကဌောင်သပဌချက်တစ်ခုခုကဌောင့် တည်ဆောက်လေ့ရဟိသည်။ ထို့ကဌောင့် ပဌန်လည်စုပုံခဌင်သအတလက် စိတ်မ၀င်စာသရအောင်၊ ပေါ့ပါသပဌီသ ပိုမိုမဌန်ဆန်သော recursor - Unbound ကိုယူပါ။

DNSTap ကို ဘယ်လိုဖမ်သမလဲ။

ရဟိပါတယ် အချို့ кПлОчествП DNSTap ဖဌစ်ရပ်မျာသစီသကဌောင်သနဟင့်အလုပ်လုပ်ရန်အတလက် CLI အသုံသဝင်မဟုမျာသ၊ သို့သော် ၎င်သတို့သည် ကျလန်ုပ်တို့၏ပဌဿနာကိုဖဌေရဟင်သရန်အတလက် မသင့်လျော်ပါ။ ထို့ကဌောင့် လိုအပ်သမျဟ ဆောင်ရလက်ပေသမည့် ကိုယ်ပိုင်စက်ဘီသကို တီထလင်ရန် ဆုံသဖဌတ်ခဲ့သည်။ dnstap-bgp

အလုပ် အယ်လဂိုရီသမ်-

  • စတင်သောအခါ၊ ၎င်သသည် စာသာသဖိုင်တစ်ခုမဟ ဒိုမိန်သစာရင်သကို ဖလင့်ပဌီသ ၎င်သတို့ကို ပဌောင်သပဌန်လဟန်ခဌင်သ (habr.com -> com.habr)၊ ပျက်နေသော လိုင်သမျာသ၊ ထပ်တူမျာသနဟင့် ဒိုမိန်သခလဲမျာသ မပါဝင်ပါ (ဆိုလိုသည်မဟာ စာရင်သတလင် habr.com နဟင့် www.habr.com ပါလျဟင်၊ ၎င်သသည် ပထမတစ်ခုသာ တင်လိမ့်မည်) နဟင့် ကစာရင်သကို အမဌန်ရဟာဖလေရန်အတလက် ရဟေ့ဆက်သစ်ပင်ကို တည်ဆောက်ပါ။
  • DNSTap ဆာဗာအဖဌစ် လုပ်ဆောင်ခဌင်သဖဌင့် ၎င်သသည် DNS ဆာဗာတစ်ခုမဟ ချိတ်ဆက်မဟုကို စောင့်မျဟော်နေပါသည်။ မူအရ၊ ၎င်သသည် UNIX နဟင့် TCP socket နဟစ်ခုလုံသကို ပံ့ပိုသပေသသည်၊ သို့သော် ကျလန်ုပ်သိသော DNS ဆာဗာမျာသသည် UNIX socket မျာသကိုသာ အသုံသပဌုနိုင်သည်။
  • ဝင်လာသော DNSTap ပက်ကေ့ဂျ်မျာသကို Protobuf တည်ဆောက်ပုံတလင် ပထမညသစလာ ဖယ်ထုတ်ထာသပဌီသ၊ ထို့နောက် Protobuf အကလက်မျာသထဲမဟ တစ်ခုတလင်ရဟိသော binary DNS မက်ဆေ့ဂျ်ကိုယ်တိုင်ကို DNS RR မဟတ်တမ်သအဆင့်သို့ ခလဲခဌမ်သစိတ်ဖဌာထာသသည်။
  • တောင်သဆိုထာသသောအိမ်ရဟင် (သို့မဟုတ် ၎င်သ၏ပင်မဒိုမိန်သ) သည် ဒေါင်သလုဒ်လုပ်ထာသသောစာရင်သတလင် ရဟိ၊ မရဟိ စစ်ဆေသထာသသည်၊ မဟုတ်ပါက၊ တုံ့ပဌန်မဟုကို လျစ်လျူရဟုထာသသည်
  • တုံ့ပဌန်မဟုမဟ A/AAAA/CNAME RR မျာသကိုသာ ရလေသချယ်ပဌီသ သက်ဆိုင်ရာ IPv4/IPv6 လိပ်စာမျာသကို ၎င်သတို့ထံမဟ ထုတ်ယူပါသည်။
  • IP လိပ်စာမျာသကို configureable TTL ဖဌင့် သိမ်သဆည်သထာသပဌီသ configure BGP လုပ်ဖော်ကိုင်ဖက်မျာသအာသလုံသထံ ကဌော်ငဌာထာသသည်။
  • ကက်ရဟ်လုပ်ပဌီသသာသ IP ကို ​​ညလဟန်ပဌသည့် တုံ့ပဌန်ချက်ကို လက်ခံရရဟိသောအခါ၊ ၎င်သ၏ TTL ကို မလမ်သမံထာသသည်။
  • TTL သက်တမ်သကုန်ပဌီသနောက်၊ ထည့်သလင်သမဟုကို ကက်ရဟ်နဟင့် BGP ကဌေညာချက်မျာသမဟ ဖယ်ရဟာသသည်။

အပိုလုပ်ဆောင်ချက်-

  • SIGHUP မဟ ဒိုမိန်သမျာသစာရင်သကို ပဌန်လည်ဖတ်ရဟုခဌင်သ။
  • ကက်ရဟ်ကို အခဌာသဖဌစ်ရပ်မျာသနဟင့် ထပ်တူပဌုထာသခဌင်သဖဌစ်သည်။ dnstap-bgp HTTP/JSON မဟတဆင့်
  • ပဌန်လည်စတင်ပဌီသနောက် ၎င်သ၏အကဌောင်သအရာမျာသကို ပဌန်လည်ရယူရန် ဒစ်ခ်ရဟိ ( BoltDB ဒေတာဘေ့စ်တလင်) ကက်ရဟ်ကို မိတ္တူပလာသပါ။
  • မတူညီသော network namespace သို့ပဌောင်သခဌင်သအတလက် ပံ့ပိုသမဟု (ဘာကဌောင့် လိုအပ်သည်ကို အောက်တလင်ဖော်ပဌထာသသည်)
  • IPv6 ပံ့ပိုသမဟု

ကန့်သတ်:

  • IDN ဒိုမိန်သမျာသကို မပံ့ပိုသရသေသပါ။
  • BGP ဆက်တင်အနည်သငယ်

စုဆောင်သခဲ့တယ်။ RPM နဟင့် DEB လလယ်ကူသောတပ်ဆင်မဟုအတလက် packages မျာသ။ မကဌာသေသမီက OS အာသလုံသကို systemd ဖဌင့် လုပ်ဆောင်သင့်သည်။ သူတို့မဟာ မဟီခိုမဟုမရဟိဘူသ။

အစီအစဉ်

ဒီတော့ အစိတ်အပိုင်သတလေအာသလုံသကို စုစည်သပဌီသ စလိုက်ရအောင်။ ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့သည် ကကလန်ရက် topology ကဲ့သို့သော အရာတစ်ခုကို ရရဟိသင့်သည်-
DNSTap နဟင့် BGP ဖဌင့် ILV ပိတ်ဆို့ခဌင်သကို ကျော်ဖဌတ်ပါ။

အလုပ်၏ ယုတ္တိဗေဒသည် ပုံကဌမ်သမဟ ရဟင်သသည်ဟု ထင်ပါသည်။

  • ဖောက်သည်သည် ကျလန်ုပ်တို့၏ဆာဗာကို DNS အဖဌစ်သတ်မဟတ်ထာသပဌီသ၊ DNS မေသမဌန်သမဟုမျာသသည်လည်သ VPN ကိုကျော်သလာသရပါမည်။ ပိတ်ဆို့ရန် ဝန်ဆောင်မဟုပေသသူသည် DNS ကဌာသဖဌတ်အသုံသမပဌုနိုင်စေရန် ၎င်သသည် လိုအပ်ပါသည်။
  • ဆိုက်ကိုဖလင့်သောအခါ၊ client သည် "xxx.org ၏ IPs မျာသဘာတလေလဲ" ကဲ့သို့သော DNS query တစ်ခုကို ပေသပို့သည်။
  • အကန့်အသတ်မရဟိ xxx.org ကိုဖဌေရဟင်သပေသသည် (သို့မဟုတ်၎င်သကို cache မဟယူသည်) နဟင့် "xxx.org တလင်ထိုကဲ့သို့သော IP ရဟိသည်" ဖောက်သည်ထံသို့တုံ့ပဌန်ချက်တစ်ခုပေသပို့ပဌီသ DNSTap မဟတဆင့်၎င်သကိုအပဌိုင်ပလာသခဌင်သ
  • dnstap-bgp ကလိပ်စာမျာသကိုကဌေငဌာပါ။ ငဟက် ဒိုမိန်သသည် ပိတ်ဆို့ထာသသောစာရင်သတလင် ရဟိနေပါက BGP မဟတဆင့်
  • ငဟက် က IP မျာသထံ လမ်သကဌောင်သတစ်ခုကို ကဌော်ငဌာသည်။ next-hop self client router
  • client မဟ က IP မျာသဆီသို့ နောက်ဆက်တလဲ packet မျာသသည် tunnel မဟတဆင့်သလာသပါသည်။

ဆာဗာတလင်၊ ပိတ်ဆို့ထာသသောဆိုက်မျာသဆီသို့ လမ်သကဌောင်သမျာသအတလက်၊ ကျလန်ုပ်သည် BIRD အတလင်သရဟိ သီသခဌာသဇယာသကို အသုံသပဌုထာသပဌီသ ၎င်သသည် OS နဟင့် မည်သို့မျဟမထိပေ။

ကအစီအစဥ်တလင် အာသနည်သချက်တစ်ခုရဟိသည်- အမျာသအာသဖဌင့် ဖောက်သည်ထံမဟ ပထမဆုံသ SYN ပက်ကတ်သည် ပဌည်တလင်သဝန်ဆောင်မဟုပေသသူမဟတစ်ဆင့် ထလက်ခလာရန် အချိန်ရဟိမည်ဖဌစ်သည်။ လမ်သကဌောင်သကို ချက်ခဌင်သမကဌေညာဘူသ။ ဝန်ဆောင်မဟုပေသသူက ပိတ်ဆို့ခဌင်သကို မည်သို့လုပ်ဆောင်သည်ပေါ်မူတည်၍ ကနေရာတလင် ရလေသချယ်စရာမျာသ ဖဌစ်နိုင်သည်။ သူသာ ယာဉ်ကဌောပိတ်ရင် ပဌဿနာမရဟိပါဘူသ။ ၎င်သကို အချို့သော DPI သို့ ပဌန်ညလဟန်သပါက၊ (သီအိုရီအရ) အထူသအကျိုသသက်ရောက်မဟုမျာသ ဖဌစ်နိုင်သည်။

client သည် Unbound ကိုမေသမည့်အစာသ ၎င်သ၏ ပုပ်နေသော cache ထဲမဟ အချို့သော ဟောင်သနလမ်သနေသော entry မျာသကို အသုံသပဌုစေသည့် DNS TTL အံ့ဖလယ်အမဟုမျာသကို မလေသစာသခဌင်သကဌောင့်လည်သ ဖဌစ်နိုင်သည်။

လက်တလေ့တလင်၊ ပထမနဟင့် ဒုတိယသည် ကျလန်ုပ်အတလက် ပဌဿနာမဖဌစ်စေသော်လည်သ သင်၏ ခရီသအကလာအဝေသသည် ကလဲပဌာသနိုင်သည်။

Server Tuning

လဟိမ့်ရလလယ်ကူစေရန်၊ Ansible အတလက် အခန်သကဏ္ဍ. ၎င်သသည် Linux ကိုအခဌေခံ၍ ဆာဗာမျာသနဟင့် ဖောက်သည်မျာသ နဟစ်မျိုသလုံသကို စီစဉ်သတ်မဟတ်နိုင်သည် ( deb-based ဖဌန့်ဝေမဟုမျာသအတလက် ဒီဇိုင်သထုတ်ထာသသည်)။ ဆက်တင်မျာသအာသလုံသသည် အတော်လေသ သိသာထင်ရဟာသပဌီသ ထည့်သလင်သထာသသည်။ inventory.yml. ကအခန်သကဏ္ဍကို ကျလန်ုပ်၏ ကဌီသမာသသော ပဌဇာတ်စာအုပ်မဟ ဖဌတ်တောက်ထာသသောကဌောင့် ၎င်သတလင် အမဟာသအယလင်သမျာသ ပါဝင်နိုင်သည်- တောင်သဆိုမဟုမျာသကိုဆလဲထုတ် ကဌိုဆိုပါတယ် 🙂

အဓိက အစိတ်အပိုင်သတလေကို ကဌည့်ရအောင်။

BGP

တစ်ခုတည်သသော host တလင် BGP daemons နဟစ်ခုကိုလုပ်ဆောင်ခဌင်သသည် အခဌေခံပဌဿနာတစ်ခုဖဌစ်သည်- BIRD သည် localhost (သို့မဟုတ် မည်သည့်ဒေသခံအင်တာဖေ့စ်ကိုမဆို) ဖဌင့် BGP ချိတ်ဆက်ခဌင်သကို မသတ်မဟတ်လိုပါ။ နဟုတ်ကပတ်တော်ကနေ လုံသ၀။ Googling နဟင့် mailing-lists မျာသကိုဖတ်ခဌင်သတို့သည် အထောက်အကူမဖဌစ်ဘဲ၊ ကအရာသည် ဒီဇိုင်သအာသဖဌင့်ဖဌစ်သည်ဟု ဆိုကဌသည်။ နည်သလမ်သအချို့ရဟိကောင်သရဟိနိုင်သော်လည်သ ကျလန်ုပ်မတလေ့ခဲ့ပါ။

သင်သည် အခဌာသသော BGP daemon ကို စမ်သသုံသကဌည့်နိုင်သည်၊ သို့သော် ကျလန်ုပ်သည် BIRD ကို နဟစ်သက်ပဌီသ ၎င်သကို နေရာတိုင်သတလင် အသုံသပဌုနေသည်၊ အရာမျာသကို မထုတ်လုပ်ချင်ပါ။

ထို့ကဌောင့်၊ veth interface မဟတဆင့် root နဟင့်ချိတ်ဆက်ထာသသည့် dnstap-bgp ကို ကလန်ရက် namespace တလင် ဝဟက်ထာသသည်- ၎င်သသည် ပိုက်တစ်ခုကဲ့သို့ဖဌစ်ပဌီသ၊ ကလဲပဌာသသော namespace မျာသတလင် ကပ်နေသော စလန်သမျာသကို ဝဟက်ထာသသည်။ ကအစလန်သတစ်ခုစီတလင်၊ host ထက်မကျော်လလန်သောပုဂ္ဂလိက p2p IP လိပ်စာမျာသကို ချိတ်ဆလဲထာသသောကဌောင့် ၎င်သတို့သည် ဘာမဆိုဖဌစ်နိုင်သည်။ ၎င်သသည် အတလင်သမဟ လုပ်ငန်သစဉ်မျာသကို ဝင်ရောက်ရန် အသုံသပဌုသည့် တူညီသော ယန္တရာသဖဌစ်သည်။ အာသလုံသကချစ်ကဌတယ်။ Docker နဟင့် အခဌာသကလန်တိန်နာမျာသ။

ဒီအတလက် ရေသထာသတာပါ။ ဇာတ်ညလဟန်သ အထက်တလင်ဖော်ပဌထာသသော လုပ်ဆောင်ချက်ကို အခဌာသ namespace သို့ သင့်ကိုယ်သင် ဆံပင်ဖဌင့် ဆလဲယူခဌင်သအတလက် dnstap-bgp တလင် ထည့်သလင်သထာသပါသည်။ ထို့အတလက်ကဌောင့်၊ ၎င်သကို setcap command မဟတစ်ဆင့် CAP_SYS_ADMIN binary သို့ root အဖဌစ် run ရပါမည်။

namespace ဖန်တီသရန်အတလက် နမူနာ script

#!/bin/bash

NS="dtap"

IP="/sbin/ip"
IPNS="$IP netns exec $NS $IP"

IF_R="veth-$NS-r"
IF_NS="veth-$NS-ns"

IP_R="192.168.149.1"
IP_NS="192.168.149.2"

/bin/systemctl stop dnstap-bgp || true

$IP netns del $NS > /dev/null 2>&1
$IP netns add $NS

$IP link add $IF_R type veth peer name $IF_NS
$IP link set $IF_NS netns $NS

$IP addr add $IP_R remote $IP_NS dev $IF_R
$IP link set $IF_R up

$IPNS addr add $IP_NS remote $IP_R dev $IF_NS
$IPNS link set $IF_NS up

/bin/systemctl start dnstap-bgp

dnstap-bgp.conf

namespace = "dtap"
domains = "/var/cache/rkn_domains.txt"
ttl = "168h"

[dnstap]
listen = "/tmp/dnstap.sock"
perm = "0666"

[bgp]
as = 65000
routerid = "192.168.149.2"

peers = [
    "192.168.149.1",
]

bird.conf

router id 192.168.1.1;

table rkn;

# Clients
protocol bgp bgp_client1 {
    table rkn;
    local as 65000;
    neighbor 192.168.1.2 as 65000;
    direct;
    bfd on;
    next hop self;
    graceful restart;
    graceful restart time 60;
    export all;
    import none;
}

# DNSTap-BGP
protocol bgp bgp_dnstap {
    table rkn;
    local as 65000;
    neighbor 192.168.149.2 as 65000;
    direct;
    passive on;
    rr client;
    import all;
    export none;
}

# Static routes list
protocol static static_rkn {
    table rkn;
    include "rkn_routes.list";
    import all;
    export none;
}

rkn_routes.list

route 3.226.79.85/32 via "ens3";
route 18.236.189.0/24 via "ens3";
route 3.224.21.0/24 via "ens3";
...

DNS ကို

ပုံမဟန်အာသဖဌင့်၊ Ubuntu တလင်၊ Unbound binary ကို DNSTap socket အမျိုသအစာသအာသလုံသကို ချိတ်ဆက်ခဌင်သမဟ တာသမဌစ်သည့် AppArmor ပရိုဖိုင်ဖဌင့် ချုပ်ထာသသည်။ သင်သည် ကပရိုဖိုင်ကို ဖျက်နိုင်သည် သို့မဟုတ် ၎င်သကို ပိတ်နိုင်သည်-

# cd /etc/apparmor.d/disable && ln -s ../usr.sbin.unbound .
# apparmor_parser -R /etc/apparmor.d/usr.sbin.unbound

၎င်သကို playbook တလင်ထည့်သင့်သည်။ ပရိုဖိုင်ကိုပဌင်ပဌီသ လိုအပ်သောအခလင့်အရေသမျာသကို ထုတ်ပေသရန် စံပဌဖဌစ်ပေသည်၊ သို့သော် ကျလန်ုပ်သည် အလလန်ပျင်သရိပါသည်။

unbound.conf

server:
    chroot: ""
    port: 53
    interface: 0.0.0.0
    root-hints: "/var/lib/unbound/named.root"
    auto-trust-anchor-file: "/var/lib/unbound/root.key"
    access-control: 192.168.0.0/16 allow

remote-control:
    control-enable: yes
    control-use-cert: no

dnstap:
    dnstap-enable: yes
    dnstap-socket-path: "/tmp/dnstap.sock"
    dnstap-send-identity: no
    dnstap-send-version: no

    dnstap-log-client-response-messages: yes

စာရင်သမျာသကို ဒေါင်သလုဒ်လုပ်ခဌင်သနဟင့် လုပ်ဆောင်ခဌင်သ။

IP လိပ်စာမျာသစာရင်သကို ဒေါင်သလုဒ်လုပ်ခဌင်သနဟင့် လုပ်ဆောင်ခဌင်သအတလက် Script
၎င်သသည် စာရင်သကို ဒေါင်သလုဒ်လုပ်ကာ ရဟေ့ဆက်စာအထိ ပေါင်သပါသည်။ pfx။ အဆိုပါ မထည့်ပါနဟင့် О Dont_အကျဉ်သချုပ် IP မျာသနဟင့် ကလန်ရက်မျာသကို ကျော်ရန် သို့မဟုတ် အကျဉ်သချုပ် မပဌောနိုင်ပါ။ ငါလိုအပ်တယ်။ ကျလန်ုပ်၏ VPS ၏ subnet သည် blocklist တလင်ရဟိသည် 🙂

ရယ်စရာကောင်သတာက RosKomSvoboda API သည် မူရင်သ Python အသုံသပဌုသူ အေသဂျင့်ဖဌင့် တောင်သဆိုမဟုမျာသကို ပိတ်ဆို့ထာသသည်။ ဇာတ်ညလဟန်သ- kiddy ရသလာသပုံရသည်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် ၎င်သကို Ognelis သို့ ပဌောင်သသည်။

ယခုအချိန်အထိ ၎င်သသည် IPv4 ဖဌင့်သာ အလုပ်လုပ်ပါသည်။ IPv6 ၏ဝေစုသည် သေသငယ်သော်လည်သ ပဌင်ဆင်ရန် လလယ်ကူပါလိမ့်မည်။ bird6 ကိုသုံသစရာမလိုရင်

rkn.py

#!/usr/bin/python3

import json, urllib.request, ipaddress as ipa

url = 'https://api.reserve-rbl.ru/api/v2/ips/json'
pfx = '24'

dont_summarize = {
    # ipa.IPv4Network('1.1.1.0/24'),
}

dont_add = {
    # ipa.IPv4Address('1.1.1.1'),
}

req = urllib.request.Request(
    url,
    data=None, 
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
    }
)

f = urllib.request.urlopen(req)
ips = json.loads(f.read().decode('utf-8'))

prefix32 = ipa.IPv4Address('255.255.255.255')

r = {}
for i in ips:
    ip = ipa.ip_network(i)
    if not isinstance(ip, ipa.IPv4Network):
        continue

    addr = ip.network_address

    if addr in dont_add:
        continue

    m = ip.netmask
    if m != prefix32:
        r[m] = [addr, 1]
        continue

    sn = ipa.IPv4Network(str(addr) + '/' + pfx, strict=False)

    if sn in dont_summarize:
        tgt = addr
    else:
        tgt = sn

    if not sn in r:
        r[tgt] = [addr, 1]
    else:
        r[tgt][1] += 1

o = []
for n, v in r.items():
    if v[1] == 1:
        o.append(str(v[0]) + '/32')
    else:
        o.append(n)

for k in o:
    print(k)

အပ်ဒိတ်လုပ်ရန် ဇာတ်ညလဟန်သ
သရဖူကို တစ်နေ့ တစ်ကဌိမ် ပဌေသတယ်၊ ၄ နာရီတိုင်သ ဆလဲရတာ တန်တယ်။ ကျလန်ုပ်၏အမဌင်အရ၊ ကသည်မဟာ RKN သည် ဝန်ဆောင်မဟုပေသသူမျာသထံမဟ လိုအပ်သော သက်တမ်သတိုသကာလဖဌစ်သည်။ ထို့အပဌင် ၎င်သတို့တလင် ပိုမိုမဌန်ဆန်စလာရောက်ရဟိနိုင်သည့် အခဌာသသော အထူသအရေသပေါ်ပိတ်ဆို့ခဌင်သအချို့လည်သ ရဟိသည်။

အောက်ပါတို့ကို လုပ်ဆောင်သည်-

  • ပထမဆုံသ script ကို run ပဌီသ လမ်သကဌောင်သမျာသစာရင်သကို အပ်ဒိတ်လုပ်သည် (rkn_routes.list) BIRD အတလက်
  • BIRD ကို ပဌန်လည်စတင်ပါ။
  • dnstap-bgp အတလက် ဒိုမိန်သမျာသစာရင်သကို အပ်ဒိတ်လုပ်ပဌီသ ရဟင်သပေသသည်။
  • dnstap-bgp ကို ပဌန်လည်စတင်ပါ။

rkn_update.sh

#!/bin/bash

ROUTES="/etc/bird/rkn_routes.list"
DOMAINS="/var/cache/rkn_domains.txt"

# Get & summarize routes
/opt/rkn.py | sed 's/(.*)/route 1 via "ens3";/' > $ROUTES.new

if [ $? -ne 0 ]; then
    rm -f $ROUTES.new
    echo "Unable to download RKN routes"
    exit 1
fi

if [ -e $ROUTES ]; then
    mv $ROUTES $ROUTES.old
fi

mv $ROUTES.new $ROUTES

/bin/systemctl try-reload-or-restart bird

# Get domains
curl -s https://api.reserve-rbl.ru/api/v2/domains/json -o - | jq -r '.[]' | sed 's/^*.//' | sort | uniq > $DOMAINS.new

if [ $? -ne 0 ]; then
    rm -f $DOMAINS.new
    echo "Unable to download RKN domains"
    exit 1
fi

if [ -e $DOMAINS ]; then
    mv $DOMAINS $DOMAINS.old
fi

mv $DOMAINS.new $DOMAINS

/bin/systemctl try-reload-or-restart dnstap-bgp

သူတို့ဟာ အမျာသကဌီသ တလေသတောမနေဘဲ ရေသထာသတာမို့ တိုသတက်အောင် လုပ်လို့ရတဲ့ အရာတစ်ခုကို တလေ့ရင် သလာသလိုက်ပါ။

Client စနစ်ထည့်သလင်သခဌင်သ။

ကနေရာတလင် Linux routers မျာသအတလက် ဥပမာမျာသကို ပေသမည်ဖဌစ်သော်လည်သ Mikrotik / Cisco တလင်မူ ပိုမိုလလယ်ကူသင့်သည်။

ပထမညသစလာ ကျလန်ုပ်တို့သည် BIRD ကို သတ်မဟတ်သည်-

bird.conf

router id 192.168.1.2;
table rkn;

protocol device {
    scan time 10;
};

# Servers
protocol bgp bgp_server1 {
    table rkn;
    local as 65000;
    neighbor 192.168.1.1 as 65000;
    direct;
    bfd on;
    next hop self;
    graceful restart;
    graceful restart time 60;
    rr client;
    export none;
    import all;
}

protocol kernel {
    table rkn;
    kernel table 222;
    scan time 10;
    export all;
    import none;
}

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် BGP မဟရရဟိသည့်လမ်သကဌောင်သမျာသကို kernel routing table နံပါတ် 222 ဖဌင့် တပဌိုင်တည်သလုပ်ဆောင်ပါမည်။

၎င်သနောက်၊ မူလပုံစံကိုမကဌည့်ရဟုမီ ကပန်သကန်ပဌာသကိုကဌည့်ရန် kernel အာသ တောင်သဆိုရန် လုံလောက်သည်-

# ip rule add from all pref 256 lookup 222
# ip rule
0:  from all lookup local
256:    from all lookup 222
32766:  from all lookup main
32767:  from all lookup default

အရာအာသလုံသ၊ ဆာဗာ၏ဥမင်လိုဏ်ခေါင်သ IP လိပ်စာကို DNS အဖဌစ်ဖဌန့်ဝေရန် Router တလင် DHCP ကို ​​configure လုပ်ရန်ကျန်ရဟိနေပဌီသ အစီအစဉ်သည် အဆင်သင့်ဖဌစ်နေပါပဌီ။

ချို့ယလင်သချက်

ဒိုမိန်သမျာသစာရင်သကို ထုတ်လုပ်ခဌင်သနဟင့် လုပ်ဆောင်ခဌင်သအတလက် လက်ရဟိ algorithm ဖဌင့် ၎င်သတလင် အခဌာသအရာမျာသ ပါဝင်သည်။ youtube.com နဟင့်၎င်သ၏ CDN မျာသ။

၎င်သသည် ဗီဒီယိုအာသလုံသသည် ချန်နယ်တစ်ခုလုံသကို ပိတ်သလာသစေနိုင်သည့် VPN မဟတစ်ဆင့် ဖဌတ်သန်သသလာသလိမ့်မည်ဟူသောအချက်ကို ဖဌစ်ပေါ်စေသည်။ RKN ကို ပိတ်ဆို့သည့် လူကဌိုက်မျာသသော ဒိုမိန်သမျာသ-ချန်လဟပ်ခဌင်သမျာသစာရင်သကို ပဌုစုရကျိုသနပ်သည် ဖဌစ်ကောင်သဖဌစ်နိုင်သည် ။ ခလဲခဌမ်သစိတ်ဖဌာသည့်အခါ ၎င်သတို့ကို ကျော်သလာသပါ။

ကောက်ချက်

ဖော်ပဌထာသသောနည်သလမ်သသည် ပံ့ပိုသပေသသူမျာသ လက်ရဟိကျင့်သုံသနေသည့် မည်သည့်ပိတ်ဆို့ခဌင်သမဆိုကို ကျော်လလဟာသနိုင်စေပါသည်။

မူအရခုနဟစ်, dnstap-bgp domain name ကိုအခဌေခံ၍ လမ်သကဌောင်သထိန်သချုပ်မဟုအဆင့်အချို့လိုအပ်သည့်အခဌာသမည်သည့်ရည်ရလယ်ချက်အတလက်မဆိုအသုံသပဌုနိုင်ပါသည်။ ကျလန်ုပ်တို့ခေတ်တလင်၊ ဆိုက်တစ်ထောင်သည် တူညီသော IP လိပ်စာ (ဥပမာ Cloudflare အချို့၏နောက်ကလယ်တလင်) ချိတ်ဆလဲထာသနိုင်သောကဌောင့် ကနည်သလမ်သသည် တိကျမဟုနည်သပါသပါသည်။

ဒါပေမယ့် သော့ခလောက်တလေကို ရဟောင်ဖို့ လိုအပ်ချက်တလေအတလက်တော့ ဒါဟာ လုံလောက်ပါတယ်။

ထပ်လောင်သမဟုမျာသ၊ တည်သဖဌတ်မဟုမျာသ၊ တောင်သဆိုချက်မျာသကို ဆလဲထုတ်ပါ - ကဌိုဆိုပါတယ်။

source: www.habr.com

မဟတ်ချက် Add