በDNSTap እና BGP የILV እገዳን ማለፍ

በDNSTap እና BGP የILV እገዳን ማለፍ

ርዕሱ በጣም ተደብድቧል ፣ አውቃለሁ። ለምሳሌ ታላቅ አለ ጽሑፍ, ነገር ግን የማገጃ ዝርዝሩ የአይፒ ክፍል ብቻ እዚያ ይቆጠራል. እንዲሁም ጎራዎችን እንጨምራለን.

ፍርድ ቤቶች እና አርኬኤን ሁሉንም ነገር ወደ ቀኝ እና ወደ ግራ በመዝጋታቸው እና አቅራቢዎቹ በሪቪዞሮ በተሰጡት የገንዘብ መቀጮዎች ላይ ላለመውረድ ከፍተኛ ጥረት በማድረግ ላይ በመሆናቸው ፣ ከማገድ ጋር ተያይዞ ያለው ኪሳራ በጣም ትልቅ ነው። እና "በህጋዊ" ከተከለከሉት ጣቢያዎች መካከል ብዙ ጠቃሚዎች አሉ (ሰላም ፣ ሩትራክከር)

የምኖረው ከ RKN ሥልጣን ውጭ ነው፣ ነገር ግን ወላጆቼ፣ ዘመዶቼ እና ጓደኞቼ እቤት ቆዩ። ስለዚህ ከ IT ርቀው ለሚኖሩ ሰዎች እገዳን ለማለፍ ቀላል መንገድ እንዲፈጠር ተወስኗል ፣ በተለይም ያለነሱ ተሳትፎ።

በዚህ ማስታወሻ ውስጥ መሰረታዊ የኔትወርክ ነገሮችን በደረጃ አልገልጽም, ነገር ግን ይህ እቅድ እንዴት እንደሚተገበር አጠቃላይ መርሆችን እገልጻለሁ. ስለዚህ አውታረ መረቡ በአጠቃላይ እና በተለይም በሊኑክስ እንዴት እንደሚሰራ ማወቅ የግድ አስፈላጊ ነው.

የመቆለፊያ ዓይነቶች

በመጀመሪያ፣ የታገዱትን ትውስታችንን እናድስ።

ከ RKN በወረደው ኤክስኤምኤል ውስጥ ብዙ አይነት መቆለፊያዎች አሉ፡-

  • IP
  • Домен
  • ዩ አር ኤል

ለቀላልነት፣ ወደ ሁለት እንቀንሳቸዋለን፡ አይፒ እና ጎራ፣ እና በቀላሉ ጎራውን በዩአርኤል እንዳይታገድ እናወጣለን (ይበልጥ በትክክል፣ ይህን አድርገውልናል)።

ጥሩ ሰዎች ከ Roskomsvoboda አስደናቂ ነገር ተገነዘበ ኤ ፒ አይየምንፈልገውን ማግኘት የምንችልበት፡-

የታገዱ ጣቢያዎች መዳረሻ

ይህንን ለማድረግ, አንዳንድ ትንሽ የውጭ ቪፒኤስ ያስፈልገናል, በተለይም ያልተገደበ ትራፊክ - ከእነዚህ ውስጥ ብዙዎቹ ለ 3-5 ዶላር አሉ. ፒንግ በጣም ትልቅ እንዳይሆን በአቅራቢያው ወደ ውጭ አገር መውሰድ ያስፈልግዎታል ፣ ግን እንደገና ፣ በይነመረብ እና ጂኦግራፊ ሁል ጊዜ አንድ ላይ እንደማይሆኑ ግምት ውስጥ ያስገቡ። እና ለ 5 ዶላሮች SLA ስለሌለ ፣ለስህተት መቻቻል ከተለያዩ አቅራቢዎች 2+ ቁርጥራጮችን መውሰድ የተሻለ ነው።

