DNSTap ۽ BGP استعمال ڪندي RKN بلاڪنگ کي پاس ڪرڻ

DNSTap ۽ BGP استعمال ڪندي RKN بلاڪنگ کي پاس ڪرڻ

موضوع تمام سٺو آهي، مون کي خبر آهي. مثال طور، اتي هڪ شاندار آهي هڪ مضمون، پر بلاڪ لسٽ جو صرف IP حصو اتي سمجهيو ويندو آهي. اسان به ڊومين شامل ڪنداسين.

حقيقت اها آهي ته عدالتون ۽ آر ڪي اين هر شيء کي کاٻي ۽ ساڄي بلاڪ ڪري رهيا آهن، ۽ فراهم ڪندڙ تمام گهڻي ڪوشش ڪري رهيا آهن ته ريويزورو طرفان جاري ڪيل ڏنڊ هيٺ نه اچن، بلاڪ ڪرڻ سان لاڳاپيل نقصان تمام وڏا آهن. ۽ "جائز طور تي" بلاڪ ڪيل سائيٽن مان ڪيترائي مفيد آهن (هيلو، رتراڪر)

مان RKN جي دائري کان ٻاهر رهندو آهيان، پر منهنجا والدين، مائٽ ۽ دوست منهنجي وطن ۾ رهن ٿا. تنهن ڪري اهو فيصلو ڪيو ويو ته آئي ٽي کان پري ماڻهن لاءِ بلاڪنگ کي نظرانداز ڪرڻ لاءِ هڪ آسان رستو ، ترجيحي طور تي انهن جي شموليت کان سواءِ.

هن نوٽ ۾، آئون بنيادي نيٽ ورڪ شين کي قدم سان بيان نه ڪندس، پر عام اصولن کي بيان ڪندس ته هن اسڪيم کي ڪيئن لاڳو ڪري سگهجي ٿو. تنهن ڪري ڄاڻ ته ڪيئن نيٽ ورڪ ڪم ڪري ٿو عام طور تي ۽ لينڪس ۾ خاص طور تي لازمي آهي.

تالا جا قسم

پهرين، اچو ته اسان جي يادگيري کي تازو ڪريون جيڪي بلاڪ ڪيو پيو وڃي.

RKN کان ڊائون لوڊ ڪيل XML ۾ ڪيترائي قسم جا تالا آھن:

  • IP
  • Домен
  • URL جو

سادگي لاءِ، اسان انھن کي گھٽائي ڇڏينداسين ٻن: IP ۽ ڊومين، ۽ URL جي ذريعي بلاڪ ڪرڻ کان اسان صرف ڊومين کي ڪڍي ڇڏينداسين (يا بلڪه، اھو اڳ ۾ ئي اسان لاءِ ٿي چڪو آھي).

کان سٺا ماڻهو Roskomsvoboda هڪ شاندار عمل ڪيو API، جنهن جي ذريعي اسان حاصل ڪري سگهون ٿا جيڪو اسان کي گهرجي:

بلاڪ ڪيل سائيٽن تائين رسائي

هن کي ڪرڻ لاء، اسان کي ڪجهه ننڍڙن غير ملڪي وي پي ايس جي ضرورت آهي، ترجيح سان لامحدود ٽرئفڪ سان - انهن مان ڪيترائي آهن 3-5 بڪس لاء. توهان کي ان کي خريد ڪرڻ جي ضرورت آهي ويجهي ٻاهرين ملڪ ۾، انهي ڪري ته پنگ تمام گهڻو نه آهي، پر ٻيهر ذهن ۾ رکون ٿا ته انٽرنيٽ ۽ جاگرافي هميشه هڪجهڙائي نه آهي. ۽ جيئن ته 5 بڪس لاءِ ڪو به SLA ناهي، اهو بهتر آهي ته مختلف فراهم ڪندڙن کان 2+ ٽڪرا وٺو غلطي رواداري لاءِ.