በመቀጠል, ከደንበኛው ራውተር ወደ ቪፒኤስ ኢንክሪፕት የተደረገ ዋሻ ማዘጋጀት አለብን. እኔ Wireguardን እንደ ፈጣኑ እና ለማዘጋጀት እጠቀማለሁ። በሊኑክስ ላይ የተመሰረቱ ደንበኛ ራውተሮችም አሉኝ (አፒዩ2 ወይም የሆነ ነገር በOpenWRT)። በአንዳንድ ሚክሮቲክ/ሲሲስኮ ላይ እንደ OpenVPN እና GRE-over-IPSEC ያሉትን ፕሮቶኮሎች መጠቀም ይችላሉ።

የፍላጎት ትራፊክን መለየት እና አቅጣጫ መቀየር

በውጪ ሀገራት ሁሉንም የኢንተርኔት ትራፊክ ማጥፋት ትችላለህ። ግን ፣ ምናልባትም ፣ ከአካባቢያዊ ይዘት ጋር የመሥራት ፍጥነት ከዚህ በእጅጉ ይጎዳል። በተጨማሪም, በ VPS ላይ የመተላለፊያ ይዘት መስፈርቶች በጣም ከፍ ያለ ይሆናሉ.

ስለዚህ ትራፊክ ለተከለከሉ ቦታዎች እንደምንም መድቦ ወደ ዋሻው አቅጣጫ መምራት አለብን። ምንም እንኳን አንዳንድ "ተጨማሪ" ትራፊክ እዚያ ቢደርሱ ሁሉንም ነገር በዋሻው ውስጥ ከማሽከርከር አሁንም በጣም የተሻለ ነው።

ትራፊክን ለመቆጣጠር የBGP ፕሮቶኮልን እንጠቀማለን እና ወደ አስፈላጊ አውታረ መረቦች ከ VPS ወደ ደንበኞች የሚወስዱትን መንገዶች እናሳውቃለን። BIRD በጣም ተግባራዊ እና ምቹ ከሆኑ BGP deemons እንደ አንዱ እንውሰድ።

IP

በአይፒ በማገድ ፣ ሁሉም ነገር ግልፅ ነው ፣ ሁሉንም የታገዱ አይፒዎችን በ VPS እናሳውቃለን ። ችግሩ ኤፒአይ በሚመልሰው ዝርዝር ውስጥ ወደ 600 ሺህ የሚጠጉ ንዑስ አውታረ መረቦች አሉ ፣ እና አብዛኛዎቹ /32 አስተናጋጆች ናቸው። የዚህ መስመሮች ብዛት ደካማ የደንበኛ ራውተሮችን ሊያደናግር ይችላል።

ስለዚህ, ዝርዝሩን በሚሰራበት ጊዜ, 24 ወይም ከዚያ በላይ አስተናጋጆች ካሉት እስከ አውታረ መረቡ / 2 ለማጠቃለል ተወስኗል. ስለዚህ የመንገዶቹ ቁጥር ወደ ~ 100 ሺህ ቀንሷል. የዚህ ጽሑፍ ስክሪፕት ይከተላል.

ጎራዎች

እሱ የበለጠ የተወሳሰበ ነው እና ብዙ መንገዶች አሉ። ለምሳሌ፣ በእያንዳንዱ ደንበኛ ራውተር ላይ ግልፅ ስኩዊድ መጫን እና እዚያ የኤችቲቲፒ መጥለፍ ማድረግ እና በመጀመሪያው ጉዳይ የተጠየቀውን ዩአርኤል እና በሁለተኛው ከSNI ጎራ ለማግኘት ወደ TLS እጅ መጨባበጥ ማየት ይችላሉ።

ነገር ግን በሁሉም ዓይነት አዲስ ፋንግልድ TLS1.3 + eSNI ምክንያት HTTPS ትንታኔ በየቀኑ እየቀነሰ እና እየቀነሰ መጥቷል። አዎ፣ እና በደንበኛው በኩል ያለው መሠረተ ልማት ይበልጥ የተወሳሰበ እየሆነ መጥቷል - ቢያንስ OpenWRT መጠቀም ይኖርብዎታል።