اڳيون، اسان کي ڪلائنٽ روٽر کان VPS تائين هڪ اينڪريڊ ٿيل سرنگ قائم ڪرڻ جي ضرورت آهي. مان وائر گارڊ استعمال ڪريان ٿو تيز ترين ۽ آسان ترين ترتيب ڏيڻ لاءِ ڇاڪاڻ ته ... منهنجا ڪلائنٽ روٽر پڻ لينڪس تي ٻڌل آهن (APU2 يا OpenWRT تي ڪجهه). ڪجھ Mikrotik/Cisco جي صورت ۾، توھان انھن تي موجود پروٽوڪول استعمال ڪري سگھو ٿا جهڙوڪ OpenVPN ۽ GRE-over-IPSEC.

دلچسپي جي ٽرئفڪ جي سڃاڻپ ۽ ريڊائريشن

توهان ڪري سگهو ٿا، يقينا، سڀني انٽرنيٽ ٽرئفڪ کي ٻاهر وڃڻ کان روڪيو. پر، گهڻو ڪري، مقامي مواد سان ڪم ڪرڻ جي رفتار هن کان تمام گهڻو متاثر ٿيندو. پلس، وي پي ايس تي بينڊوڊٿ جون گهرجون تمام گهڻيون هونديون.

تنهن ڪري، اسان کي ڪنهن به طريقي سان بلاڪ ٿيل سائيٽن ڏانهن ٽرئفڪ کي الڳ ڪرڻ جي ضرورت پوندي ۽ ان کي منتخب طور تي سرنگ ۾ رستو ڏيڻو پوندو. جيتوڻيڪ ڪجھ "اضافي" ٽرئفڪ اتي پهچي ٿي، اهو اڃا تائين تمام گهڻو بهتر آهي سرنگ ذريعي هر شي کي هلائڻ کان.

ٽريفڪ کي منظم ڪرڻ لاءِ، اسان استعمال ڪنداسين BGP پروٽوڪول ۽ اشتهار ڏينداسين ضروري نيٽ ورڪن ڏانهن اسان جي VPS کان ڪلائنٽ تائين. اچو ته BIRD کي BGP ڊيمون طور وٺون، ڇاڪاڻ ته اھو ھڪڙو سڀ کان وڌيڪ ڪم ڪندڙ ۽ آسان آھي.

IP

IP بلاڪنگ سان سڀ ڪجهه واضح آهي: اسان صرف اعلان ڪريون ٿا سڀئي بلاڪ ٿيل IPs مان VPS. مسئلو اهو آهي ته API پاران مهيا ڪيل فهرست ۾ اٽڪل 600 هزار سبنيٽس آهن، ۽ انهن مان وڏي اڪثريت /32 ميزبان آهن. رستن جو هي تعداد ڪمزور ڪلائنٽ رستن کي پريشان ڪري سگھي ٿو.

تنهن ڪري، جڏهن فهرست کي پروسيس ڪيو وڃي، اهو فيصلو ڪيو ويو ته /24 نيٽ ورڪ تائين مجموعو هجي جيڪڏهن ان ۾ 2 يا وڌيڪ ميزبان آهن. اهڙيء طرح، رستن جو تعداد گھٽجي ويو ~ 100 هزار. هن لاء اسڪرپٽ جي پيروي ڪئي ويندي.

ڊومينز

اهو وڌيڪ پيچيده آهي ۽ اتي ڪيترائي طريقا آهن. مثال طور، توهان هر ڪلائنٽ روٽر تي شفاف اسڪواڊ انسٽال ڪري سگهو ٿا ۽ اتي HTTP مداخلت ڪري سگهو ٿا ۽ پهرين صورت ۾ درخواست ڪيل URL ۽ ٻي صورت ۾ SNI کان ڊومين حاصل ڪرڻ لاءِ TLS هٿ شيڪ تي جاسوسي ڪري سگهو ٿا.