ስለዚህ፣ ለዲ ኤን ኤስ ጥያቄዎች ምላሾችን የመጥለፍ መንገድን ለመውሰድ ወሰንኩ። እዚህ ላይም ማንኛውም ዲኤንኤስ-ኦቨር-ቲኤልኤስ/ኤችቲቲፒኤስ በጭንቅላታችሁ ላይ ማንዣበብ ይጀምራል፣ነገር ግን ይህንን ክፍል በደንበኛው ላይ (ለአሁኑ) መቆጣጠር እንችላለን - ማሰናከል ወይም የራስዎን አገልጋይ ለ DoT/DoH ይጠቀሙ።

ዲ ኤን ኤስ እንዴት መጥለፍ ይቻላል?

እዚህም, በርካታ አቀራረቦች ሊኖሩ ይችላሉ.

  • በ PCAP ወይም NFLOG በኩል የዲ ኤን ኤስ ትራፊክ መጥለፍ
    እነዚህ ሁለቱም የመጥለፍ ዘዴዎች በመገልገያው ውስጥ ይተገበራሉ ሲድማት. ግን ለረጅም ጊዜ አልተደገፈም እና ተግባራቱ በጣም ጥንታዊ ነው, ስለዚህ አሁንም ለእሱ ማሰሪያ መጻፍ ያስፈልግዎታል.
  • የዲ ኤን ኤስ አገልጋይ ምዝግብ ማስታወሻዎች ትንተና
    እንደ አለመታደል ሆኖ፣ ለእኔ የሚታወቁት ተደጋጋሚዎች ምላሾችን መመዝገብ አይችሉም፣ ግን ጥያቄዎችን ብቻ ነው። በመርህ ደረጃ, ይህ አመክንዮአዊ ነው, ምክንያቱም ከጥያቄዎች በተለየ መልኩ መልሶች ውስብስብ መዋቅር ስላላቸው እና በጽሁፍ መልክ ለመጻፍ አስቸጋሪ ነው.
  • DNSTap
    እንደ እድል ሆኖ፣ ብዙዎቹ ዲ ኤን ኤስ ታፕን ለዚህ ዓላማ ይደግፋሉ።

DNSTap ምንድን ነው?

በDNSTap እና BGP የILV እገዳን ማለፍ

ከዲኤንኤስ አገልጋይ ወደ የተዋቀሩ የዲ ኤን ኤስ መጠይቆች እና ምላሾች ሰብሳቢ ለማዘዋወር በፕሮቶኮል ማቋረጫዎች እና ፍሬም ዥረቶች ላይ የተመሰረተ የደንበኛ አገልጋይ ፕሮቶኮል ነው። በዋናነት፣ የዲኤንኤስ አገልጋይ መጠይቅ እና ምላሽ ሜታዳታ (የመልእክት አይነት፣ ደንበኛ/አገልጋይ አይፒ፣ ወዘተ) እና ሙሉ የDNS መልዕክቶችን በአውታረ መረቡ ላይ አብሮ በሚሰራበት (ሁለትዮሽ) ቅጽ ያስተላልፋል።

በዲ ኤን ኤስ ታፕ ፓራዲም ውስጥ የዲ ኤን ኤስ አገልጋይ እንደ ደንበኛ እና ሰብሳቢው እንደ አገልጋይ እንደሚሰራ መረዳት በጣም አስፈላጊ ነው. ያም ማለት የዲ ኤን ኤስ አገልጋይ ከአሰባሳቢው ጋር ይገናኛል, እና በተቃራኒው አይደለም.

ዛሬ DNSTap በሁሉም ታዋቂ የዲ ኤን ኤስ አገልጋዮች ውስጥ ይደገፋል። ነገር ግን፣ ለምሳሌ፣ BIND በብዙ ስርጭቶች (እንደ ኡቡንቱ LTS) ብዙውን ጊዜ ያለ እሱ ድጋፍ በሆነ ምክንያት ይገነባል። ስለዚህ እንደገና ለመገጣጠም አንቸገር፣ ነገር ግን ቀለል ያለ እና ፈጣን ተደጋጋሚ ድግግሞሹን ይውሰዱ - Unbound።

DNSTap እንዴት እንደሚይዝ?

አሉ አንዳንድ መጠን የCLI መገልገያዎች ከDNSTap ክስተቶች ዥረት ጋር ለመስራት፣ነገር ግን ችግራችንን ለመፍታት ተስማሚ አይደሉም። ስለዚህ ፣ አስፈላጊውን ሁሉ የሚያደርግ የራሴን ብስክሌት ለመፍጠር ወሰንኩ ። dnstap-bgp