پر تمام نئين ٽڙيل پکڙيل TLS1.3+eSNI جي ڪري، HTTPS تجزيا هر روز گهٽ ۽ حقيقت پسند ٿيندو پيو وڃي. ۽ ڪلائنٽ جي پاسي تي انفراسٹرڪچر وڌيڪ پيچيده ٿي ويندو آهي - توهان کي گهٽ ۾ گهٽ OpenWRT استعمال ڪرڻو پوندو.

تنهن ڪري، مون DNS سوالن جي جوابن جي مداخلت جو رستو اختيار ڪرڻ جو فيصلو ڪيو. هتي، پڻ، DNS-over-TLS/HTTPS جا سڀ قسم اسان جي مٿي تي هور ڪرڻ شروع ڪن ٿا، پر اسان (هاڻي لاءِ) هن حصي کي ڪلائنٽ تي ڪنٽرول ڪري سگهون ٿا - يا ته ان کي غير فعال ڪريون يا DoT/DoH لاءِ پنهنجو سرور استعمال ڪريو.

DNS کي ڪيئن اغوا ڪجي؟

هتي پڻ ڪيترائي طريقا ٿي سگهن ٿا.

  • PCAP يا NFLOG ذريعي DNS ٽرئفڪ کي روڪيو
    انهن ٻنهي مداخلت جا طريقا افاديت ۾ لاڳو ڪيا ويا آهن sidmat. پر اهو هڪ ڊگهي وقت تائين سهڪار نه ڪيو ويو آهي ۽ ڪارڪردگي تمام ابتدائي آهي، تنهنڪري توهان اڃا تائين ان لاء پابند لکڻ جي ضرورت آهي.
  • DNS سرور لاگ تجزيو
    بدقسمتي سان، جيڪي مون کي خبر آهي انهن کي خبر ناهي ته جوابن کي ڪيئن لاگ ان ڪجي، پر صرف درخواستون. اصول ۾، اهو منطقي آهي، ڇو ته، درخواستن جي برعڪس، جوابن ۾ هڪ پيچيده ڍانچي آهي ۽ انهن کي ٽيڪسٽ فارم ۾ لکڻ ڏکيو آهي.
  • DNSTap
    خوش قسمت، انهن مان ڪيترائي پهريان ئي انهن مقصدن لاء DNSTap جي حمايت ڪن ٿا.

DNSTap ڇا آهي؟

DNSTap ۽ BGP استعمال ڪندي RKN بلاڪنگ کي پاس ڪرڻ

هي هڪ ڪلائنٽ-سرور پروٽوڪول آهي پروٽوڪول بفرز ۽ فريم اسٽريمز جي بنياد تي ترتيب ڏنل DNS سوالن ۽ جوابن کي DNS سرور کان ڪليڪٽر ڏانهن منتقل ڪرڻ لاءِ. لازمي طور تي، DNS سرور منتقل ڪري ٿو درخواست ۽ جواب ميٽاداٽا (پيغام جو قسم، ڪلائنٽ/سرور IP، وغيره) ۽ مڪمل DNS پيغام (بائنري) فارم ۾ جنهن ۾ اهو ڪم ڪري ٿو انهن سان نيٽ ورڪ تي.

اهو سمجهڻ ضروري آهي ته DNSTap پيراڊم ۾، DNS سرور هڪ ڪلائنٽ طور ڪم ڪري ٿو، ۽ ڪليڪٽر هڪ سرور جي طور تي ڪم ڪري ٿو. اهو آهي، DNS سرور ڪليڪٽر سان ڳنڍيندو آهي، ۽ ان جي برعڪس نه.

اڄ، DNSTap سڀني مشهور DNS سرورز ۾ سپورٽ ڪئي وئي آهي. پر، مثال طور، BIND ڪيترن ئي تقسيم ۾ (جهڙوڪ Ubuntu LTS) اڪثر ڪري مرتب ڪيو ويو آهي ڪنهن سبب لاءِ ان جي مدد کان سواءِ. تنهنڪري اچو ته ٻيهر تعمير ڪرڻ سان پريشان نه ٿيون، پر هڪ هلڪو ۽ تيز ريسرسر وٺو - انبائونڊ.

DNSTap کي ڪيئن پڪڙيو؟

ڪري سگهو ٿا ڪجهه مقدار DNSTap واقعن جي وهڪري سان ڪم ڪرڻ لاءِ CLI افاديتون آهن، پر اهي اسان جي مسئلي کي حل ڪرڻ لاءِ مناسب نه آهن. تنهن ڪري مون پنهنجي سائيڪل کي ايجاد ڪرڻ جو فيصلو ڪيو، جيڪو هر ضروري ڪم ڪندو: dnstap-bgp

ڪم الورورٿم:

  • جڏهن لانچ ڪيو ويو، اهو هڪ ٽيڪسٽ فائل مان ڊومينز جي هڪ فهرست لوڊ ڪري ٿو، انهن کي تبديل ڪري ٿو (habr.com -> com.habr)، ٽوٽل لائينون، نقل ۽ ذيلي ڊومينز (يعني جيڪڏهن لسٽ ۾ habr.com ۽ www.habr.com شامل آهن، اهو صرف پهريون لوڊ ڪيو ويندو) ۽ هن لسٽ ذريعي جلدي ڳولا لاءِ اڳياڙي جو وڻ ٺاهي ٿو
  • DNSTap سرور جي طور تي ڪم ڪندي، اهو DNS سرور کان ڪنيڪشن جو انتظار ڪري ٿو. اصولي طور تي، اهو UNIX ۽ TCP ساکٽ ٻنهي کي سپورٽ ڪري ٿو، پر DNS سرورز جن کي مان ڄاڻان ٿو صرف UNIX ساکٽس کي سپورٽ ڪري ٿو
  • ايندڙ DNSTap پيڪٽس پهريون ڀيرو پروٽوبف ساخت ۾ ترتيب ڏنل آهن، ۽ پوء بائنري ڊي اين ايس پيغام پاڻ، پروٽوبف فيلڊ مان هڪ ۾ واقع آهي، ڊي اين ايس آر آر رڪارڊ جي سطح تي پارس ڪيو ويو آهي.
  • اهو چيڪ ڪيو ويو آهي ته ڇا درخواست ڪيل ميزبان (يا ان جي والدين ڊومين) لوڊ ٿيل فهرست ۾ آهي؛ جيڪڏهن نه، جواب کي نظرانداز ڪيو ويندو
  • جواب مان صرف A/AAAA/CNAME RRs چونڊيا ويا آهن ۽ لاڳاپيل IPv4/IPv6 ايڊريس انهن مان ڪڍيا ويا آهن
  • IP پتي کي ترتيب ڏيڻ واري TTL سان گڏ ڪيو ويو آهي ۽ سڀني ترتيب ڏنل BGP ساٿين کي اشتهار ڏنو ويو آهي
  • جڏهن اڳ ۾ ئي ڪيش ٿيل IP ڏانهن اشارو ڪندي جواب حاصل ڪيو، ان جي TTL اپڊيٽ ڪئي وئي آهي
  • TTL ختم ٿيڻ کان پوء، داخلا ڪيش ۽ BGP اعلانن مان هٽايو ويو آهي

اضافي ڪارڪردگي:

  • SIGHUP پاران ڊومينز جي لسٽ کي ٻيهر پڙهڻ
  • ڪيش کي ٻين مثالن سان هم وقت سازي ڪريو dnstap-bgp HTTP/JSON ذريعي
  • ڊسڪ تي ڪيش کي نقل ڪرڻ (بولٽ ڊي بي ڊيٽابيس ۾) ان جي مواد کي ٻيهر شروع ڪرڻ کان پوء بحال ڪرڻ لاء
  • مختلف نيٽ ورڪ جي نالي واري جاءِ تي سوئچ ڪرڻ لاءِ مدد (ڇو ضروري آھي ھيٺ بيان ڪيو ويندو)
  • IPv6 سپورٽ