የስራ ስልተ ቀመር፡

  • ሲጀመር የጎራዎችን ዝርዝር ከጽሑፍ ፋይል ይጭናል፣ ይገለብጣቸዋል (habr.com -> com.habr)፣ የተሰበሩ መስመሮችን፣ የተባዙ እና ንዑስ ጎራዎችን አያካትትም (ማለትም ዝርዝሩ habr.com እና www.habr.com የያዘ ከሆነ፣ የሚጫነው የመጀመሪያው ብቻ ነው) እና በዚህ ዝርዝር ውስጥ ለፈጣን ፍለጋ ቅድመ ቅጥያ ዛፍ ይገነባል።
  • እንደ ዲ ኤን ኤስ ታፕ አገልጋይ ሆኖ ከዲኤንኤስ አገልጋይ ግንኙነትን ይጠብቃል። በመርህ ደረጃ፣ ሁለቱንም UNIX እና TCP ሶኬቶችን ይደግፋል፣ ነገር ግን የማውቃቸው የዲ ኤን ኤስ አገልጋዮች UNIX ሶኬቶችን ብቻ መጠቀም ይችላሉ።
  • ገቢ የዲ ኤን ኤስ ታፕ ፓኬቶች መጀመሪያ ወደ ፕሮቶቡፍ መዋቅር ይገለላሉ እና ከዚያ በፕሮቶቡፍ መስክ በአንዱ የሚገኘው የሁለትዮሽ ዲ ኤን ኤስ መልእክት ልሹ ወደ ዲ ኤን ኤስ RR መዝገቦች ደረጃ ይተነተናል
  • የተጠየቀው አስተናጋጅ (ወይም የወላጅ ጎራ) በተጫነው ዝርዝር ውስጥ ስለመሆኑ ተረጋግጧል፣ ካልሆነ፣ ምላሹ ችላ ይባላል።
  • ከምላሹ A/AAAA/CNAME RRs ብቻ ተመርጠዋል እና ተዛማጅ IPv4/IPv6 አድራሻዎች ከነሱ ወጥተዋል
  • የአይፒ አድራሻዎች ሊዋቀሩ በሚችሉ ቲቲኤል ተደብቀዋል እና ለሁሉም የተዋቀሩ BGP አቻዎች ማስታወቂያ ተሰጥቷል።
  • አስቀድሞ የተሸጎጠ አይፒን የሚያመለክት ምላሽ ሲደርሰው፣ ቲቲኤል ተዘምኗል
  • የ TTL ጊዜው ካለፈ በኋላ, ግቤት ከመሸጎጫው እና ከ BGP ማስታወቂያዎች ይወገዳል

ተጨማሪ ተግባር፡-

  • በSIGHUP የጎራዎችን ዝርዝር እንደገና በማንበብ ላይ
  • መሸጎጫውን ከሌሎች አጋጣሚዎች ጋር በማመሳሰል ማቆየት። dnstap-bgp በ HTTP/JSON በኩል
  • እንደገና ከተጀመረ በኋላ ይዘቱን ወደነበረበት ለመመለሾ መሸጎጫውን በዲስክ ላይ ያባዙት (በቦልትዲቢ ዳታቤዝ ውስጥ)
  • ወደ ሌላ የአውታረ መረብ ስም ቦታ ለመቀየር ድጋፍ (ለምን እንደሚያስፈልግ ከዚህ በታች ይብራራል)
  • IPv6 ድጋፍ

ገደቦች:

  • የIDN ጎራዎች እስካሁን አይደገፉም።
  • ጥቂት BGP ቅንብሮች

ሰበሰብኩ። RPM እና DEB በቀላሉ ለመጫን ጥቅሎች. በአንፃራዊነት በቅርብ ጊዜ በሁሉም ስርዓተ ክወናዎች ላይ በስርዓተ ክወናዎች መስራት አለበት። ምንም ጥገኝነት የላቸውም።

መርሃግብሩ