حدون:

  • IDN ڊومينس اڃا تائين سپورٽ نه آهن
  • ڪجھ BGP سيٽنگون

مون گڏ ڪيو RPM ۽ DEB آسان تنصيب لاء پيڪيجز. سسٽم ڊي سان سڀني نسبتا تازي او ايسز تي ڪم ڪرڻ گهرجي، ڇاڪاڻ ته ... انهن جو ڪوبه انحصار ناهي.

هي منصوبو

تنهن ڪري، اچو ته سڀني اجزاء کي گڏ ڪرڻ شروع ڪريون. نتيجي طور، اسان کي ڪجهه حاصل ڪرڻ گهرجي هن نيٽ ورڪ ٽوپولوجي وانگر:
DNSTap ۽ BGP استعمال ڪندي RKN بلاڪنگ کي پاس ڪرڻ

ڪم جو منطق، مان سمجهان ٿو، ڊراگرام مان واضح آهي:

  • ڪلائنٽ اسان جي سرور کي DNS طور ترتيب ڏنو آهي، ۽ DNS درخواستون پڻ VPN ذريعي وڃڻ گهرجن. اهو ضروري آهي ته فراهم ڪندڙ کي بلاڪ ڪرڻ لاء DNS مداخلت استعمال نه ڪري سگهي.
  • جڏهن هڪ ڪلائنٽ هڪ ويب سائيٽ کوليندو آهي، اهو هڪ DNS درخواست موڪلي ٿو جهڙوڪ "ڇا IP وٽ xxx.org آهي؟"
  • Unbound حل ڪري ٿو xxx.org (يا ان کي ڪيش مان وٺي ٿو) ۽ ڪلائنٽ ڏانهن جواب موڪلي ٿو “xxx.org وٽ اهڙي ۽ اهڙي IP آهي”، انهي سان گڏ ان کي DNSTap ذريعي نقل ڪندي
  • dnstap-bgp انهن ايڊريس کي اشتهار ڏئي ٿو جنڊ BGP ذريعي جيڪڏهن ڊومين بلاڪ ٿيل لسٽ تي آهي
  • جنڊ انهن IPs ڏانهن هڪ رستي جو اشتهار ڏئي ٿو next-hop self ڪلائنٽ روٽر
  • ڪلائنٽ کان ايندڙ پيڪٽ انهن IPs ڏانهن سرنگ ذريعي وڃو

سرور تي، مان بلاڪ ٿيل سائيٽن جي رستن لاءِ BIRD جي اندر هڪ الڳ ٽيبل استعمال ڪريان ٿو ۽ اهو ڪنهن به طريقي سان OS سان ٽڪراءُ نٿو ڪري.

هن اسڪيم ۾ هڪ خرابي آهي: ڪلائنٽ کان پهريون SYN پيڪٽ گهڻو ڪري گهريلو فراهم ڪندڙ جي ذريعي وڃڻ جو وقت هوندو ڇاڪاڻ ته رستو فوري طور تي اعلان نه ڪيو ويو آهي. ۽ هتي ممڪن اختيار آهن انهي تي منحصر آهي ته مهيا ڪندڙ ڪيئن بلاڪ ڪري ٿو. جيڪڏهن هو صرف ٽرئفڪ کي ڇڏي، پوء ڪو مسئلو ناهي. ۽ جيڪڏهن اهو ان کي ڪجهه ڊي پي آئي ڏانهن منتقل ڪري ٿو، پوء (نظرياتي طور تي) خاص اثرات ممڪن آهن.

ڊي اين ايس TTL جو احترام نه ڪرڻ سان ڪلائنٽ سان معجزا پڻ ممڪن آهن، جيڪي ڪلائنٽ کي انبائونڊ کان پڇڻ بدران ان جي سڙيل ڪيش مان ڪجهه پراڻا رڪارڊ استعمال ڪري سگهن ٿا.

عملي طور تي، نه ته پهريون ۽ نه ئي سيڪنڊ مون لاء مسئلا پيدا ڪيو، پر توهان جو ميلو مختلف ٿي سگهي ٿو.

سرور ٽيوننگ

رولنگ جي آسانيءَ لاءِ، مون لکيو جواب ڏيڻ لاء ڪردار. اهو لينڪس جي بنياد تي سرور ۽ ڪلائنٽ ٻنهي کي ترتيب ڏئي سگھي ٿو (ڊي بي بنياد تي تقسيم لاء ٺهيل). سڀئي سيٽنگون بلڪل واضح آهن ۽ سيٽ ڪيل آهن inventory.yml. هي ڪردار منهنجي وڏي پلي بڪ مان ڪٽيو ويو هو، تنهنڪري ان ۾ غلطيون ٿي سگهن ٿيون. درخواست ڪڍو ڀلي ڪري آيا :)

اچو ته مکيه اجزاء ذريعي وڃو.

بي جي پي

جڏهن هڪ ئي ميزبان تي ٻه BGP ڊيمون هلائي رهيا آهن، هڪ بنيادي مسئلو پيدا ٿئي ٿو: BIRD BGP پيئرنگ کي مقامي هوسٽ (يا ڪنهن مقامي انٽرفيس سان) وڌائڻ نٿو چاهي. بلڪل لفظ مان. گوگلنگ ۽ پڙهڻ واري ميلنگ لسٽن کي مدد نه ڏني وئي، اهي دعوي ڪن ٿا ته اهو ڊزائن طرفان آهي. ٿي سگهي ٿو ڪو رستو هجي، پر مون کي اهو نه مليو آهي.

توهان ڪوشش ڪري سگهو ٿا ٻيو BGP ڊيمون، پر مون کي BIRD پسند آهي ۽ مان ان کي هر جڳهه استعمال ڪريان ٿو، مان وڌيڪ ادارا ٺاهڻ نٿا چاهين.

تنهن ڪري، مون dnstap-bgp کي نيٽ ورڪ نيمس اسپيس اندر لڪايو، جيڪو روٽ سان ويٿ انٽرفيس ذريعي ڳنڍيل آهي: اهو هڪ پائپ وانگر آهي، جنهن جا پڇاڙيون مختلف نالن جي اسپيس ۾ نڪرنديون آهن. انهن مان هر هڪ سر تي اسان نجي p2p IP پتي کي ڳنڍيندا آهيون جيڪي ميزبان کان ٻاهر نه ويندا آهن، تنهنڪري اهي ڪجهه به ٿي سگهن ٿا. اهو ساڳيو ميڪانيزم آهي جيڪو اندروني طور تي عملن تائين رسائي لاءِ استعمال ڪيو ويندو آهي سڀني جي پسنديده Docker ۽ ٻيا ڪنٽينر.

ان ڪري لکيو ويو هو اسڪرپٽ ۽ اڳ ۾ ئي بيان ڪيل مٿي بيان ڪيل ڪارڪردگي پاڻ کي بال ذريعي ڇڪڻ جي ٻئي نالي جي جاء تي شامل ڪيو ويو dnstap-bgp. انهي جي ڪري، ان کي روٽ طور هلائڻ گهرجي يا CAP_SYS_ADMIN بائنري کي سيٽ ڪيپ ڪمانڊ ذريعي ڏنو وڃي.

نالو اسپيس ٺاهڻ لاءِ مثال اسڪرپٽ

#!/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 بائنري کي AppArmor پروفائل سان گڏ ڪيو ويو آهي، جيڪو ان کي ڪنهن به DNSTap ساکٽ سان ڳنڍڻ کان منع ڪري ٿو. توهان يا ته هن پروفائل کي حذف ڪري سگھو ٿا يا ان کي بند ڪري سگھو ٿا:

# 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 پتي جي لسٽ ڊائون لوڊ ۽ پروسيسنگ لاءِ اسڪرپٽ
اهو فهرست ڊائون لوڊ ڪري ٿو، اڳيئي ڏانهن اختصار ڪري ٿو پي ايف ايڪس. جي شامل نه ڪريو и summarize نه ڪريو توهان IPs ۽ نيٽ ورڪن کي ٻڌائي سگهو ٿا جن کي ڇڏڻ جي ضرورت آهي يا نه خلاصو. مون کي اها ضرورت هئي ڇاڪاڻ ته ... منهنجو VPS سب نيٽ بلاڪ لسٽ تي هو :)

عجيب ڳالهه اها آهي ته RosKomSvoboda API بلاڪ ڪري ٿو درخواستن کي ڊفالٽ پٿن صارف ايجنٽ سان. ڏسجي ٿو ته انهن کي اسڪرپٽ ڪچي ملي. تنهن ڪري، اسان ان کي 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)

تازه ڪاري لاء اسڪرپٽ
مان ان کي ڏينهن ۾ هڪ ڀيرو تاج ذريعي هلائيندو آهيان، ٿي سگهي ٿو اهو ان کي هر 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

اهي بغير ڪنهن سوچ جي لکيا ويا، تنهنڪري جيڪڏهن توهان ڪجهه ڏسندا ته بهتر ٿي سگهي ٿو، ان لاء وڃو.

ڪسٽمر سيٽ اپ

هتي آئون لينڪس روٽرز لاءِ مثال ڏيندس، پر 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 کان حاصل ڪيل رستن کي ڪرنل روٽنگ ٽيبل نمبر 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 کي ترتيب ڏيڻ لاءِ روٽر تي سرور جي سرنگ IP پتي کي DNS طور ورهائڻ ۽ اسڪيم تيار آهي.

shortcomings

ڊومينز جي لسٽ ٺاهڻ ۽ پروسيسنگ لاءِ موجوده الگورتھم سان، ان ۾ شامل آھي، ٻين شين جي وچ ۾، youtube.com ۽ ان جي CDNs.

۽ اها حقيقت اها آهي ته سڀئي وڊيوز VPN ذريعي موڪليا ويندا، جيڪي پوري چينل کي بند ڪري سگهن ٿا. اهو ٿي سگهي ٿو ته مشهور استثنا ڊومينز جي هڪ فهرست گڏ ڪرڻ جي قابل هجي ته RKN اڃا تائين بلاڪ ڪرڻ لاء تمام ڪمزور آهي. ۽ انھن کي ڇڏي ڏيو جڏھن parsing.

ٿڪل

بيان ڪيل طريقو توهان کي تقريبن ڪنهن به بلاڪنگ کي نظرانداز ڪرڻ جي اجازت ڏئي ٿو جيڪي مهيا ڪندڙ هن وقت لاڳو ڪن ٿا.

اصول ۾، dnstap-bgp ڪنهن ٻئي مقصدن لاءِ استعمال ٿي سگهي ٿو جتي ڊومين جي نالي جي بنياد تي ٽرئفڪ جي انتظام جي هڪ خاص سطح جي ضرورت آهي. توهان کي صرف انهي ڳالهه ۾ رکڻ جي ضرورت آهي ته اڄڪلهه هڪ هزار سائيٽون ساڳئي IP پتي تي لٽڪي سگهن ٿيون (مثال طور، ڪجهه Cloudflare جي پويان)، تنهنڪري هن طريقي جي بدران گهٽ درستگي آهي.

پر بائي پاس بلاڪنگ جي ضرورتن لاء، اهو ڪافي آهي.

اضافو، ترميمون، ڇڪڻ جون درخواستون ڀليڪار آهن!

جو ذريعو: www.habr.com

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