ስለዚህ, ሁሉንም አካላት አንድ ላይ መሰብሰብ እንጀምር. በውጤቱም ፣ እንደዚህ ያለ የአውታረ መረብ ቶፖሎጂ የሆነ ነገር ማግኘት አለብን።
በDNSTap እና BGP የILV እገዳን ማለፍ

የሥራው አመክንዮ፣ እኔ እንደማስበው፣ ከሥዕላዊ መግለጫው ግልጽ ነው፡-

  • ደንበኛው የእኛ አገልጋይ እንደ ዲ ኤን ኤስ ተዋቅሯል ፣ እና የዲ ኤን ኤስ ጥያቄዎች በቪፒኤን ላይ ማለፍ አለባቸው። አቅራቢው ለማገድ የዲ ኤን ኤስ መጥለፍን መጠቀም እንዳይችል ይህ አስፈላጊ ነው።
  • ጣቢያውን ሲከፍት ደንበኛው እንደ “የ xxx.org አይፒዎች ምንድ ናቸው” የሚል የዲ ኤን ኤስ ጥያቄ ይልካል
  • ሳይገደቡ xxx.orgን ይፈታል (ወይም ከመሸጎጫው ይወስደዋል) እና ለደንበኛው ምላሽ ይልካል "xxx.org እንደዚህ እና እንደዚህ ያለ አይ ፒ አለው" በ DNSTap በትይዩ በማባዛት
  • dnstap-bgp ውስጥ እነዚህን አድራሻዎች ያስታውቃል ወፍ በBGP በኩል ጎራው በታገደ ዝርዝር ውስጥ ካለ
  • ወፍ ወደ እነዚህ አይፒዎች መንገድ ያስተዋውቃል next-hop self ደንበኛ ራውተር
  • ከደንበኛው ወደ እነዚህ አይፒዎች የሚቀጥሉት እሽጎች በዋሻው ውስጥ ያልፋሉ

በአገልጋዩ ላይ፣ ወደ የታገዱ ጣቢያዎች የሚወስዱ መንገዶች፣ በ BIRD ውስጥ የተለየ ሠንጠረዥ እጠቀማለሁ እና በምንም መልኩ ከስርዓተ ክወናው ጋር አይገናኝም።

ይህ እቅድ ችግር አለው፡ ከደንበኛው የመጀመሪያው የSYN ፓኬት፣ ምናልባትም በአገር ውስጥ አቅራቢው በኩል ለመልቀቅ ጊዜ ይኖረዋል። መንገዱ ወዲያውኑ አልተገለጸም. እና እዚህ በአቅራቢው እገዳው ላይ በመመስረት አማራጮች ሊኖሩ ይችላሉ። እሱ ትራፊክን ብቻ ከጣለ, ከዚያ ምንም ችግር የለበትም. እና ወደ አንዳንድ ዲፒአይ ካዘዋወረው (በንድፈ ሀሳብ) ልዩ ውጤቶች ሊኖሩ ይችላሉ።

በተጨማሪም ደንበኞች የDNS TTL ተአምራትን አለማክበራቸው ሊሆን ይችላል፣ይህም ደንበኛው Unbound ከመጠየቅ ይልቅ ከበሰበሰው መሸጎጫ ውስጥ አንዳንድ የቆዩ ግቤቶችን እንዲጠቀም ሊያደርገው ይችላል።

በተግባር፣ የመጀመሪያውም ሆነ ሁለተኛው ችግር አልፈጠሩብኝም፣ ነገር ግን የእርሶ ርቀት ሊለያይ ይችላል።

የአገልጋይ ማስተካከያ

ለመንከባለል ቀላል ፣ ጻፍኩ ሚና ለአቅሙ. በሊኑክስ (በዲብ ላይ ለተመሰረቱ ስርጭቶች የተነደፈ) ላይ በመመስረት ሁለቱንም አገልጋዮችን እና ደንበኞችን ማዋቀር ይችላል። ሁሉም ቅንጅቶች በጣም ግልጽ ናቸው እና ተቀምጠዋል inventory.yml. ይህ ሚና ከትልቅ የመጫወቻ መጽሐፌ የተቆረጠ ነው፣ ስለዚህም ስህተቶችን ሊይዝ ይችላል - ውሰድ ጥያቄዎች እንኳን ደህና መጣህ 🙂

ዋና ዋናዎቹን ክፍሎች እንይ.

ቢ.ጂ.ፒ.

በአንድ አስተናጋጅ ላይ ሁለት BGP deemons ማስኬድ መሰረታዊ ችግር አለው፡ BIRD BGP peeringን ከአካባቢው አስተናጋጅ (ወይም ከየትኛውም የአካባቢ በይነገጽ) ጋር ማዋቀር አይፈልግም። በአጠቃላይ ከቃሉ። የደብዳቤ መላኪያ ዝርዝሮችን ማንበብ እና ማንበብ አልረዳቸውም፣ ይህ በንድፍ ነው ይላሉ። ምናልባት የሆነ መንገድ አለ, ግን አላገኘሁትም.

ሌላ BGP ዴሞን መሞከር ትችላለህ፣ ግን እኔ BIRD እወዳለሁ እና በሁሉም ቦታ በእኔ ጥቅም ላይ ይውላል፣ አካላትን ማፍራት አልፈልግም።

ስለዚህ dnstap-bgpን በኔትወርክ ስም ቦታ ውስጥ ደበቅኩት፣ እሱም ከሥሩ ጋር በቬት በይነገጽ በኩል የተገናኘ፡ ልክ እንደ ፓይፕ ነው፣ ጫፎቹ በተለያዩ የስም ቦታዎች ላይ ተጣብቀዋል። በእያንዳንዱ በእነዚህ ጫፎች ላይ ከአስተናጋጁ በላይ የማይሄዱ የግል p2p አይፒ አድራሻዎችን እንሰቅላለን, ስለዚህ ምንም ሊሆኑ ይችላሉ. ይህ ወደ ውስጥ ሂደቶችን ለመድረስ የሚያገለግል ተመሳሳይ ዘዴ ነው። በሁሉም የተወደደ ዶከር እና ሌሎች መያዣዎች.

ለዚህም ተጽፎአል ስክሪፕት እና እራስዎን በፀጉር ለመጎተት ከላይ የተገለፀው ተግባር ወደ dnstap-bgp ተጨምሯል. በዚህ ምክንያት፣ እንደ ስር መሮጥ ወይም ለCAP_SYS_ADMIN ሁለትዮሽ በsetcap ትዕዛዝ መሰጠት አለበት።

የስም ቦታ ለመፍጠር ምሳሌ ስክሪፕት።

#!/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",
]

ወፍ.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.ዝርዝር

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

ዲ ኤን ኤስ

በነባሪ፣ በኡቡንቱ፣ Unbound binary በAppArmor መገለጫ ተጨምቋል፣ ይህም ከሁሉም የዲ ኤን ኤስ ታፕ ሶኬቶች ጋር እንዳይገናኝ ይከለክላል። ይህን መገለጫ ወይ መሰረዝ ወይም ማሰናከል ትችላለህ፡-

# cd /etc/apparmor.d/disable && ln -s ../usr.sbin.unbound .
# apparmor_parser -R /etc/apparmor.d/usr.sbin.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

ዝርዝሮችን በማውረድ እና በማስኬድ ላይ

የአይፒ አድራሻዎችን ዝርዝር ለማውረድ እና ለማስኬድ ስክሪፕት
ዝርዝሩን ያወርዳል, ቅድመ ቅጥያውን ያጠቃልላል pfx. በ አትጨምር и አታጠቃልል። አይፒዎችን እና አውታረ መረቦችን እንዲዘሉ ወይም እንዳይጠቃለሉ መንገር ይችላሉ። አስፈልጎኝ ነበር። የእኔ የቪፒኤስ ንዑስ መረብ በብሎክ ዝርዝሩ ውስጥ ነበር 🙂

የሚያስቀው ነገር የRosKomSvoboda API በነባሪ የፓይዘን ተጠቃሚ ወኪል ጥያቄዎችን ማገድ ነው። ስክሪፕቱ-ኪዲ ያገኘው ይመስላል። ስለዚህ, ወደ Ognelis እንለውጣለን.

እስካሁን ድረስ ከ IPv4 ጋር ብቻ ነው የሚሰራው. የ IPv6 ድርሻ ትንሽ ነው, ግን ለማስተካከል ቀላል ይሆናል. ወፍ 6ን እንዲሁ መጠቀም ካለብዎት በስተቀር።

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)

ለማዘመን ስክሪፕት
በቀን አንድ ጊዜ ዘውድ ላይ እሮጣለሁ, ምናልባት በየ 4 ሰዓቱ መጎተት ጠቃሚ ነው. ይህ በእኔ አስተያየት RKN ከአቅራቢዎች የሚፈልገው የእድሳት ጊዜ ነው። በተጨማሪም፣ ሌላ በጣም አስቸኳይ እገዳዎች አሏቸው፣ ይህም በፍጥነት ሊደርስ ይችላል።

የሚከተለውን ያደርጋል:

  • የመጀመሪያውን ስክሪፕት ያስኬዳል እና የመንገዶቹን ዝርዝር ያሻሽላል (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

እነሱ የተጻፉት ብዙም ሳያስቡ ነው, ስለዚህ ሊሻሻል የሚችል ነገር ካዩ - ይሂዱ.

የደንበኛ ማዋቀር

እዚህ ለሊኑክስ ራውተሮች ምሳሌዎችን እሰጣለሁ ፣ ግን በሚክሮቲክ / ሲሲስኮ የበለጠ ቀላል መሆን አለበት።

በመጀመሪያ፣ 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 የተቀበሉትን መንገዶች ከከርነል ማዞሪያ ሠንጠረዥ ቁጥር 222 ጋር እናሳያይዛቸዋለን።

ከዚያ በኋላ ነባሪውን ከመመልከትዎ በፊት ከርነል ይህንን ሳህን እንዲመለከት መጠየቅ በቂ ነው-

# 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

የአገልጋዩን ዋሻ አይፒ አድራሻ እንደ ዲ ኤን ኤስ ለማሰራጨት በራውተር ላይ DHCP ን ለማዋቀር ሁሉም ነገር ይቀራል ፣ እና መርሃግብሩ ዝግጁ ነው።

ችግሮች

አሁን ባለው ስልተ-ቀመር የጎራዎችን ዝርዝር ለማመንጨት እና ለማስኬድ ከሌሎች ነገሮች በተጨማሪ ያካትታል። youtube.com እና የእሱ ሲዲኤን.

እና ይሄ ሁሉም ቪዲዮዎች በ VPN በኩል ያልፋሉ, ይህም ሙሉውን ቻናል ሊዘጋው ይችላል. ምናልባት ለጊዜው RKN ን የሚከለክሉ ታዋቂ ጎራዎችን ዝርዝር ማጠናቀር ጠቃሚ ነው, አንጀቱ ቀጭን ነው. እና በሚተነተኑበት ጊዜ ይዝለሉዋቸው።

መደምደሚያ

የተገለጸው ዘዴ አቅራቢዎች በአሁኑ ጊዜ የሚተገብሯቸውን ማንኛውንም እገዳዎች እንዲያልፉ ያስችልዎታል።

በመርህ ደረጃ, dnstap-bgp በጎራ ስም ላይ በመመስረት የተወሰነ ደረጃ የትራፊክ ቁጥጥር ለሚፈለግበት ለሌላ ለማንኛውም ዓላማ መጠቀም ይቻላል ። ያስታውሱ በእኛ ጊዜ አንድ ሺህ ጣቢያዎች በተመሳሳይ የአይፒ አድራሻ (ለምሳሌ ከ Cloudflare በስተጀርባ) ሊሰቀሉ እንደሚችሉ ያስታውሱ ፣ ስለዚህ ይህ ዘዴ በጣም ዝቅተኛ ትክክለኛነት አለው።

ግን መቆለፊያዎችን ለማለፍ ፍላጎቶች ይህ በጣም በቂ ነው።

ተጨማሪዎች ፣ አርትዖቶች ፣ ጥያቄዎችን ይጎትቱ - እንኳን ደህና መጡ!

ምንጭ: hab.com

አስተያየት ያክሉ